벡터 색인 유지

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

시작하기 전에

  • 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 색인을 다시 생성하는 것이 좋습니다. 색인이 빌드된 이후 색인 측정항목을 모니터링하여 벡터 분포 또는 벡터 변형의 변경사항을 확인한 다음 그에 따라 색인을 다시 만들 수 있습니다.

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

색인 자동 유지

자동 색인 유지보수 기능을 사용하면 AlloyDB가 색인을 점진적으로 관리하여 데이터 세트가 커질 때 AlloyDB가 중심점을 지속적으로 분석 및 업데이트하고 큰 이상치 파티션을 분할합니다. 이렇게 하면 초당 비교 가능한 쿼리 수 (QPS)와 검색 결과 품질을 유지할 수 있습니다. 자동 유지보수로 적용된 업데이트는 후속 유지보수가 실행될 때까지 영구적입니다.

ScaNN 색인을 만드는 동안 scann.enable_preview_features 데이터베이스 플래그 (GUC)를 색인 수준 auto_maintenance 파라미터와 함께 사용하여 ScaNN 색인의 자동 색인 유지보수를 사용 설정할 수 있습니다.

자동 색인 유지보수 기능은 자동으로 조정된 ScaNN 색인에 기본적으로 사용 설정되어 있습니다. 수동으로 생성된 색인의 경우 scann.enable_preview_features 플래그를 사용 설정한 후 색인 생성 중에 auto_maintenance 매개변수를 설정하거나 scann_index_maintenance 함수를 사용하여 필요에 따라 자동 색인 유지보수를 트리거할 수 있습니다.

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입니다.

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

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

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

CREATE INDEX INDEX_NAME ON TABLE \
USING scann (EMBEDDING_COLUMN DISTANCE_FUNCTION) \
WITH (mode=MANUAL, 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 색인 조정을 참조하세요.

scann.max_background_workers 데이터베이스 플래그를 구성하여 여러 색인에서 자동 색인 유지관리의 처리량을 늘릴 수 있습니다. 작업자 수를 늘리면 단위 시간당 처리되는 색인 수가 늘어나지만 단일 색인의 처리 시간이 줄어들지는 않습니다. 원하는 경우 scann.maintenance_background_naptime_s 데이터베이스 플래그를 설정하여 자동 색인 유지관리 실행 간의 최소 지연 시간을 제어할 수도 있습니다.

자동 색인 유지보수를 위해 pct_leaves_to_search 구성

자동 색인 유지보수를 사용 설정한 경우 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의 비율

색인 유지보수 수동 호출

특정 색인에서 주문형 유지보수를 호출하려면 다음 명령어를 실행합니다. 이 함수는 alloydb_scann 버전 0.1.2 이상에서 사용할 수 있습니다.

이 함수를 사용하려면 색인 자동 유지관리에 설명된 대로 먼저 scann.enable_preview_features 플래그를 사용 설정해야 합니다.

SELECT scann_index_maintenance('INDEX_NAME');

색인을 수동으로 다시 빌드

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

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

REINDEX INDEX CONCURRENTLY INDEX_NAME;

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

PostgreSQL에서 색인을 다시 생성하는 방법에 대한 자세한 내용은 REINDEX를 참조하세요.

다음 단계