alloydb_scann 拡張機能をインストールすると利用できる pg_stat_ann_indexes ビューを使用して表示できます。
指標の表示の詳細については、ベクトル インデックスの指標を表示するをご覧ください。
ユーザビリティ指標
ユーザビリティ指標には、インデックス構成やインデックス スキャン数など、インデックス使用率の状態を把握する際に役立つ指標が含まれています。
| 指標名 | データ型 | 説明 | 
|---|---|---|
| relid | OID | ベクトル インデックスを含むテーブルの固有識別子 | 
| indexrelid | OID | ベクトル インデックスの固有識別子 | 
| schemaname | NAME | インデックスを所有するスキーマの名前 | 
| relname | NAME | インデックスを含むテーブルの名前 | 
| indexrelname | NAME | インデックスの名前 | 
| indextype | NAME | インデックスの種類。この値は常に scannに設定されます。 | 
| indexconfig | TEXT[] | インデックスの作成時に定義された、リーフ数や量子化などの構成 | 
| indexsize | TEXT | インデックスのサイズ | 
| indexscan | BIGINT | インデックスで開始されたインデックス スキャンの数 | 
チューニング指標
チューニング指標を使用すると、現在のインデックスの最適化に関する分析情報を取得し、推奨事項を適用してクエリのパフォーマンスを向上させることができます。
| 指標名 | データ型 | 説明 | 
|---|---|---|
| insertcount | BIGINT | インデックスに対する挿入オペレーションの数。この指標には、インデックスの作成前に存在していた行数も含まれます。 | 
| updatecount | BIGINT | インデックスに対する更新オペレーションの数。この指標には HOT アップデートは含まれません。 | 
| deletecount | BIGINT | インデックスに対する削除オペレーションの数。 | 
| distribution | JSONB | インデックスのすべてのパーティションにわたるベクトル分布。 次のフィールドに分布が表示されます。 
 注: K 平均法クラスタリング アルゴリズムの固有の特性により、インデックスの初期作成時であっても、パーティション間でベクトルの分布に常に一定のばらつきが生じます。 | 
| distributionpercentile | JSONB | ベクトル インデックス分布は、ScaNN インデックスのパーティション間のベクトルの分布を把握するのに役立ちます。パーティションは、インデックスの作成時に定義された num_leaves値に基づいて作成されます。ベクトル インデックス分布には、10 パーセンタイル、25 パーセンタイル、50 パーセンタイル、75 パーセンタイル、90 パーセンタイル、95 パーセンタイル、99 パーセンタイル、100 パーセンタイルのバケットが含まれています。各バケットには次の値が含まれます。 
 注: K 平均法クラスタリング アルゴリズムの固有の特性により、インデックスの初期作成時であっても、パーティション間でベクトルの分布に常に一定のばらつきが生じます。 | 
指標に基づくチューニングの推奨事項
- ミューテーション
- insertcount、- updatecount、- deletecountの指標を組み合わせると、インデックスのベクトルの変更またはミューテーションを確認できます。
- インデックスは、特定の数のベクトルとパーティションを使用して作成されます。ベクトル インデックスに対して挿入、更新、削除などのオペレーションが実行されると、ベクトルが存在する最初のパーティション セットにのみ影響します。そのため、各パーティション内のベクトル数は時間とともに変動し、再現率、QPS、またはその両方に影響する可能性があります。
- ANN 検索クエリで、時間の経過とともに QPS の低下や低い再現率などの速度や精度の問題が発生した場合は、これらの指標を確認することを検討してください。ベクトルの合計数に対してミューテーションの数が多い場合は、インデックスの再作成が必要になる可能性があります。
- 分布
- distribution指標は、すべてのパーティションにわたるベクトル分布を示します。
- インデックスを作成すると、特定の数のベクトルと固定パーティションを使用して作成されます。パーティショニング プロセスとその後の分布は、この考慮事項に基づいて行われます。ベクトルが追加されると、既存のパーティションにパーティショニングされるため、インデックスの作成時とは異なる分布になります。最終的な分布ではすべてのベクトルが同時に考慮されないため、再現率、QPS、またはその両方に影響する可能性があります。
- 応答時間が長くなる、結果の精度が低下する(QPS または再現率で測定)など、ANN 検索クエリのパフォーマンスが徐々に低下している場合は、この指標を確認してインデックスを再作成することを検討してください。
- 分布パーセンタイル
- distributionpercentile指標は、- pg_stat_ann_indexesビューのベクトル インデックス分布です。ScaNN インデックスのパーティション間のベクトルの分布を把握するのに役立ちます。パーティションは、インデックスの作成時に定義された- num_leaves値に基づいて作成されます。
- num_leavesを設定して最初の行セットに- alloydb_scannインデックスを作成すると、データ操作(スキュー ミューテーション)により、パーティション全体のベクトルの分布がインデックスで変更されるか、ベクトルの数が大幅に増加する可能性があります。これらの変更により、QPS やリコール、またはその両方の低下が生じる可能性があります。ベクトル インデックス分布は、変異によってインデックス分布が変化したかどうかを示すシグナルになります。この情報は、インデックスの再作成が必要かどうか、検索時間の構成を変更することでクエリのパフォーマンスを高められるかどうかを判断するのに役立ちます。
- ベクトル インデックスでは、パーティション間でベクトルが完全に均等に分散されることはほとんどありません。このような不均衡は非均一分布と呼ばれます。ある程度の不均一性は想定されることが多く、インデックスの再作成が必要になるわけではありません。非均一分布には次の特徴があります。
 - ベクトル数の分散が低い。分散は次のように計算できます。$(P100(num\_vectors) - p10(num\_vectors))*(\frac{num\_leaves}{total\_num\_row})$
- ベクトルが 0 のパーティションの数は少なく、パーティションの 30% 未満になる可能性がある。
- パーティション数の分散が低い。
 $ variance _{p} = abs(p_{num\_partitions} - num\_leaves * (p_{percentile} - p-1_{percentile})) $ ここで、「p」はベクトル インデックス分布バケットです。
- 任意のパーセンタイルにおけるベクトルの数は次のようになる。$< 8 x (\frac{num\_rows\ during\ index\ creation\ time}{ num\_leaves})$
 これらの条件が満たされていない場合、QPS とリコールにどの程度影響するかに基づいて、REINDEXが必要になることがあります。
 
- ベクトル数の分散が低い。分散は次のように計算できます。
- 次のようなシナリオは、不均一な分布ほど一般的ではありませんが、発生する可能性があります。
 - 近似均一インデックス: ほとんどのパーティションにゼロ以外のベクトルが同じ数あり、ベクトル数の分散が低い場合、近似均一インデックスです。index_creation_timeで各パーティション内のベクトル数が平均ベクトル数の 8 倍を超えている場合、REINDEXが必要になります。
- スパース インデックス: パーティションの 50% 超が空の場合にも、スパース インデックスが作成されます。たとえば、テーブルで複数の削除が発生すると、スパース インデックスが作成されます。このシナリオでは、ベクトルが少数のパーティションに集中するため、各パーティション内のベクトル数が増加します。この場合は、インデックスを削除して再作成します。
 
- 近似均一インデックス: ほとんどのパーティションにゼロ以外のベクトルが同じ数あり、ベクトル数の分散が低い場合、近似均一インデックスです。