Chapter 8. Query Lifecycle & Cache

Snowflake SE·2025년 1월 2일
0

Zero to Snowflake

목록 보기
15/21

1. 쿼리 실행 과정

  1. 쿼리 실행

    • 쿼리 최적화
      • 비용 기반 옵티마이저 사용
      • 통계 정보 수집
      • 조인 순서 결정
      • 메타 데이터를 이용하여 파티션 스캔 결정 (pruning)
    • 메타 데이터 관리
      • 데이터 적재 시 메타 데이터 생성
      • 메타 데이터 또는 커리 결과 캐시로 부터 사용자 쿼리 처리
    • 컴퓨팅 레이어 사용 최소화
      - 쿼리 결과 캐시 조회 및 사용
      - 오브젝트 생성 및 삭제
      - Materialized view 관리, snowpipe 와 같은 서버리스 작업 수행
      쿼리실행
  2. 컴퓨팅 리소스 할당 - 가상 웨어하우스 시작(resume)

    • Snowflake virtual warehouse pool에서 자원 할당
    • 자동 resume 옵션 : 쿼리 수행 시 자동 시작
    • 멀티 클러스터 옵션 : 대기 상태의 세션이 있으면 자동으로 가상 웨어하우스 추가 할당
      가상웨어하우스시작
  3. 마이크로파티션 스캔

    • 쿼리에 필요한 마이크로 파티션만 스캔 : partition pruning
    • 가상 웨어하우스에 데이터 캐시
      마이크로파티션스캔
  4. 데이터 연산 처리

    • 스캔한 데이터를 이용하여 집계, 연산 처리
    • 처리된 결과는 클라우드 레이어의 쿼리 결과 캐시에 저장
      데이터연산처리
  5. 결과 리턴

    • 향후 동일한 쿼리가 사용되면 쿼리 결과 캐시에서 바로 결과 리턴
      결과리턴
  6. 시스템 자원 반환 - 가상 웨어하우스 중지(suspend)

    • Snowflake virtual warehouse pool로 자원 반환
    • 자동 suspend 옵션 : 쿼리 수행이 마치면 지정된 시간 후에 중지
    • 웨어하우스 내의 데이터 캐시 삭제
      가상웨어하우스중지

2. 멀티레이어 캐시로 쿼리 속도 향상

  1. 데이터 캐시

    • 데이터 캐시란
      • 쿼리에 사용된 파일의 헤더와 컬럼 데이터
      • 가상 웨어하우스의 SSD에 저장
      • 자주 사용되는 데이터를 캐시하여 remote disk read 최소화
    • 데이터 캐시 동작
      • 유사한 쿼리가 실행되면 최대한 데이터 캐시 내에 데이터를 먼저 사용하도록 탐색
      • 데이터 캐시에서 데이터를 먼저 읽고 나머지 부분은 리모트 클라우드 스토리지에서 나머지 데이터를 조회
      • 동일한 가상 웨어하우스에서는 모든 쿼리에 대해 데이터 캐시 사용 가능
    • 데이터 캐시 사용 가이드
      • 유사한 쿼리는 최대한 같은 가상 웨어하우스에서 실행하여 데이터 캐시 재사용율 향상
      • 쿼리 수행 직후 가상 웨어하우스를 중단(suspend) 시키면 데이터 캐시 재사용률 저하
  2. 메타 데이터 캐시

    • 쿼리 플랜을 생성하는 과정에서 빠른 액세스를 위해 사용
    • 메타데이터 정보
      • 마이크로 파티션 레벨 : 레코드 수
      • 컬럼 레벨 : Min, Max 값, distinct 값의 수, null 값의 수
      • 테이블 버전 및 물리 파일의 참조
    • 메타데이터 사용의 이점
      • 옵티마이저의 쿼리 컴파일 가속화
      • 가상 웨어하우스를 사용하지 않고 메타데이터만으로 쿼리 처리 가능
        (show 구문, min, max, count 구문 등)
  3. 쿼리 결과 캐시

    • 쿼리 결과 캐시(Result Cache)란
      • 클라우드 서비스 레이어에서 쿼리 결과 저장 및 관리
      • 동일한 쿼리가 실행되고 데이터 변경이 없으면 캐시 재사용
      • 컴퓨팅 (웨어하우스)이 사용되지 않아 비용 발생하지 않음
      • 쿼리 결과 캐시의 테이블에 대해 select 권한이 있는 모든 사용자는 재사용 가능
      • 동일한 쿼리가 실행되는 정적 리포팅에 유용
    • 쿼리 결과 캐시 유지 기간
      • 쿼리 결과 캐시는 최초 24시간 유지
      • 캐시가 다시 사용되면 24시간 다시 연장되어 최대 31일까지 사용
    • 쿼리 결과 캐시 사용 설정
      USE_CACHED_RESULT가 true로 세팅 되어 있을 때 사용 가능 : account 레벨, user 레벨, session 레벨에서 설정
      alter session set use_cached_result = true  ;   
      동일한 쿼리 구문에 대해서 쿼리 결과 캐시 사용 (단, 공백 무시)
    • Table 함수를 사용해 명시적으로 캐시된 결과 사용 가능
      select * from table(result_scan(<query_id>)) ;
      select * from table(result_scan(last_query_id())) ;  
profile
Snowflake Korea SE

0개의 댓글