벡터 색인 유지

이 페이지에서는 벡터 색인을 유지하는 옵션을 설명합니다. 색인을 유지하면 색인이 검색 결과의 정확성에 영향을 줄 수 있는 데이터 변경사항에 적응할 수 있습니다. 이 페이지의 전략을 사용하여 데이터 세트가 커짐에 따라 쿼리 성능이 저하되는 것을 방지하세요.

벡터 색인 측정항목 보기

테이블이 자주 업데이트되거나 삽입되는 경우 색인의 검색 정확성을 개선하기 위해 주기적으로 기존 ScaNN 색인의 색인을 다시 생성하는 것이 좋습니다. 색인 측정항목을 모니터링하여 색인이 생성된 이후 벡터 분포 또는 벡터 변형의 변경사항을 확인한 다음 적절하게 색인을 다시 생성할 수 있습니다.

측정항목에 관한 자세한 내용은 벡터 색인 측정항목 보기를 참고하세요.

색인 자동 유지

ScaNN 색인을 만들 때 색인 수준 auto_maintenance 매개변수와 함께 scann.enable_preview_features 데이터베이스 플래그 (GUC)를 사용할 수 있습니다. 이러한 설정을 함께 사용하면 AlloyDB가 데이터 세트가 커질 때 대규모 외부 항목 파티션을 분할하도록 색인을 점진적으로 관리할 수 있습니다. AlloyDB는 파티션을 분할하여 더 나은 QPS와 검색 결과를 제공하려고 합니다.

자동 유지보수로 인해 색인이 업데이트되면 AlloyDB에서 색인을 다시 업데이트할 때까지는 업데이트가 영구적으로 유지됩니다.

AlloyDB가 색인을 자동으로 유지하도록 하려면 scann.enable_preview_features 플래그를 사용 설정합니다.

gcloud alloydb instances update INSTANCE_ID \
     --database-flags scann.enable_preview_features=on \
     --region=REGION_ID \
     --cluster=CLUSTER_ID \
     --project=PROJECT_ID

다음을 바꿉니다.

  • INSTANCE_ID: 인스턴스의 ID
  • REGION_ID: 인스턴스가 배치된 리전입니다(예: us-central1).
  • CLUSTER_ID: 인스턴스가 배치된 클러스터의 ID입니다.
  • PROJECT_ID: 클러스터가 배치된 프로젝트의 ID입니다.

scann.enable_preview_features 플래그를 사용 설정한 후 색인의 자동 유지보수를 사용 설정하거나 scann_index_maintenance 함수를 사용 설정하여 유지보수를 수동으로 호출할 수 있습니다.

색인 생성 중에 자동 유지보수 사용 설정

자동 유지보수가 사용 설정된 ScaNN 색인을 만들려면 다음 명령어 예시를 실행합니다.

CREATE INDEX INDEX_NAME ON TABLE
  USING scann (EMBEDDING_COLUMN DISTANCE_FUNCTION)
  WITH (num_leaves=NUM_LEAVES_VALUE, auto_maintenance=on);

다음을 바꿉니다.

  • INDEX_NAME: 만들려는 색인의 이름입니다(예: my-scann-index). 색인 이름은 데이터베이스 전체에서 공유됩니다. 각 색인 이름이 데이터베이스의 각 테이블에 고유해야 합니다.

  • TABLE: 색인을 추가할 테이블입니다.

  • EMBEDDING_COLUMN: vector 데이터를 저장하는 열입니다.

  • DISTANCE_FUNCTION: 이 색인과 함께 사용할 거리 함수입니다. 다음 중 하나를 선택합니다.

    • L2 거리: l2

    • 내적: dot_product

    • 코사인 거리: cosine

  • NUM_LEAVES_VALUE: 이 색인에 적용할 파티션 수입니다. 1~1048576 사이의 값으로 설정합니다. 이 값을 결정하는 방법에 관한 자세한 내용은 ScaNN 색인 조정을 참고하세요.

리프를 관리하여 분할된 파티션을 자동으로 검색

색인의 자동 유지보수를 사용 설정한 경우 num_leaves 임곗값에 도달하면 AlloyDB에서 파티션을 자동으로 분할합니다. 이러한 분할로 인해 파티션 수가 증가하면 최적의 성능을 유지하기 위해 검색할 리프 수를 조정해야 합니다.

자동으로 검색할 리프 수를 관리하려면 pct_leaves_to_search를 사용하세요. 이 매개변수를 사용하면 검색할 파티션 수의 비율을 지정할 수 있습니다. 데이터 세트가 크게 늘어날 것으로 예상되면 먼저 pct_leaves_to_search 값을 1로 설정합니다. 이 매개변수는 기본적으로 사용 중지됩니다.

이 값을 현재 파티션 수의 비율로 설정합니다. 예를 들어 현재 파티션 수의 1%를 검색하려면 이 값을 1로 설정합니다.

이 매개변수를 0100 사이의 값으로 설정할 수 있습니다. 기본값은 0이며 이 매개변수를 사용 중지하고 scann.num_leaves_to_search를 사용하여 검색할 리프 수를 계산합니다.

데이터베이스에 pct_leaves_to_search 플래그를 설정하려면 다음 명령어를 실행합니다.

ALTER DATABASE DATABASE_NAME SET scann.pct_leaves_to_search = PERCENTAGE_LEAVES_TO_SEARCH;

다음을 바꿉니다.

  • DATABASE_NAME: 데이터베이스의 이름
  • PERCENTAGE_LEAVES_TO_SEARCH: 검색할 num_leaves의 비율입니다.

유지보수 수동 호출

특정 색인에 대한 유지보수를 주문형으로 호출하려면 다음 명령어를 실행합니다.

SELECT scann_index_maintenance('INDEX_NAME');

색인 수동 재빌드

색인을 만들 때 지정한 구성으로 색인을 다시 빌드하려면 색인을 수동으로 다시 빌드하면 됩니다.

색인을 수동으로 다시 빌드하려면 다음 명령어를 실행합니다.

REINDEX INDEX CONCURRENTLY INDEX_NAME;

INDEX_NAME을 다시 빌드하려는 색인의 이름(예: my-scann-index)으로 바꿉니다. 색인 이름은 데이터베이스 전체에서 공유됩니다. 각 색인 이름이 데이터베이스의 각 테이블에 고유해야 합니다.

PostgreSQL에서의 색인 재생성에 관한 자세한 내용은 REINDEX를 참고하세요.

다음 단계