OceanBase ベクトル検索は、IVFインデックス向けにパフォーマンス自動最適化メカニズムを提供しており、キャッシュ管理と定期的なメンテナンスにより検索性能を向上させます。本記事では、パフォーマンス最適化タスクの設定とモニタリング方法について説明します。
注意
この機能は V4.3.5 BP3 以降のバージョンからサポートされており、現在は IVF シリーズのインデックスのみ対象です。
最適化メカニズム
IVFシリーズインデックスのパフォーマンス最適化には、2つの自動タスクが含まれます。
- キャッシュウォームアップタスク:定期的にすべてのIVFシリーズインデックスをチェックし、インデックスに対応するキャッシュが存在しない場合は、自動的にキャッシュウォームアップをトリガーして、インデックスデータをメモリにロードします。また、IVFシリーズインデックスを作成する際には、自動的にキャッシュがウォームアップされます。
- キャッシュクリーンアップタスク:定期的にすべてのIVFシリーズインデックスのキャッシュをチェックし、キャッシュに対応するインデックスが削除された場合は、自動的に無効なキャッシュをクリーンアップしてメモリリソースを解放します。また、IVFシリーズインデックスを削除する際には、自動的にキャッシュがクリーンアップされます。
最適化タスクの実行周期を設定する
システムでは、パフォーマンス最適化タスクの実行時間帯をカスタマイズできるため、業務のピーク時間帯に影響が出ないように設定できます。
oceanbaseデータベースで、設定パラメータ vector_index_optimize_duty_time を使用して実行周期を設定します。
ALTER SYSTEM SET vector_index_optimize_duty_time='[23:00:00, 24:00:00]';
設定の説明は以下のとおりです:
- 時間は
[開始時間, 終了時間]の形式で指定します。 - 上記の設定では、23:00:00~24:00:00の時間帯にのみ最適化タスクが実行されます。
- その他の時間帯では最適化タスクが実行されないため、正常な業務に影響が出ないようにしています。
最適化タスクを監視する
OceanBaseのベクトルインデックスでは、最適化タスクを監視する機能が提供されています。
- DBA_OB_VECTOR_INDEX_TASKSビューを使用して、実行中または待機中のタスクを確認できます。
- DBA_OB_VECTOR_INDEX_TASK_HISTORYビューを使用して、過去のタスク履歴を確認できます。
具体的な使用例は以下のとおりです:
現在のタスク状態を確認する
DBA_OB_VECTOR_INDEX_TASKSビューを使用して、実行中または待機中のタスクを確認します。SELECT * FROM oceanbase.DBA_OB_VECTOR_INDEX_TASKS;実行結果の例:
+----------+---------------------+---------+----------------------------+----------------------------+--------------+----------+-----------+------------------+----------+------------------------------------+ | TABLE_ID | TABLET_ID | TASK_ID | START_TIME | MODIFY_TIME | TRIGGER_TYPE | STATUS | TASK_TYPE | TASK_SCN | RET_CODE | TRACE_ID | +----------+---------------------+---------+----------------------------+----------------------------+--------------+----------+-----------+------------------+----------+------------------------------------+ | 500020 | 1152921504606846990 | 2002281 | 1970-08-23 17:10:23.174127 | 1970-08-23 17:10:23.174137 | USER | FINISHED | 2 | 1750671687770026 | 0 | YAFF00B9E4D97-00063839E6BD9BBC-0-1 | +----------+---------------------+---------+----------------------------+----------------------------+--------------+----------+-----------+------------------+----------+------------------------------------+ 1 row in setタスクの状態の説明:
STATUS = 0:PREPARE、タスクが実行を待機しています。STATUS = 1:RUNNING、タスクが実行中です。STATUS = 3:FINISHED、タスクが完了しました。
タスクタイプの説明:
TASK_TYPE = 2:IVFキャッシュウォームアップタスク。TASK_TYPE = 3:IVF無効キャッシュクリーンアップタスク。
過去のタスク履歴を確認する
完了したタスク(
STATUS = 3)は、成功したかどうかにかかわらず、10秒ごとに自動的に履歴テーブルに移行されます。DBA_OB_VECTOR_INDEX_TASKS_HISTORYビューを使用して履歴を確認します。-- 指定されたタスクIDの履歴を照会する SELECT * FROM oceanbase.DBA_OB_VECTOR_INDEX_TASKS_HISTORY WHERE TASK_ID=2002281;実行結果の例:
+----------+---------------------+---------+----------------------------+----------------------------+--------------+----------+-----------+------------------+----------+------------------------------------+ | TABLE_ID | TABLET_ID | TASK_ID | START_TIME | MODIFY_TIME | TRIGGER_TYPE | STATUS | TASK_TYPE | TASK_SCN | RET_CODE | TRACE_ID | +----------+---------------------+---------+----------------------------+----------------------------+--------------+----------+-----------+------------------+----------+------------------------------------+ | 500020 | 1152921504606846990 | 2002281 | 1970-08-23 17:10:23.174127 | 1970-08-23 17:10:23.174137 | AUTO | FINISHED | 2 | 1750671687770026 | 0 | YAFF00B9E4D97-00063839E6BD9BBC-0-1 | +----------+---------------------+---------+----------------------------+----------------------------+--------------+----------+-----------+------------------+----------+------------------------------------+ 1 row in set
オプティマイズタスクのキャンセル
以下のコマンドを使用して、指定されたタスクをキャンセルできます。
-- trace_idは上記のDBA_OB_VECTOR_INDEX_TASKS_HISTORYビューから取得します
ALTER SYSTEM CANCEL TASK <trace_id>;
注意
タスクの失敗時のリトライ段階で、かつALTER SYSTEM CANCEL TASKコマンドを実行した場合にのみ、タスクをキャンセルできます。バックグラウンドタスクが特定の実行段階に停止している場合、このコマンドではタスクをキャンセルできません。
例:
-- システムにログインし、指定されたタスクのtrace_idを取得します
SELECT * FROM oceanbase.DBA_OB_VECTOR_INDEX_TASK_HISTORY WHERE TASK_ID=2037736;
+----------+---------------------+---------+----------------------------+----------------------------+--------------+----------+-----------+------------------+----------+------------------------------------+
| TABLE_ID | TABLET_ID | TASK_ID | START_TIME | MODIFY_TIME | TRIGGER_TYPE | STATUS | TASK_TYPE | TASK_SCN | RET_CODE | TRACE_ID |
+----------+---------------------+---------+----------------------------+----------------------------+--------------+----------+-----------+------------------+----------+------------------------------------+
| 500041 | 1152921504606847008 | 2037736 | 1970-08-23 17:10:23.203821 | 1970-08-23 17:10:23.203821 | USER | PREPARED | 2 | 1750682301145225 | -1 | YAFF00B9E4D97-00063839E6BDDEE0-0-1 |
+----------+---------------------+---------+----------------------------+----------------------------+--------------+----------+-----------+------------------+----------+------------------------------------+
1 row in set
-- タスクをキャンセルします
ALTER SYSTEM CANCEL TASK "YAFF00B9E4D97-00063839E6BDDEE0-0-1";
タスクをキャンセルすると、タスクのステータスはCANCELLEDになります。
-- ユーザーデータベースにログインし、タスクの状態を照会します。
SELECT * FROM oceanbase.DBA_OB_VECTOR_INDEX_TASK_HISTORY;
+----------+---------------------+---------+----------------------------+----------------------------+--------------+----------+-----------+------------------+----------+------------------------------------+
| TABLE_ID | TABLET_ID | TASK_ID | START_TIME | MODIFY_TIME | TRIGGER_TYPE | STATUS | TASK_TYPE | TASK_SCN | RET_CODE | TRACE_ID |
+----------+---------------------+---------+----------------------------+----------------------------+--------------+----------+-----------+------------------+----------+------------------------------------+
| 500041 | 1152921504606847008 | 2037736 | 1970-08-23 17:10:23.203821 | 1970-08-23 17:10:23.203821 | USER | FINISHED | 2 | 1750682301145225 | -4072 | YAFF00B9E4D97-00063839E6BDDEE0-0-1 |
+----------+---------------------+---------+----------------------------+----------------------------+--------------+----------+-----------+------------------+----------+------------------------------------+
1 row in set