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を参照してください。