열 스토어 콘텐츠 수동 관리

이 페이지에서는 쿼리 성능을 가속화하기 위해 열 기반 엔진의 콘텐츠를 수동으로 관리하는 방법을 설명합니다. 테이블, 구체화된 뷰, ScaNN 색인을 추가하고 삭제하는 방법을 설명합니다.

테이블, 구체화된 뷰, ScaNN 색인 관리

워크로드에 따라 열 스토어에 열을 수동으로 추가하거나 열 스토어에서 테이블이나 구체화된 뷰의 일부 또는 모든 열을 삭제할 수 있습니다. 쿼리 평가에서는 저장된 열 기반 데이터를 자동으로 사용하여 쿼리에 응답합니다.

마찬가지로 열 기반 엔진에 ScaNN 색인을 수동으로 추가하여 벡터 검색 속도를 높일 수 있습니다. 이를 통해 벡터 임베딩의 대규모 데이터 세트에서 효율적인 최근접 이웃 검색이 가능합니다.

열 스토어에 추가할 테이블, 구체화된 뷰, 열을 선택할 때는 열 스토어 크기와 워크로드 형태 모두 고려하세요. 선택하기에 적합한 후보에는 자주 스캔되는 대규모 테이블이나 뷰가 포함됩니다. 이러한 테이블 또는 뷰 내에서 OLAP 워크로드에서 사용되는 대규모의 비고유 색인을 식별합니다. 이러한 색인의 열을 열 스토어에 추가하고 색인을 삭제하여 기본 인스턴스의 유지보수와 관련된 성능 비용을 없앨 수 있습니다.

다음 방법 중 하나를 사용하여 열 기반 엔진의 콘텐츠를 관리합니다.

열 스토어에 테이블, 열, 구체화된 뷰를 추가할 때 사용할 수 있는 데이터 유형과 데이터 소스에 관한 자세한 내용은 열 스토어에 추가할 수 있는 데이터를 참조하세요.

시작하기 전에

  • 사용 중인 Google Cloud 프로젝트에 다음 IAM 역할 중 하나가 있어야 합니다.
    • roles/alloydb.admin(AlloyDB 관리자가 사전 정의한 IAM 역할)
    • roles/owner(소유자 기본 IAM 역할)
    • roles/editor(편집자 기본 IAM 역할)

    이러한 역할이 없는 경우 조직 관리자에게 문의하여 액세스 권한을 요청하세요.

데이터베이스 플래그를 업데이트하여 열 스토어 콘텐츠 관리

google_columnar_engine.relations 데이터베이스 플래그를 업데이트하여 열 스토어 콘텐츠를 수동으로 관리할 수 있습니다. 플래그에는 열 스토어의 모든 데이터 소스를 지정하는 단일 값이 있습니다. 다시 시작하는 동안 이 플래그에 지정된 열이 자동으로 열 스토어에 채워집니다.

이 플래그는 자동 열 지정과 함께 사용할 수 있습니다. 열 기반 엔진에 google_columnar_engine.relations 플래그를 통해 지정한 열을 채운 후 사용 가능한 메모리가 있으면 자동 열 지정이 필요에 따라 열 스토어에 더 많은 열을 추가합니다.

Google Cloud CLI 또는 Google Cloud 콘솔을 사용하여 인스턴스의 데이터베이스 플래그를 설정하는 방법에 대한 자세한 내용은 인스턴스의 데이터베이스 플래그 구성을 참조하세요.

플래그를 사용하여 열 추가

열 스토어에 열을 추가하려면 인스턴스의 google_columnar_engine.relations 플래그를 정의합니다. 값을 쉼표로 구분된 항목의 목록으로 설정합니다. 각 항목은 특정 테이블에서 포함할 열 목록을 다음 형식으로 지정합니다.

DATABASE_NAME.SCHEMA_NAME.TABLE_NAME(COLUMN_LIST)

다음을 바꿉니다.

  • DATABASE_NAME: 열 스토어에 추가할 열이 포함된 데이터베이스

  • SCHEMA_NAME: 열 스토어에 추가할 테이블이나 구체화된 뷰를 식별하는 스키마(예: public)

  • TABLE_NAME: 열 스토어에 추가할 열이 포함된 테이블이나 구체화된 뷰

  • COLUMN_LIST: 열 스토어에 추가할 쉼표로 구분된 열 목록

한 테이블의 모든 열 또는 하나의 구체화된 뷰의 열을 추가하려면 열 목록을 생략합니다.

DATABASE_NAME.SCHEMA_NAME.TABLE_NAME

인스턴스에서 데이터베이스 플래그를 설정하는 방법에 대한 자세한 내용은 인스턴스의 데이터베이스 플래그 구성을 참조하세요.

google_columnar_engine.relations 사용 시 Google Cloud CLI CLI 구문

Google Cloud CLI를 사용하여 google_columnar_engine.relations 플래그를 설정하는 경우 대체 구분자 구문을 사용하여 설정한 데이터베이스 플래그를 구분해야 합니다. 열 목록이 쉼표로 구분되어 있으므로 동일한 명령줄 인수 내에서 플래그를 지정할 때 쉼표가 아닌 문자를 사용해야 합니다.

다음 예시에서는 gcloud CLI를 사용하여 public 스키마의 두 열을 열 스토어에 추가하는 방법을 보여줍니다. 이 예시에서는 열 기반 엔진을 사용 설정하기 위해 별도의 플래그를 설정합니다. gcloud alloydb instance update 명령어를 사용하여 데이터베이스 플래그를 설정하면 이미 설정된 경우에도 기본값이 아닌 값을 갖는 다른 모든 데이터베이스 플래그도 설정해야 하기 때문입니다.

