このページでは、ベクトル インデックスに関する統計情報を保存する Spanner の組み込みテーブルについて説明します。ベクトル インデックスの統計情報を使用すると、ベクトル インデックスのパフォーマンスを確認して改善できる領域を特定し、指標に基づいてインデックスをチューニングできます。
SQL ステートメントを使用すると、SPANNER_SYS.VECTOR_INDEX_STATS テーブルから統計情報を取得できます。
Spanner は、SPANNER_SYS スキーマにベクトル インデックスの統計情報を提供します。SPANNER_SYS データにアクセスするには、次の方法を使用できます。
Google Cloud コンソールのデータベースの Spanner Studio ページ
executeSqlメソッドまたはexecuteStreamingSqlメソッド。
ベクトル インデックスの統計情報
SPANNER_SYS.VECTOR_INDEX_STATS には、データベース内の各ベクトル インデックスに関する統計情報が STATISTICS_COLLECTION_TIMESTAMP で並べ替えられて格納されます。Spanner は、3 日ごとに各ベクトル インデックスに関するデータを収集します。データが収集されると、Spanner はすぐに VECTOR_INDEX_STATS テーブルでデータを使用できるようにします。この表の情報からインデックスに関する分析情報を取得し、推奨事項をチューニングして適用することで、ベクトル検索のパフォーマンスを向上させることができます。
| 列名 | 説明 | チューニングのガイダンス |
|---|---|---|
START_TIME |
Spanner がインデックス指標を収集した時刻。 | 該当なし |
VECTOR_INDEX_NAME |
CREATE VECTOR INDEX ステートメントで指定されたベクトル インデックスの名前。 |
該当なし |
NUM_LEAVES |
このベクトル インデックスで使用されるリーフ(クラスタとも呼ばれます)の総数。この数は、ベクトル インデックスの作成時に決定されます。Spanner がベクトル インデックスを適応的に再形成するため、時間の経過とともに変化する可能性があります。 | 作成後にインデックス付きテーブルに多くの行が追加されると、一部のクラスタが非常に大きくなり、クエリのレイテンシに影響する可能性があります。インデックス内のクラスタ数がテーブルの行数の平方根以上である場合は、クラスタ数を増やしてインデックスを再構築することをおすすめします。 |
NUM_ZERO_SIZE_CLUSTERS_SAMPLED |
ベクトル インデックス内の空のクラスタのサンプリングされた数。空のクラスタには行が割り当てられていません。 | テーブルから行が追加および削除されると、一部のクラスタが空になることがあります。空のクラスタが多い場合、ベクトル インデックスが古い可能性があります。クラスタの 10% 以上が空の場合は、クラスタ数を減らしてインデックスを再構築することを検討してください。大規模なベクトル インデックスの場合、Spanner はランダム サンプリングを使用して測定の費用を制限します。したがって、この指標はサンプリングされたサイズ 0 のクラスタの数を表します。これをサイズゼロのクラスタの推定数に変換するには、次のクエリを使用します。
|
CLUSTER_SIZE_PERCENTILES |
ベクトル インデックスは、インデックス付きエンベディングを近傍ベクトルのクラスタに分割します。この分布列には、これらのクラスタのサイズのパーセンタイル値が表示されます。 | ベクトル インデックス作成を支える K 平均法クラスタリング プロセスでは、通常、さまざまなサイズのクラスタが生成されます。そのため、ある程度の不均衡が生じることが予想されます。クラスタサイズに大きな偏差がある場合、大きなクラスタを検索するとクエリのパフォーマンスが低下します。99 パーセンタイルのクラスタサイズが 50 パーセンタイルのクラスタサイズの 8 倍以上の場合、偏差は大きくなります。クエリ例 1 をご覧ください。 |
CLUSTER_AVERAGE_DISTANCE_TO_CENTROID_PERCENTILES |
各クラスタには中心点(セントロイド)があります。高い再現率を実現するために、通常、ベクトルはインデックスの作成時に選択した構成に従って、近くのセントロイドに割り当てられます。Spanner は、クラスタごとに、セントロイドから割り当てられたすべてのベクトルまでの推定平均距離を計算します。クラスタ間の自然なばらつきにより、Spanner はこの指標を分布としてレポートします。これは、パーセンタイル値のリストとして示されます。 | この指標は、ベクトル インデックス間で比較できません(特に、ユークリッド インデックスとコサイン インデックスは異なる方法でスケーリングされます)。この指標は、各ベクトル インデックスについて個別に経時的に追跡します。99 パーセンタイルの値が過去の最小値から 2 倍になった場合は、インデックスを再構築して値を下げることを検討してください。クエリの例 2 をご覧ください。 |
クエリの例 1
次のクエリは、特定のベクトル インデックスの 99 パーセンタイルのクラスタサイズを中央値のクラスタサイズで割った値を経時的にレポートします。99 パーセンタイルのクラスタサイズが 50 パーセンタイルのクラスタサイズの 8 倍以上大きい場合は、インデックスの再構築を検討してください。」
SELECT VECTOR_INDEX_NAME,
START_TIME,
SUM(CASE WHEN percentile = 99 THEN value_at_percentile ELSE 0 END)
/ SUM(CASE WHEN percentile = 50 THEN value_at_percentile ELSE 0 END) as cluster_size_imbalance
FROM (
SELECT v.VECTOR_INDEX_NAME,
v.START_TIME, d.percentile,
d.value_at_percentile
FROM SPANNER_SYS.VECTOR_INDEX_METRICS_HISTORY AS v,
UNNEST(v.CLUSTER_AVERAGE_DISTANCE_TO_CENTROID_PERCENTILES)
AS d)
WHERE VECTOR_INDEX_NAME = "VecIndex2"
GROUP BY 1, 2;
クエリ出力
| VECTOR_INDEX_NAME | START_TIME | cluster_size_imbalance |
|---|---|---|
| VecIndex2 | 2025-12-10 10:09:55.322415+00:00 | 3.288 |
| VecIndex2 | 2025-12-07 10:10:02.362223+00:00 | 3.11 |
| VecIndex2 | 2025-12-04 10:09:55.180895+00:00 | 2.98 |
| VecIndex2 | 2025-12-01 10:10:01.680543+00:00 | 3.01 |
| VecIndex2 | 2025-11-28 10:10:02.130079+00:00 | 2.99 |
クエリの例 2
次のクエリは、各ベクトル インデックスのセントロイドまでの 99 パーセンタイルの距離を時系列でレポートします。この指標は、再現率のパフォーマンスを間接的に示すものです。値の正確な意味は、エンベディングによって異なります。各ベクトル インデックスを個別に、また時系列として追跡します。特定のインデックスの 99 パーセンタイルの値が過去の最小値から 2 倍になった場合は、インデックスの再構築を検討してください。
SELECT v.VECTOR_INDEX_NAME,
v.START_TIME,
d.value_at_percentile AS distance_to_centroid_99p
FROM SPANNER_SYS.VECTOR_INDEX_METRICS_HISTORY AS v,
UNNEST(v.CLUSTER_AVERAGE_DISTANCE_TO_CENTROID_PERCENTILES) AS d
WHERE d.percentile=99
ORDER BY VECTOR_INDEX_NAME, START_TIME DESC;
クエリ出力
| VECTOR_INDEX_NAME | START_TIME | distance_to_centroid_99p |
|---|---|---|
| ANNVectorBase_VI | 2025-12-10 10:09:55.322415+00:00 | 1.109 |
| ANNVectorBase_VI | 2025-12-07 10:10:02.362223+00:00 | 1.11 |
| ANNVectorBase_VI | 2025-12-04 10:09:55.180895+00:00 | 1.18 |
| ANNVectorBase_VI | 2025-12-01 10:10:01.680543+00:00 | 1.11 |
| ANNVectorBase_VI | 2025-11-28 10:10:02.130079+00:00 | 1.04 |
データの保持
SPANNER_SYS.VECTOR_INDEX_METRICS_HISTORY システム テーブルには、過去 30 日間のデータが保持されます。
次のステップ
- ベクトル インデックスを再構築する方法を確認する。