벡터 색인 만들기 및 관리

이 페이지에서는 벡터 색인의 메모리를 구성하고 벡터 색인을 만들고, 조정하고, 모니터링하고, 삭제하는 방법을 설명합니다.

시작하기 전에

벡터 색인을 만들기 전에 벡터 임베딩 값으로 기본 테이블에 데이터를 로드해야 합니다. 기본 테이블에는 행이 최소 1,000개 이상 있어야 합니다. 사용 가능한 데이터 포인트가 더 있으면 색인 분할 및 학습 효율이 향상됩니다.

벡터 색인의 메모리 할당 구성

cloudsql_vector_max_mem_size 데이터베이스 플래그는 Cloud SQL 인스턴스가 벡터 색인에 할당하는 메모리 양을 제어합니다. 인스턴스를 다시 시작해야 하는 정적 플래그입니다. 이 메모리는 다음 두 가지 주요 목적으로 사용됩니다.

  1. 벡터 색인 구조 저장: 벡터 색인의 리프가 아닌 부분 (TREE_MEMORY)이 이 메모리에 있습니다. 이 트리의 대략적인 크기는 리프 노드 (num_leaves) 수와 벡터의 크기에 따라 다릅니다.

     Approximate TREE_MEMORY = num_leaves * vector dimensions * 4 * 2
    

    예를 들어 리프가 1,000개이고 차원이 768개인 색인의 대략적인 TREE_MEMORY는 1,000 * 768 * 4 * 2 또는 6,144,000바이트입니다. information_schema.innodb_vector_indexes 테이블을 사용하여 실제 TREE_MEMORY를 확인할 수도 있습니다. Cloud SQL에서 이 메모리를 관리합니다. 비활성 색인은 다른 요청을 위한 공간을 확보하기 위해 언로드되므로 모든 벡터 색인에 대해 동시에 공간을 할당할 필요가 없습니다.

  2. 색인 생성 메모리 (학습 데이터): 벡터 색인을 만드는 동안 색인을 빌드하기 위해 기본 테이블의 데이터 샘플을 처리하는 데 메모리가 필요합니다. 이 메모리는 색인 생성 프로세스 중에만 사용되며 그 후에는 해제됩니다. 학습에 필요한 대략적인 메모리 크기는 다음과 같습니다.

     approximate_training_memory = num_rows in base table * 0.1 * 4 * vector dimensions
    

    예를 들어 행이 1,000,000개이고 차원이 768개인 테이블의 경우 training_memory는 1000000 * 0.1 * 768 * 4 또는 307,200,000바이트입니다. 트리의 중심점을 계산하기 위해 기본 테이블 데이터의 10% 만 샘플링됩니다.

    cloudsql_vector 플래그를 사용 설정하면 Cloud SQL은 VM 크기에 따라 기본 cloudsql_vector_max_mem_size를 자동으로 설정합니다. 이 기본값은 일반적으로 일반적인 워크로드에 충분합니다. Cloud SQL은 이 메모리를 할당하기 위해 innodb_buffer_pool_size 플래그를 줄입니다. cloudsql_vector_max_mem_size의 기본 최대값은 16GB입니다. 메모리 크기를 조정해야 하는 경우 벡터 색인 사용량에 따라 cloudsql_vector_max_mem_size를 동적으로 조정할 수 있습니다.

    중요: cloudsql_vector_max_mem_size를 늘리면 메모리 문제를 방지하기 위해 innodb_buffer_pool_size를 그에 따라 줄여야 합니다.

cloudsql_vector_max_mem_size

VM 크기 cloudsql_vector_max_mem_size
4GB 194MB
8GB 515MB
16GB 1.2GB
32GB 2.56GB
64GB 5.12GB
128GB 10.24GB
256GB 이상 16GB

할당된 벡터 색인 메모리의 범위는 다음과 같습니다.

  • 최소 128MB
  • 버퍼 풀의 10%
  • 최대 16GB

필요에 따라 나중에 메모리를 조정할 수 있습니다. 자세한 내용은 벡터 임베딩에 데이터베이스 플래그 사용 설정을 참고하세요.

벡터 색인의 크기를 모니터링하는 방법은 벡터 색인 모니터링을 참고하세요.

인스턴스에서 벡터 색인에 할당된 메모리를 업데이트하려면 다음 명령어를 사용합니다.

gcloud sql instances patch INSTANCE_NAME \
 --database-flags= cloudsql_vector_max_mem_size=NEW_MEMORY_VALUE;

다음을 바꿉니다.

  • INSTANCE_NAME: 메모리 할당을 변경하는 인스턴스 이름입니다.
  • NEW_MEMORY_VALUE: 벡터 색인의 업데이트된 메모리 할당(바이트)입니다.

이 변경사항은 데이터베이스 재시작 후 즉시 적용됩니다.

벡터 색인 만들기

벡터 색인을 만드는 방법에는 두 가지가 있습니다.

  • CREATE VECTOR INDEX: 표준 MySQL 문법에 대한 Cloud SQL 확장입니다.
  • Cloud SQL ADD VECTOR INDEX 절 확장자가 있는 ALTER TABLE 이 문을 테이블의 다른 DDL 문과 동시에 실행할 수는 없습니다.

CREATE VECTOR INDEX를 사용하여 벡터 색인을 만들려면 다음 구문을 사용합니다.

