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