벡터 색인 측정항목 보기
테이블이 자주 업데이트되거나 삽입되는 경향이 있다면 색인의 재현율 정확도를 개선하기 위해 주기적으로 기존 ScaNN 색인을 다시 색인화하는 것이 좋습니다. 색인 측정항목을 모니터링하여 색인이 빌드된 이후 벡터 분포 또는 벡터 변이의 변경사항을 확인한 다음 그에 따라 색인을 다시 생성할 수 있습니다.
측정항목에 대한 자세한 내용은 벡터 색인 측정항목을 참고하세요.
색인을 자동으로 유지
ScaNN 색인을 만드는 동안 색인 수준 auto_maintenance
파라미터와 함께 scann.enable_index_maintenance
Grand Unified Configuration (GUC) 데이터베이스 플래그를 사용할 수 있습니다. 이러한 설정을 함께 사용하면 데이터 세트가 증가함에 따라 AlloyDB가 색인을 점진적으로 관리하고 큰 이상치 파티션을 분할할 수 있습니다. 파티션을 분할하여 AlloyDB는 초당 쿼리 수 (QPS)와 검색 결과를 개선하려고 합니다.
자동 유지보수 색인 업데이트는 AlloyDB에서 색인을 다시 업데이트할 때까지 지속됩니다.
AlloyDB가 자동으로 색인을 유지하도록 하려면 shared_preload_libraries
매개변수에 alloydb_scann
확장 프로그램을 추가하고, scann.enable_index_maintenance
데이터베이스 플래그를 사용 설정한 다음, 데이터베이스를 다시 시작하여 alloydb_scann
확장 프로그램을 로드합니다.
alloydb_scann
확장 프로그램을shared_preload_libraries
목록에 로드합니다.sudo sed -r -i "s|(shared_preload_libraries\s*=\s*)'(.*)'.*$|\1'\2,alloydb_scann'|" DATA_DIR/postgresql.conf
매개변수의 구성이 올바르게 설정되었는지 확인합니다.
grep -iE 'shared_preload_libraries' DATA_DIR/postgresql.conf
postgresql.conf
파일에서 플래그를 설정하여scann.enable_index_maintenance
플래그를 사용 설정합니다.scann.enable_index_maintenance = ON
파라미터 변경사항을 적용하려면 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
색인 조정을 참고하세요.
분할 파티션을 자동으로 검색할 리프 관리
인덱스 자동 유지보수를 사용 설정한 경우 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를 참고하세요.
다음 단계
벡터 색인 측정항목을 확인합니다.