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 oceanbase.GV$OB_PARAMETERS WHERE name LIKE '%iut_stat_collection%';
以下のSQLステートメントを使用して設定できます:
ALTER SYSTEM SET _iut_stat_collection_type="ALL";
例
テーブル
test_tbl1を作成します。obclient [test_db]> CREATE TABLE test_tbl1 (col1 INT PRIMARY KEY, col2 VARCHAR(50) NOT NULL, col3 INT);テーブル
test_tbl1の列col3に、idx1_test_tbl1という名前のインデックスを作成します。obclient [test_db]> CREATE INDEX idx1_test_tbl1 ON test_tbl1(col3);テーブル
test_tbl1に5件のデータを挿入します。obclient [test_db]> INSERT INTO test_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: 0SELECTクエリを実行します。obclient [test_db]> SELECT col1, col2 FROM test_tbl1 WHERE col3 >= 25;実行結果は次のとおりです:
+------+-------+ | col1 | col2 | +------+-------+ | 5 | name5 | | 4 | name4 | +------+-------+ 2 rows in setビュー
DBA_INDEX_USAGEを確認します。説明
インデックス監視は統計情報を収集した後、バックグラウンドの定期タスクを通じてデータを内部テーブルに書き込みます。そのため、ビューでインデックス使用状況の監視結果を確認するまで、最大で15分ほど待つ必要があります。
obclient [test_db]> SELECT OBJECT_ID, NAME, OWNER, TOTAL_ACCESS_COUNT, TOTAL_EXEC_COUNT, LAST_USED FROM oceanbase.DBA_INDEX_USAGE;実行結果は次のとおりです:
Empty setデフォルトの
SAMPLEDモードでは、すべてのインデックス使用データが内部テーブルに記録されるわけではないため、ビューで期待される監視結果が得られない場合があります。SQLステートメントを使用して非サンプリングモードに変更し、データを収集することができます。例えば、以下の操作を実行します:以下のSQLステートメントを使用して、インデックス情報収集モードを
ALLに設定します。ALTER SYSTEM SET _iut_stat_collection_type="ALL";再度
SELECTクエリを実行します。SELECT col1, col2 FROM test_tbl1 WHERE col3 >= 25;再度ビュー
DBA_INDEX_USAGEを確認します。説明
インデックス監視は統計情報を収集した後、バックグラウンドの定期タスクを通じてデータを内部テーブルに書き込みます。そのため、ビューでインデックス使用状況の監視結果を確認するまで、最大で15分ほど待つ必要があります。
SELECT OBJECT_ID, NAME, OWNER, TOTAL_ACCESS_COUNT, TOTAL_EXEC_COUNT, LAST_USED FROM oceanbase.DBA_INDEX_USAGE;実行結果は次のとおりです:
+-----------+-----------------------------+---------+--------------------+------------------+----------------------------+ | OBJECT_ID | NAME | OWNER | TOTAL_ACCESS_COUNT | TOTAL_EXEC_COUNT | LAST_USED | +-----------+-----------------------------+---------+--------------------+------------------+----------------------------+ | 500127 | __idx_500126_idx1_test_tbl1 | test_db | 1 | 1 | 2024-01-24 11:09:30.928232 | +-----------+-----------------------------+---------+--------------------+------------------+----------------------------+ 1 row in setクエリ結果の説明:
TOTAL_ACCESS_COUNTフィールドは、SELECT操作時にtest_dbデータベースのidx1_test_tbl1(__idx_500126_idx1_test_tbl1)インデックスが1回アクセスされ、最後にアクセスされた時刻が2024-01-24 11:09:30.928232であることを示しています。フィールドの説明:
OBJECT_ID:インデックステーブルID。NAME:インデックステーブル名。OWNER:データベース名。TOTAL_ACCESS_COUNT:合計アクセス回数。TOTAL_EXEC_COUNT:合計実行回数。LAST_USED:インデックステーブルが最後に使用された時刻。
ビュー
DBA_INDEX_USAGEのフィールドの詳細については、DBA_INDEX_USAGEを参照してください。