벡터 색인 유지

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

벡터 색인 측정항목 보기

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

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

색인 자동 유지

ScaNN 색인을 만들 때 색인 수준 auto_maintenance 매개변수와 함께 scann.enable_index_maintenance Grand Unified Configuration (GUC) 데이터베이스 플래그를 사용할 수 있습니다. 이러한 설정을 함께 사용하면 AlloyDB가 데이터 세트가 커짐에 따라 색인을 점진적으로 관리하고 대규모 외부 항목 파티션을 분할할 수 있습니다. AlloyDB는 파티션을 분할하여 초당 쿼리 수 (QPS)와 검색 결과를 개선하려고 합니다.

자동 유지보수 색인 업데이트는 AlloyDB에서 색인을 다시 업데이트할 때까지 유지됩니다.

AlloyDB가 색인을 자동으로 유지하도록 하려면 alloydb_scann 확장 프로그램을 shared_preload_libraries 매개변수에 추가하고 scann.enable_index_maintenance 데이터베이스 플래그를 사용 설정한 다음 데이터베이스를 다시 시작하여 alloydb_scann 확장 프로그램을 로드합니다.

  1. alloydb_scann 확장 프로그램을 shared_preload_libraries 목록에 로드합니다.

    sudo sed -r -i "s|(shared_preload_libraries\s*=\s*)'(.*)'.*$|\1'\2,alloydb_scann'|" DATA_DIR/postgresql.conf
  2. 매개변수의 구성이 올바르게 설정되어 있는지 확인합니다.

    grep -iE 'shared_preload_libraries' DATA_DIR/postgresql.conf
  3. postgresql.conf 파일에서 플래그를 설정하여 scann.enable_index_maintenance 플래그를 사용 설정합니다.

    scann.enable_index_maintenance = ON
  4. AlloyDB Omni를 다시 시작하여 파라미터 변경사항을 적용합니다.

    Docker

     docker container restart CONTAINER_NAME

    CONTAINER_NAME을 AlloyDB Omni 컨테이너를 시작할 때 할당한 이름으로 바꿉니다.

    Podman

     podman container restart CONTAINER_NAME

    CONTAINER_NAME을 AlloyDB Omni 컨테이너를 시작할 때 할당한 이름으로 바꿉니다.

scann.enable_index_maintenance 플래그를 사용 설정한 후 색인의 자동 유지보수를 사용 설정하거나 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 색인 조정을 참고하세요.

유지보수 수동 호출

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

SELECT AS scann_index_maintenance('INDEX_NAME');

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

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

색인 수동 재빌드

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

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

REINDEX INDEX CONCURRENTLY INDEX_NAME;

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

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

다음 단계