CREATE
  VECTOR INDEX INDEX_NAME
ON TABLE_NAME(COLUMN_NAME)
USING
  SCANN[QUANTIZER = SQ8]
    DISTANCE_MEASURE
  = L2_SQUARED | COSINE | DOT_PRODUCT[NUM_LEAVES = INT_VALUE { '</var>' }}];

색인 옵션은 다음과 같습니다.

  • USING SCANN: 선택사항입니다. 사용할 색인 유형을 나타냅니다. 지원되는 유일한 값은 SCANN입니다.
  • QUANTIZER: 선택사항입니다. 고차원 벡터를 압축된 표현에 매핑합니다. 지원되는 유일한 값은 SQ8입니다.
  • DISTANCE_MEASURE: 필수 항목입니다. 두 벡터의 유사성을 계산하는 데 사용할 수학적 수식을 지정합니다. 이 매개변수에는 approx_distance 검색 옵션에 설정한 거리와 동일한 거리 측정 단위를 설정해야 합니다. 지원되는 리터럴은 다음과 같습니다.
    • L2_SQUARED
    • COSINE
    • DOT_PRODUCT
  • NUM_LEAVES: 선택사항입니다. 빌드할 파티션 (리프) 수를 지정합니다. ANN 검색 및 데이터 세트에 대해 잘 알고 있는 경우에만 이 설정을 기본 설정에서 변경하세요. 지정된 숫자는 기본 테이블의 임베딩 수보다 클 수 없습니다.

예를 들어 벡터 색인을 만들려면 다음을 실행합니다.

CREATE
  VECTOR INDEX vectorIndex
ON dbname.books(embeddings) DISTANCE_MEASURE = L2_SQUARED;

CREATE 문이 실행되는 동안 기본 테이블은 읽기 전용 모드로 설정되며 기본 테이블에는 DML이 허용되지 않습니다.

다음 구문을 사용하여 기존 테이블에 색인을 만들 수 있습니다.

ALTER TABLE tbl_name
  ADD VECTOR INDEX index_name(key_part)[index_option];

예를 들어 기존 테이블에 색인을 만들려면 다음을 실행합니다.

ALTER TABLE t1 ADD VECTOR INDEX index1(j)
USING SCANN QUANTIZER = SQ8 DISTANCE_MEASURE = l2_squared NUM_LEAVES = 10;

벡터 색인 조정

이 섹션에서는 벡터 색인을 빌드하는 데 사용하는 매개변수에 관해 자세히 설명합니다. 벡터 색인을 조정하려면 이 정보를 사용하여 빌드 프로세스에 영향을 미치는 방법을 결정합니다.

파라미터 설명 기본 범위 영향
cloudsql_vector_max_mem_size 색인 학습에 할당된 메모리입니다. 다양한 가격 인스턴스 메모리가 부족하면 빌드가 실패할 수 있습니다. 벡터 색인의 메모리 할당 구성을 참고하세요.
innodb_ddl_threads 색인 학습 및 빌드의 동시 실행 정도입니다. 4 세션 값이 클수록 빌드 시간이 줄어들지만 CPU 부하가 증가합니다. 이 값을 데이터베이스 작업에 부정적인 영향을 미치지 않으면서 여유 있게 사용할 수 있는 CPU 수로 설정합니다.

cloudsql_vector_max_mem_size가 학습에 적절하게 구성되어 있는지 확인합니다. 동시 데이터베이스 작업에 미치는 영향을 고려하여 빌드 시간과 CPU 부하의 균형을 맞추도록 innodb_ddl_threads를 조정합니다. 빌드 중에 CPU 사용률을 모니터링합니다.

벡터 색인 삭제

벡터 색인을 삭제하려면 다음과 같이 삭제하려는 색인 이름과 함께 SQL DROP INDEX 또는 ALTER TABLE 문을 사용합니다.

DROP INDEX index_name ON books;

ALTER TABLE table_name
DROP INDEX index_name;

벡터 색인 모니터링

Cloud SQL은 메모리에 로드된 벡터 색인에 관한 실시간 정보를 다음 정보 스키마 테이블에 제공합니다.

  • information_schema.innodb_vector_indexes는 다시 시작 후 메모리에서 열려 있는 모든 벡터 색인을 나열합니다.
  • information_schema.innodb_all_vector_indexes는 인스턴스에 있는 모든 벡터 색인을 나열합니다 (아직 메모리에서 열리지 않은 경우에도 해당).
  • information_schema.innodb_vector_indexes_memory는 인스턴스의 벡터 색인의 전체 메모리 사용량에 관한 정보를 제공합니다.

자세한 내용은 정보 스키마를 참고하세요.

innodb_vector_indexes 테이블의 정보를 보려면 다음 명령어를 실행합니다.

SELECT * FROM information_schema.innodb_vector_indexes \ G;

결과는 다음과 유사합니다.

 INDEX_NAME: t1_vec_index
 TABLE_NAME: test.t1
 INDEX_TYPE: TREE_SQ
 DIMENSION: 3
 DIST_MEASURE: COSINE
 STATUS: Ready
 STATE: INDEX_READY_TO_USE
 NUM_LEAVES: 10
 NUM_LEAVES_TO_SEARCH: 10
 QUERIES: 1
 MUTATIONS: 1
 TREE_MEMORY: 443

다음 단계