OceanBaseデータベースはインデックスの監視機能を提供しており、ビューDBA_INDEX_USAGEを使用してインデックスの監視結果を照会することで、インデックスの使用状況をより明確に把握できます。インデックステーブルが削除されると、OceanBaseデータベースはバックグラウンドで定期的に対応する監視データレコードをクリーンアップし、手動での削除は不要です。
説明
ユーザーテナント以外のインデックス使用量は統計対象外であり、ビューDBA_INDEX_USAGEはユーザーテナントのデータのみを表示します。
注意事項
テナントレベルの構成パラメータ
_iut_stat_collection_type=ALLを設定すると、インデックスクエリのパフォーマンスがある程度低下する可能性があります。そのため、このモードを使用する際は慎重に検討し、パフォーマンスの後退による影響を十分に考慮する必要があります。テナントレベルの構成パラメータ
_iut_max_entriesは、保存されるインデックステーブルの上限を設定します。この構成パラメータを過大に設定すると、テナントのメモリ消費量が増加する可能性があるため、30000を超える値に設定することは推奨されません。
使用方法
- インデックス監視機能はデフォルトで有効になっており、デフォルトのサンプリング(SAMPLED)モードでは、パフォーマンスへの影響は非常に小さく、無視できると考えてもよいでしょう。
パラメータ
OceanBaseデータベースでは、監視対象のインデックスの監視方式を制御するために、以下のテナントレベルの構成パラメータを変更できます。
説明
異なるテナント間の構成パラメータやデータ集計は相互に独立しており、互いに干渉することはありません。
| 構成パラメータ | デフォルト値 | 説明 |
|---|---|---|
| _iut_enable | true | インデックスモニタリングを有効にするかどうかを制御します。デフォルト値はtrueで、モニタリングが有効であることを示します。falseはモニタリングが無効であることを示します。 |
| _iut_max_entries | 30000 | モニタリング対象のインデックステーブル数を制御します。デフォルト値は30000で、値の範囲は[0, +∞)です。
説明
|
| _iut_stat_collection_type | SAMPLED | インデックスモニタリング情報の統計モードを制御します。以下の2つの値から選択できます:
|
インデックス監視情報の統計モード
インデックス監視はクラスタ起動時にデフォルトのサンプリング(SAMPLED)モードを採用しているため、このモードではすべてのインデックス使用データが内部テーブルに記録されるわけではありません。その結果、ビュー DBA_INDEX_USAGE のクエリ結果が空になる場合があります。正確な情報が必要な場合は、現在のテナントで監視対象のインデックス情報収集モードを ALL に設定できます。
次のSQLステートメントを使用して、構成パラメータ _iut_stat_collection_type の値を確認できます:
SELECT name, data_type, value FROM sys.GV$OB_PARAMETERS WHERE name LIKE '%iut_stat_collection%';
次のSQLステートメントを使用して、監視対象のインデックス情報収集モードを設定します:
ALTER SYSTEM SET "_iut_stat_collection_type"='ALL';
例
テーブル
tbl1を作成します。CREATE TABLE tbl1 (col1 NUMBER PRIMARY KEY, col2 VARCHAR(50) NOT NULL, col3 NUMBER);テーブル
tbl1の列col3に、idx1_tbl1という名前のインデックスを作成します。CREATE INDEX idx1_tbl1 ON tbl1(col3);テーブル
tbl1に5件のデータを挿入します。INSERT INTO tbl1 VALUES (1, 'name1', 20),(2, 'name2', 19),(3, 'name3', 20),(4, 'name4', 29),(5, 'name5', 26);実行結果は次のとおりです:
Query OK, 5 rows affected Records: 5 Duplicates: 0 Warnings: 0COMMIT;を実行します。SELECTクエリを実行します。SELECT col1, col2 FROM tbl1 WHERE col3 >= 25;実行結果は次のとおりです:
+------+-------+ | COL1 | COL2 | +------+-------+ | 5 | name5 | | 4 | name4 | +------+-------+ 2 rows in setビュー
DBA_INDEX_USAGEを確認します。SELECT OBJECT_ID, NAME, OWNER, TOTAL_ACCESS_COUNT, TOTAL_EXEC_COUNT, LAST_USED FROM sys.DBA_INDEX_USAGE;実行結果は次のとおりです:
Empty setデフォルトの
SAMPLEDモードでは、すべてのインデックスの使用データが内部テーブルに記録されるわけではなく、ビューで期待されるモニタリング結果を照会できない場合があります。SQLステートメントを使用して非サンプリングモードに変更することでデータを収集できます。例えば、以下の操作を実行します:以下のSQLステートメントを使用して、モニタリングインデックス情報収集モードを
ALLに設定します。ALTER SYSTEM SET "_iut_stat_collection_type"='ALL';再度
SELECTクエリを実行します。SELECT col1, col2 FROM tbl1 WHERE col3 >= 25;再度ビュー
DBA_INDEX_USAGEを確認します。説明
インデックスモニタリングは統計情報を収集した後、バックグラウンドのスケジュールタスクを通じてデータを内部テーブルに書き込みます。そのため、ビューでインデックス使用状況のモニタリング結果を照会できるまでには、最大で15分ほど待機する必要がある場合があります。
SELECT OBJECT_ID, NAME, OWNER, TOTAL_ACCESS_COUNT, TOTAL_EXEC_COUNT, LAST_USED FROM sys.DBA_INDEX_USAGE;実行結果は次のとおりです:
+-----------+------------------------+-------+--------------------+------------------+------------------------------+ | OBJECT_ID | NAME | OWNER | TOTAL_ACCESS_COUNT | TOTAL_EXEC_COUNT | LAST_USED | +-----------+------------------------+-------+--------------------+------------------+------------------------------+ | 500269 | __idx_500266_IDX1_TBL1 | SYS | 1 | 1 | 24-JAN-24 02.28.38.264523 PM | +-----------+------------------------+-------+--------------------+------------------+------------------------------+ 1 row in setクエリ結果の説明:
TOTAL_ACCESS_COUNTフィールドは、SELECT操作時にSYSスキーマのidx1_tbl1(__idx_500266_IDX1_TBL1)という名前のインデックスが1回アクセスされ、最後にアクセスされた時間が24-JAN-24 02.28.38.264523 PMであることを示しています。フィールドの説明は以下のとおりです:
OBJECT_ID:インデックステーブルID。NAME:インデックステーブル名。OWNER:データベース名。TOTAL_ACCESS_COUNT:合計アクセス回数。TOTAL_EXEC_COUNT:合計実行回数。LAST_USED:インデックステーブルが最後に使用された時間。
ビュー
DBA_INDEX_USAGEのフィールドの詳細については、DBA_INDEX_USAGEを参照してください。