OceanBase のベクトル検索は、IVF インデックスに対してパフォーマンスの自動最適化メカニズムを提供し、キャッシュ管理と定期的なメンテナンスによって検索性能を向上させます。このドキュメントでは、パフォーマンス最適化タスクの設定と監視方法について説明します。
注意
現在、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