확장 가능한 최근접 이웃 (ScaNN) 또는 계층적 탐색 가능한 스몰 월드 (HNSW) 색인을 사용할 때 PostgreSQL용 AlloyDB 열 기반 엔진을 사용하여 벡터 검색을 가속화할 수 있습니다. 열 기반 엔진은 이러한 벡터 색인의 읽기 최적화된 인메모리 캐시 역할을 합니다.
열 기반 엔진에서 색인을 캐싱하면 색인의 읽기 최적화된 인메모리 표현에서 직접 쿼리를 제공하고 벡터 검색 워크로드에 대해 데이터베이스에서 처리할 수 있는 초당 쿼리 수 (QPS)를 늘립니다.
PostgreSQL 17 이상을 실행하는 AlloyDB 클러스터의 경우 열 기반 엔진에서만 HNSW를 사용할 수 있습니다. 열 기반 엔진이 있는 ScaNN에는 이러한 제한이 없습니다.
시작하기 전에
열 기반 엔진과 색인 캐싱 기능을 사용 설정하려면
google_columnar_engine.enabled및google_columnar_engine.enable_index_caching데이터베이스 플래그를on으로 설정합니다.gcloud alloydb instances update INSTANCE_ID \ --database-flags google_columnar_engine.enabled=on,google_columnar_engine.enable_index_caching=on \ --region=REGION \ --cluster=CLUSTER_ID \ --project=PROJECT_ID다음을 바꿉니다.
INSTANCE_ID: 열 기반 엔진을 사용 설정하려는 인스턴스의 ID입니다.REGION: 인스턴스가 있는 리전입니다(예:us-central1).CLUSTER_ID: 인스턴스가 있는 클러스터의 ID입니다.PROJECT_ID: 클러스터가 있는 프로젝트의 ID입니다.
플래그 설정에 대한 자세한 내용은 데이터베이스 플래그 구성을 참조하세요.
데이터베이스에서 ScaNN 색인 만들기 또는 HNSW 색인 만들기를 실행합니다.
열 기반 엔진에 색인 추가
열 기반 엔진을 사용 설정한 후 google_columnar_engine_add_index() SQL 함수를 사용하여 기존 색인을 캐시에 추가할 수 있습니다.
열 기반 엔진에 색인을 추가하려면 다음 단계를 따르세요.
콘솔에서 클러스터 페이지로 이동합니다. Google Cloud
클러스터 개요 페이지를 표시하려면 리소스 이름 열에서 AlloyDB 클러스터 이름을 클릭합니다.
탐색창에서 AlloyDB Studio 를 클릭합니다.
데이터베이스 이름, 사용자 이름, 비밀번호를 사용하여 AlloyDB Studio 에 로그인합니다.
편집기 1 탭에 다음 쿼리를 입력합니다.
SELECT google_columnar_engine_add_index('INDEX_NAME');INDEX_NAME을 벡터 색인의 이름으로 바꿉니다.- 실행 을 클릭합니다.
열 기반 엔진에 색인을 추가하면 이 색인을 사용하는 모든 쿼리가 열 기반 엔진에 의해 자동으로 가속화됩니다. 쿼리에서 EXPLAIN (ANALYZE, COLUMNAR_ENGINE) 계획을 사용하여 벡터 쿼리가 열 기반 엔진에 의해 가속화되고 있는지 확인할 수 있습니다.
캐시 사용량 확인
벡터 쿼리가 열 기반 엔진에 의해 가속화되고 있는지 확인하려면 쿼리에서 EXPLAIN (ANALYZE, COLUMNAR_ENGINE) 계획을 사용하면 됩니다.
ScaNN 실행 계획 예시
다음은 열 기반 엔진에 추가된 ScaNN 색인을 사용하는 쿼리의 실행 계획 예시입니다.
EXPLAIN (ANALYZE TRUE, SCANN TRUE, COSTS FALSE, TIMING FALSE, SUMMARY FALSE, VERBOSE FALSE, COLUMNAR_ENGINE TRUE)
SELECT * FROM t ORDER BY val <=> '[0.5,0.5,0.5,0.5]' LIMIT 100;
--This contains details about ScaNN's usage from the columnar engine. Example:
------------------------------------------------------------------------------------------------------
Index Scan using scann_idx on t t_1 (actual rows=100 loops=1)
Order By: (val <=> '[0.5,0.5,0.5,0.5]'::vector)
Limit: 100
ScaNN Info: (... columnar engine nodes hit=6...)
Columnar Engine ScaNN Info: (index found=true)
(5 rows)
출력에 columnar engine nodes hit 및 Columnar Engine ScaNN Info:
(index found=true)가 있으면 쿼리에 열 기반 엔진이 사용되고 있는 것입니다.
HNSW 실행 계획 예시
실행 계획은 열 기반 엔진에서 가져온 요소의 비율 (elements_from_ce)과 디스크에서 가져온 요소의 비율(elements_from_disk)과 같은 측정항목을 보여주는 각 색인의 열 기반 엔진 HNSW 정보 섹션을 표시합니다.
다음은 열 기반 엔진에 추가된 HNSW 색인을 사용하는 쿼리의 실행 계획 예시입니다.
EXPLAIN (ANALYZE, COLUMNAR_ENGINE) SELECT * FROM documents ORDER BY embedding <=> '[0.1, 0.2, 0.3, 0.4, 0.5]'::vector LIMIT 5;
--This contains details about HNSW's usage from the columnar engine. Example:
------------------------------------------------------------------------------------------------------
Limit (actual rows=5 loops=1)
-> Index Scan using hnsw_idx on documents (actual rows=5 loops=1)
Order By: (embedding '[0.1, 0.2, 0.3, 0.4, 0.5]'::vector)
Columnar Engine HNSW Info: (index found=true elements_from_ce=385 elements_from_disk=0)
Columnar Check: table is not in the columnar store
(5 rows)
응답은 모든 요소가 열 기반 엔진에서 가져오고(elements_from_ce=385) 디스크에서 가져온 요소가 없으므로(elements_from_disk=0) 색인이 열 기반 엔진에 의해 가속화되고 있음을 보여줍니다.
INSERT, UPDATE 또는 DELETE 문과 같은 데이터 수정으로 인해 캐시 항목이 무효화되면 열 기반 엔진은 하이브리드 접근 방식을 사용하여 정확성과 성능을 유지합니다. 유효한 캐시된 벡터를 메모리에서 직접 읽고 수정되거나 새로운 벡터만 디스크에서 가져옵니다.
많은 양의 데이터를 수정하면 캐시가 새로고침될 때까지 일시적으로 elements_from_disk가 증가하고 성능이 저하될 수 있습니다.
캐시된 색인 관리
캐시된 색인의 수명 주기를 관리하려면 다음 단계를 따르세요.
콘솔에서 클러스터 페이지로 이동합니다. Google Cloud
클러스터 개요 페이지를 표시하려면 리소스 이름 열에서 AlloyDB 클러스터 이름을 클릭합니다.
탐색창에서 AlloyDB Studio 를 클릭합니다.
데이터베이스 이름, 사용자 이름, 비밀번호를 사용하여 AlloyDB Studio 에 로그인합니다.
편집기 1 탭에 선택한 작업의 SQL 명령어를 입력합니다.
캐시를 수동으로 새로고침하려면 다음 명령어를 실행합니다.
SELECT google_columnar_engine_refresh_index('INDEX_NAME');색인 상태를 확인하려면 다음 명령어를 실행합니다.
SELECT google_columnar_engine_verify('INDEX_NAME');캐시에서 색인을 삭제하려면 다음 명령어를 실행합니다.
SELECT google_columnar_engine_drop_index('INDEX_NAME');활성 색인을 보려면 다음 명령어를 실행합니다.
SELECT * FROM g_columnar_indexes;분할된 색인을 보려면 다음 명령어를 실행합니다.
SELECT * FROM g_columnar_index_partitions;
INDEX_NAME을 색인의 이름으로 바꿉니다.실행 을 클릭합니다.
제한사항
열 기반 엔진 가속화된 HNSW 색인을 새로고침하면 일시적으로 색인 크기의 최대 2배까지 메모리를 사용할 수 있습니다.