gcloud alloydb instances update INSTANCE_NAME \
    --database-flags=^:^\
google_columnar_engine.relations='DATABASE_NAME.public.TABLE_NAME(COLUMN_1,COLUMN_2)'\
:google_columnar_engine.enabled=on\
[:FLAG_3=VALUE_3 ...] \
    --region=REGION_ID \
    --cluster=CLUSTER_ID

플래그를 사용하여 열 삭제

열 스토어에서 열을 삭제하려면 이전 섹션에 설명된 google_columnar_engine.relations 플래그의 새 값을 설정하고 삭제할 열은 제외합니다.

열 스토어에서 모든 열을 삭제하려면 인스턴스에서 google_columnar_engine.relations 플래그를 설정 해제합니다.

인스턴스에서 데이터베이스 플래그를 설정하는 방법에 대한 자세한 내용은 인스턴스의 데이터베이스 플래그 구성을 참조하세요.

SQL 함수를 사용하여 열 스토어 콘텐츠 관리

SQL 함수를 사용하여 열 스토어 콘텐츠를 수동으로 관리할 수 있습니다.

SQL 함수를 사용하여 열 추가

google_columnar_engine_add SQL 함수를 실행하여 열 스토어에 열을 추가합니다.

이 메서드는 지정된 열을 열 스토어에 추가하고 연결된 노드의 열만 관리합니다. 새 열은 인스턴스 재시작 시 스토어 내에 유지되지 않습니다.

이 메서드는 google_columnar_engine.relations 데이터베이스 플래그를 변경하지 않습니다. 자동 열 지정은 이 SQL 함수로 추가된 열을 고려하지 않습니다.

psql 클라이언트

SELECT google_columnar_engine_add(
    relation => 'TABLE_NAME',
    columns => 'COLUMN_LIST'
);
    다음을 바꿉니다.
  • 'TABLE_NAME': 테이블이나 구체화된 뷰의 이름을 포함하는 문자열. 테이블이나 뷰가 public 이외의 스키마에 있는 경우 스키마 이름, 점, 테이블 또는 뷰 이름을 지정합니다(예: 'myschema.mytable').
  • 'COLUMN_LIST': 추가할 열의 쉼표로 구분되고 대소문자가 구분된 이름 목록이 포함된 문자열. 테이블이나 구체화된 뷰의 모든 열을 열 스토어에 추가하려면 이 파라미터를 생략합니다.

SQL 함수를 사용하여 열 삭제

다음과 같이 google_columnar_engine_drop SQL 함수를 실행합니다.

psql 클라이언트

SELECT google_columnar_engine_drop(
    relation => 'TABLE_NAME',
    columns => 'COLUMN_LIST'
);
다음을 바꿉니다.
  • 'TABLE_NAME': 테이블이나 구체화된 뷰의 이름을 포함하는 문자열. 테이블이나 뷰가 public 이외의 스키마에 있는 경우 스키마 이름, 점, 테이블 또는 뷰 이름을 지정합니다(예: 'myschema.mytable').
  • 'COLUMN_LIST': 추가할 열의 쉼표로 구분되고 대소문자가 구분된 이름 목록이 포함된 문자열. 테이블이나 구체화된 뷰의 모든 열을 열 스토어에 추가하려면 이 파라미터를 생략합니다.

google_columnar_engine.relations 데이터베이스 플래그를 수정하여 추가된 열을 삭제하려면 google_columnar_engine_drop 함수를 사용하면 됩니다. 하지만 이렇게 하면 인스턴스가 다시 시작될 때 해당 열이 열 기반 스토어에 다시 추가됩니다.

열 기반 엔진에서 ScaNN 색인 관리

벡터 검색을 가속화하려면 ScaNN 색인을 열 기반 엔진의 색인 캐시에 로드하면 됩니다.

SQL 함수를 사용하여 ScaNN 색인 추가, 삭제, 확인

SQL 함수를 사용하여 색인 캐시에서 ScaNN 색인을 수동으로 추가, 삭제, 확인할 수 있습니다. 캐시에 색인을 추가하면 벡터 검색어를 가속화할 수 있습니다.

ScaNN 색인 추가

열 기반 엔진의 색인 캐시에 특정 색인을 추가하려면 다음 SQL 함수를 사용하세요.

SELECT google_columnar_engine_add_index(index => 'SCANN_INDEX_NAME');

SCANN_INDEX_NAME을 열 형식 엔진의 색인 캐시에 추가하려는 ScaNN 색인의 이름으로 바꿉니다.

ScaNN 색인 삭제

열 기반 엔진에서 특정 ScaNN 색인을 삭제하려면 다음 SQL 함수를 사용하세요.

SELECT google_columnar_engine_drop_index(index => 'SCANN_INDEX_NAME');

SCANN_INDEX_NAME을 삭제하려는 ScaNN 색인의 이름으로 바꿉니다.

열 기반 엔진 사용 확인

벡터 색인 검색에서 열 기반 엔진을 사용하는지 확인하려면 COLUMNAR_ENGINE 옵션과 함께 EXPLAIN ANALYZE 명령어를 실행하세요.

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;

이 명령어는 다음과 유사한 쿼리 계획을 반환합니다.

Index Scan using t_ix3 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)

출력에 columnar engine nodes hitColumnar Engine ScaNN Info: (index found=true)이 있으면 쿼리에 열 기반 엔진이 사용되었음을 확인할 수 있습니다.