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 또는 두 가지 모두에 영향을 줄 수 있습니다.
- ANN 검색 쿼리에서 응답 시간이 느려지거나 결과 정확도가 떨어지는(QPS 또는 재현율로 측정) 등 성능이 점진적으로 저하되는 현상이 관찰된다면, 이 측정항목을 확인하고 색인을 다시 생성하는 것이 좋습니다.
- 분포 백분위수
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
가 필요할 수 있습니다.
- 벡터 수의 분산이 낮습니다. 분산은 다음과 같이 계산할 수 있습니다.
- 다음 시나리오는 불균일 분포보다 덜 일반적이지만, 발생할 수 있습니다.
- 대략적인 균일 색인: 대부분의 파티션에 0이 아닌 벡터 수가 동일하고 벡터 수의 분산이 낮은 경우가 대략적인 균일 색인입니다. 각 파티션의 숫자 벡터가
index_creation_time
에 $평균 벡터의 8배$ 보다 큰 경우REINDEX
가 필요합니다. - 희소 색인: 파티션의 50% 이상이 비어 있는 경우 희소 색인도 발생합니다. 예를 들어 테이블에서 삭제가 여러 번 발생하면 희소 색인이 생성됩니다. 이 시나리오에서는 벡터가 소수의 파티션에 집중되어 각 파티션의 벡터 수가 증가합니다. 이 경우 색인을 삭제하고 다시 만듭니다.
- 대략적인 균일 색인: 대부분의 파티션에 0이 아닌 벡터 수가 동일하고 벡터 수의 분산이 낮은 경우가 대략적인 균일 색인입니다. 각 파티션의 숫자 벡터가