벡터 색인 유지

문서 버전을 선택합니다.

벡터 색인이 검색 결과의 정확도에 영향을 줄 수 있는 변경사항에 적응하도록 하려면 벡터 색인을 유지보수하세요.

시작하기 전에

색인 유지보수를 관리하기 전에 vectoralloydb_scann 확장 프로그램을 설치하거나 업데이트하세요.

  • vectoralloydb_scann 확장 프로그램이 설치되어 있지 않으면 설치합니다.

    CREATE EXTENSION IF NOT EXISTS vector;
    CREATE EXTENSION IF NOT EXISTS alloydb_scann;
    
  • vectoralloydb_scann 확장 프로그램이 이미 설치되어 있으면 업데이트합니다.

    ALTER EXTENSION vector UPDATE;
    ALTER EXTENSION alloydb_scann UPDATE;
    

색인 자동 유지보수

AlloyDB Omni에서 벡터 색인을 자동으로 관리하도록 할 수 있습니다. 데이터 세트가 증가하면 AlloyDB Omni에서 중심점을 분석 및 업데이트하고 큰 이상치 파티션을 분할합니다. 이렇게 하면 초당 쿼리 수 (QPS)와 검색 결과 품질이 자동으로 개선됩니다. 자동 업데이트는 다음 유지보수가 실행될 때까지 영구적입니다.

AlloyDB Omni는 기본적으로 자동으로 조정된 ScaNN 색인에 자동 색인 유지보수를 사용 설정합니다. for automatically-tuned ScaNN indexes. 자동으로 조정된 ScaNN 색인을 만들되 자동 유지보수를 사용 중지하려면 자동 색인의 자동 유지보수 사용 중지를 참고하세요.

수동으로 만든 색인의 자동 유지보수를 사용 설정하려면 색인 생성 중에 자동 유지보수 사용 설정을 참고하세요.

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

색인 생성 중에 자동 유지보수를 사용 설정하려면 auto_maintenance 매개변수를 on으로 설정합니다. 예를 들어 ScaNN 벡터 색인을 만드는 다음 명령어를 참고하세요.

CREATE INDEX INDEX_NAME ON TABLE_NAME \
USING scann (EMBEDDING_COLUMN_NAME DISTANCE_FUNCTION_NAME) \
WITH (mode='INDEX_MODE', num_leaves=NUM_PARTITIONS, auto_maintenance=on);

다음 변수를 바꿉니다.

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

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

  • EMBEDDING_COLUMN_NAME: 색인을 생성하려는 vector 데이터를 저장하는 열입니다.

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

    • L2 거리: l2

    • 내적: dot_product

    • 코사인 거리: cosine

  • INDEX_MODE: ScaNN 색인을 만들 모드입니다. 사용 가능한 값은 다음과 같습니다.

    • AUTO: AlloyDB Omni에서 색인의 구조를 자동으로 관리하고 조정합니다. modeAUTO로 설정된 경우 기본 auto_maintenance 값은 on입니다.

    • MANUAL: ScaNN 색인을 수동으로 관리하고 조정합니다. modeMANUAL로 설정된 경우 기본 auto_maintenance 값은 off입니다.

    사용할 색인 모드에 대한 자세한 내용은 ScaNN 색인 만들기를 참고하세요.

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

기존 색인의 자동 유지보수 구성

기존 수동 색인의 자동 유지보수를 구성하려면 다음 명령어를 실행합니다.

ALTER INDEX INDEX_NAME SET (auto_maintenance = AUTOMATIC_MAINTENANCE);

다음 변수를 바꿉니다.

  • INDEX_NAME: 변경하려는 색인의 이름입니다. 예를 들면 my_scann_index입니다.

  • AUTOMATIC_MAINTENANCE: 자동 유지보수를 사용 설정 또는 중지합니다. 사용 설정하려면 값을 on으로 설정합니다. 사용 중지하려면 값을 off로 설정합니다.

자동 유지보수 처리량 늘리기

