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