すべてのプロダクト
Search
ドキュメントセンター

PolarDB:ベクターのパフォーマンス

最終更新日:May 13, 2025

このトピックでは、ベクターデータベースの一般的なパフォーマンスの最適化と監視操作について説明します。

読み込み

ベクターの一括読み込みには、COPY を使用します。

COPY items (embedding) FROM STDIN WITH (FORMAT BINARY);

最適なパフォーマンスを確保するために、初期データの読み込み後にインデックスを追加します。

インデックス作成

クエリ

パフォーマンスをデバッグするには、EXPLAIN ANALYZE を使用します。

EXPLAIN ANALYZE SELECT * FROM items ORDER BY embedding <-> '[3,1,2]' LIMIT 5;

完全一致検索

  • インデックスを使用できないクエリを高速化するために、max_parallel_workers_per_gather パラメーターを調整して、実行計画におけるパラレルクエリ機能を制御できます。 この値を適切に増やすと、集計やソートのために大量のデータを処理する場合のクエリのパフォーマンスが大幅に向上する可能性があります。

    SET max_parallel_workers_per_gather = 4;
  • ベクターの長さが 1 に正規化されている場合は、最高のパフォーマンスを得るために内積を使用します。

    SELECT * FROM items ORDER BY embedding <#> '[3,1,2]' LIMIT 5;

近似検索

IVFFlat インデックスを使用するクエリを高速化するには、反転リストの数を増やすことができます(ただし、取得率は低下します)。

CREATE INDEX ON items USING ivfflat (embedding vector_l2_ops) WITH (lists = 1000);

バキューム

HNSW インデックスのバキュームには長い時間がかかる場合があります。 このプロセスを高速化するには、最初にインデックスを再構築します。

REINDEX INDEX CONCURRENTLY index_name;
VACUUM table_name;

監視

クエリのパフォーマンスを監視するには、pg_stat_statements 拡張機能を作成します。

説明

pg_stat_statements 拡張機能を作成する前に、shared_preload_libraries に追加されていることを確認してください。 shared_preload_libraries パラメーターの変更によって、PolarDB コンソールで追加できます。 shared_preload_libraries パラメーターを変更すると、クラスターが再起動します。 ビジネス運用への影響を最小限に抑えるために、慎重に計画し、実行してください。

CREATE EXTENSION IF NOT EXISTS pg_stat_statements;
  • 時間のかかる上位 20 件のクエリを検索します。

    説明

    PolarDB for PostgreSQL 11 では、次のステートメントの total_plan_time + total_exec_timetotal_time に置き換えます。

    SELECT query, calls, ROUND((total_plan_time + total_exec_time) / calls) AS avg_time_ms,
        ROUND((total_plan_time + total_exec_time) / 60000) AS total_time_min
        FROM pg_stat_statements ORDER BY total_plan_time + total_exec_time DESC LIMIT 20;
  • 近似検索と完全一致検索の結果を比較して、取得率を監視します。

    BEGIN;
    SET LOCAL enable_indexscan = off; -- 完全一致検索を使用します。
    SELECT ...
    COMMIT;