자동 유지보수 처리량을 늘리려면 scann.max_background_workers 데이터베이스 플래그를 구성합니다. 백그라운드 작업자 수를 늘리면 단위 시간당 처리되는 색인 수가 늘어납니다. 개별 색인의 처리 시간은 줄어들지 않습니다. 이 값은 데이터베이스 클러스터에 설정된 max_worker_processes 값보다 작아야 합니다.

데이터베이스 플래그 구성에 대한 자세한 내용은 데이터베이스 매개변수 구성을 참고하세요.

자동 유지보수 지연 시간 늘리기

자동 유지보수 실행 간의 지연 시간을 늘리려면 scann.maintenance_background_naptime_s 데이터베이스 플래그를 구성합니다.

데이터베이스 플래그 구성에 대한 자세한 내용은 데이터베이스 매개변수 구성을 참고하세요.

파티션 검색 비율

AlloyDB Omni에서 큰 이상치 파티션을 자동으로 분할하여 파티션 수가 증가하면 최적의 성능을 유지하기 위해 검색하는 리프 수를 조정하는 것이 좋습니다. 이 수를 자동으로 관리하려면 scann.pct_leaves_to_search 매개변수를 구성합니다.

scann.pct_leaves_to_search 는 검색할 현재 파티션의 비율을 나타냅니다. 이 매개변수를 0100 사이의 값으로 설정할 수 있습니다. 기본값은 0으로, 이 매개변수를 사용 중지하고 대신 scann.num_leaves_to_search에 설정된 값을 사용합니다. scann.num_leaves_to_search0으로 설정된 경우 AlloyDB Omni는 기본적으로 리프의 1%를 사용합니다.

데이터 세트가 크게 증가할 것으로 예상되면 초깃값을 1로 설정합니다.

scann.pct_leaves_to_search를 설정하려면 다음 명령어를 실행합니다.

ALTER DATABASE DB_NAME SET scann.pct_leaves_to_search = PERCENTAGE_PARTITIONS_TO_SEARCH;

다음 변수를 바꿉니다.

  • DB_NAME: 데이터베이스의 이름입니다.
  • PERCENTAGE_PARTITIONS_TO_SEARCH: 검색할 파티션의 비율입니다.

색인 유지보수 수동 호출

특정 색인에서 유지보수를 수동으로 호출하려면 다음 명령어를 실행합니다.

SELECT scann_index_maintenance('INDEX_NAME');

INDEX_NAME을 유지보수를 호출하려는 색인의 이름으로 바꿉니다. 예를 들면 my_scann_index입니다.

자동 색인의 자동 유지보수 사용 중지

자동으로 조정된 ScaNN 색인의 자동 유지보수를 사용 중지하려면 색인 생성 중에 auto_maintenance 매개변수를 OFF로 설정합니다. 예를 들어 자동으로 조정된 ScaNN 색인을 만드는 다음 명령어를 참고하세요.

CREATE INDEX similarity_index ON products
       USING scann (description_embedding cosine)
WITH (MODE = 'AUTOMATIC', auto_maintenance = 'OFF');

기존의 자동으로 조정된 ScaNN 색인에서 자동 유지보수를 사용 중지하려면 기존 색인의 자동 유지보수 구성을 참고하세요.

색인을 수동으로 다시 빌드

테이블이 자주 업데이트되거나 삽입되는 경우 재현율 정확성을 높이기 위해 ScaNN 색인을 주기적으로 다시 빌드하는 것이 좋습니다. 색인이 빌드된 이후 벡터 분포 또는 변형의 변경사항을 확인하는 방법에 대한 자세한 내용은 벡터 색인 측정항목 보기를 참고하세요.

원래 구성을 사용하여 색인을 수동으로 다시 빌드하려면 다음 명령어를 실행합니다.

REINDEX INDEX CONCURRENTLY INDEX_NAME;

INDEX_NAME을 다시 빌드하려는 색인의 이름으로 바꿉니다. 예를 들면 my_scann_index입니다.

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

다음 단계