벡터 색인 유지

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

시작하기 전에

  • vectoralloydb_scann 확장 프로그램을 설치하거나 업데이트합니다.

    1. vectoralloydb_scann 확장 프로그램이 설치되어 있지 않으면 최신 확장 프로그램 버전을 설치합니다.

      CREATE EXTENSION IF NOT EXISTS vector;
      CREATE EXTENSION IF NOT EXISTS alloydb_scann;
      
    2. vectoralloydb_scann 확장 프로그램이 이미 설치되어 있는 경우 확장 프로그램을 최신 버전으로 업그레이드합니다.

      ALTER EXTENSION vector UPDATE;
      ALTER EXTENSION alloydb_scann UPDATE;
      

벡터 색인 측정항목 보기

테이블이 자주 업데이트되거나 삽입되는 경향이 있다면 색인의 재현율 정확도를 높이기 위해 주기적으로 기존 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로 설정합니다.

이 매개변수를 0~100 사이의 값으로 설정할 수 있습니다. 기본값은 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를 참고하세요.

다음 단계