스노우플레이크 쿼리 성능 향상에 도움이 되는 다양한 최적화 기법에 대해 알아보겠습니다.
주지하는 바와 같이 스노우플레이크 테이블은 마이크로 파티셔닝되어 있어 쿼리 성능이 크게 향상되지만, 시간이 지남에 따라 대규모 데이터셋에 대한 DML 연산이 증가하여 쿼리 속도가 느려질 수 있습니다.
이러한 경우 테이블을 클러스터링하거나 검색 최적화 서비스를 사용하여 성능을 향상시킬 수 있습니다. 어떤 옵션을 선택할지 결정하기 전에 가장 유익한 특정 사용 사례 및 관련 비용 영향을 고려해야 합니다. 그렇지 않으면 최적화 작업이 줄어들고 유지 보수 비용이 높아질 수 있습니다.
스노우플레이크의 군집성
스노우플레이크의 클러스터링은 빅 데이터 용어의 파티셔닝과 혼동되어서는 안 됩니다.
스노우플레이크에서의 클러스터링은 마이크로 파티션을 관리하는 프로세스이지만 데이터 삽입 순서가 아닌 정의된 클러스터링 키 순서로 관리되므로 성능이 향상됩니다. 정의된 클러스터링 키 값에 대한 마이크로 파티션 스캔의 필요성이 줄어들 것입니다.
표 위에 클러스터링을 선택할 때는 다음 사항을 고려해야 합니다:
테이블에 여러 테라바이트(TB)의 데이터가 포함되어 있는 경우 너무 많은 업데이트와 삭제로 인해 테이블 성능이 시간이 지남에 따라 저하됩니다.
클러스터링 키의 경우 최대 3-4개의 클러스터링 열을 사용하는 것이 좋습니다. 그 이상은 큰 영향이 없을 것입니다.
가장 많이 사용되는 필터로 클러스터링된 열을 정렬한 다음 가장 활발하게 사용되는 조인 술어로 정렬한 다음 ORDER BY, GROUP BY 절을 사용합니다.
다음이 포함된 클러스터링 키 열을 사용합니다:
테이블에서 효과적인 가지치기를 사용할 수 있을 만큼 충분한 수의 고유 값입니다.
스노우 플레이크가 동일한 마이크로 파티션의 행을 효과적으로 그룹화할 수 있을 만큼 충분히 적은 수의 고유한 값입니다.
열 순서를 가장 낮은 카디널리티에서 가장 높은 카디널리티로 바꿉니다.
높은 카디널리티 열을 클러스터링에 여전히 사용해야 하는 경우 키를 직접 열이 아닌 열에 있는 식으로 정의하여 고유한 값의 수를 줄입니다.
재클러스터링과 관련된 비용
기존 테이블이 클러스터된 경우:
원래 마이크로 파티션은 삭제된 것으로 표시되지만 시스템에 유지되어 Time Travel(시간 이동) 및 Fail Safe(실패 안전)가 활성화됩니다. 이 파티션들은 Time Travel(시간 이동) 및 Fail Safe(실패 안전) 이후에만 제거됩니다.
새 마이크로 파티션은 이전 파티션과 동일한 크기로 생성되므로 기존 파티션과 새 파티션을 유지 관리하는 데 추가 비용이 소요됩니다.
예: 다시 클러스터링하기 전에 테이블 크기가 100GB라고 가정하고, 매일 2GB를 추가하고 1GB를 삭제하면 원래 테이블은 이제 101GB가 되며, Time Travel의 크기는 그 날의 2GB가 됩니다. 그러나 다시 클러스터링한 후에도 원본은 클러스터 키에 따라 101GB의 활성 파티션을 유지하고, Time Travel의 데이터도 이전의 마이크로 파티션에 따라 100GB가 됩니다. 이 100GB의 Time Travel 데이터는 페일 세이프 존으로 이동할 때까지 유지됩니다.
클러스터링은 스노우플레이크의 자체 관리 웨어하우스의 배경에서 항상 자동 재클러스터링 비용이 발생하며, 이와 관련된 비용도 고려해야 합니다.
최적화 쿼리 서비스 검색
클러스터링이 비클러스터 열에서 성능 향상을 보장하지는 않습니다.
클러스터되지 않은 열에 대한 쿼리가 자주 발생하고 비용에 관계없이 성능이 핵심인 경우 특정 열의 전체 테이블 위에서 검색 최적화 서비스를 선택합니다.
특정 열의 Oracle과 같은 RDBMS 데이터베이스에서 인덱싱을 활성화하는 것과 유사합니다.
검색 최적화 쿼리 사용에 따른 비용 영향
스토리지 리소스
검색 최적화 서비스는 검색 최적화가 활성화된 각 테이블에 대한 공간이 필요한 검색 접근 경로 데이터 구조를 생성합니다.
검색 액세스 경로의 저장 비용은 여러 요소에 따라 달라집니다:
표에 있는 고유 값의 수입니다.
모든 열에 검색 액세스 경로를 사용하는 데이터 유형이 있고 각 열의 모든 데이터 값이 고유한 극단적인 경우 필요한 저장소는 원래 테이블 크기만큼 될 수 있습니다.
그러나 일반적으로 크기는 원래 테이블 크기의 약 1/4입니다.
리소스 계산
이탈이 심할 때 자원 소비가 더 많습니다.
이러한 비용은 데이터를 수집(추가 또는 변경)한 양과 표의 개별 값에 거의 비례합니다.
삭제에도 비용이 듭니다.
자동 클러스터링은 검색 최적화를 통해 테이블의 쿼리 지연 시간을 개선하는 동시에 검색 최적화의 유지보수 비용을 더욱 증가시킬 수 있습니다.
SYSTEM$ESTIMATE_SEARCH_OPTIMIZATION_COSTs 함수를 사용하여 테이블에 검색 최적화를 추가하는 비용을 추정합니다.
검색 최적화를 사용하면서 비용 절감
삭제 빈도가 적습니다.
INSERT, UPDATE, MERGE : 이러한 종류의 DML 문을 테이블에 배치하면 검색 최적화 서비스에 의한 유지보수 비용을 절감할 수 있습니다.
전체 테이블을 다시 클러스터링하는 경우, 다시 클러스터링하기 전에 해당 테이블에 대한 검색 최적화 속성을 삭제한 다음 다시 클러스터링 후 테이블에 검색 최적화 속성을 추가합니다.
'일상 > IT' 카테고리의 다른 글
생성형 AI 혁신 개발자 (0) | 2023.11.09 |
---|---|
18 소프트웨어 개발 동향 및 예측 2024 (0) | 2023.11.08 |
Data Storage Strategy : PostgreSQL 성능에 미치는 영향 (0) | 2023.10.24 |
관측가능성 아키텍처: 금융결제 공통 관측가능성 요소 (0) | 2023.10.22 |
데이터 과학자가 생산성을 10배 향상시킬 수 있는 5가지 (0) | 2023.10.16 |