Chapter 8. 쿼리 결과 캐시 (Lab)

Snowflake SE·2025년 1월 2일

Zero to Snowflake

목록 보기
16/21
post-thumbnail

0. 실습 시나리오

지금까지 실습했던 데이터를 이용해서 쿼리 캐시의 사용 여부와 효과를 확인하고자 합니다.
웨어하우스를 크기와 종류를 변경하면서 지역별 주문 금액을 집계하는 쿼리를 수행합니다. 그리고 새로운 사용자를 만들어 동일한 쿼리를 수행하고 그 결과를 모니터링 해봅니다.

이번 실습을 위한 테이블이 만들어지지 않았다면 Chapter 2와 Chapter 3의 Lab에서 테이블을 생성하고 데이터를 적재해야 합니다.
본 실습에서 사용할 웨어하우스는 Chapter 4와 Chapter 7의 Lab에서 생성했고, 그 중 Chapter 7의 Lab에서는 본 실습에 사용할 role도 만들었습니다


1. SQL File 준비

  1. Projects > Workspace 에서 +Add new를 클릭하여 새 SQL File을 만듭니다
    • 이름 : Lab8. Result Cache
  2. Snowsight UI또는 다음과 같은 SQL로 컨텍스트를 설정합니다
    // 컨텍스트 설정
    USE ROLE tasty_data_engineer ;
    USE WAREHOUSE tasty_de_wh ;
    USE DATABASE frostbyte_tasty_bytes ;
    USE SCHEMA raw_pos ;

2. 쿼리 수행 #1

  1. 지역별 주문 금액을 집계하기 위해서 다음 쿼리를 실행합니다

    // 쿼리 수행 #1
    SELECT l.country, l.city, year(order_ts), min(order_amount), avg(order_amount), max(order_amount)
      FROM order_header h
           LEFT OUTER JOIN location l
             ON h.location_id = l.location_id 
     GROUP BY ALL
     ORDER BY 1,2,3
    ;
    수행시간을 기록합니다
  2. snowsight 하단 쿼리 결과 상단의 ℹ︎기호를 클릭하고 Query ID를 클릭하여 Query Profile 을 엽니다

    • Query Details 탭과 Query Profile 탭을 선택해서 사용한 웨어하우스, 수행시간, 쿼리 플랜 등을 확인합니다
      쿼리프로파일

3. 쿼리 수행 #2

  1. 웨어하우스의 크기를 변경하고 동일한 쿼리를 수행합니다

    // 웨어하우스 크기 변경
    ALTER WAREHOUSE tasty_de_wh SET WAREHOUSE_SIZE = 'SMALL' ;
    
    // 쿼리 수행 #2
    SELECT l.country, l.city, year(order_ts), min(order_amount), avg(order_amount), max(order_amount)
      FROM order_header h
           LEFT OUTER JOIN location l
             ON h.location_id = l.location_id 
     GROUP BY ALL
     ORDER BY 1,2,3
    ;
    수행시간을 기록합니다
  2. 마찬가지로 snowsight에서 Query Profile을 확인합니다

    • 동일한 쿼리를 수행했지만 쿼리 플랜의 모양은 완전히 달라졌습니다
    • Query Detail탭에서 사용한 웨어하우스를 확인해 보세요
      쿼리결과캐시

4. 쿼리 수행 #3

  1. 이번에는 다른 웨어하우스를 사용하여 동일한 쿼리를 실행합니다

    // 웨어하우스 변경
    USE WAREHOUSE tasty_dev_wh ;
    
    // 쿼리 수행 #3
    SELECT l.country, l.city, year(order_ts), min(order_amount), avg(order_amount), max(order_amount)
      FROM order_header h
           LEFT OUTER JOIN location l
             ON h.location_id = l.location_id 
     GROUP BY ALL
     ORDER BY 1,2,3
    ;
    수행시간을 기록합니다
  2. 같은 방식으로 Query Profile을 확인합니다


5. 쿼리 수행 #4

  1. 다음과 같이 동일한 쿼리를 줄바꿈하여 실행해 봅니다

    // 쿼리 수행 #4 
    SELECT l.country, 
           l.city, 
           year(order_ts), 
           min(order_amount), 
           avg(order_amount), 
           max(order_amount)
      FROM order_header h
           LEFT OUTER JOIN location l
             ON h.location_id = l.location_id 
     GROUP BY ALL
     ORDER BY 1,2,3
    ;
    수행시간을 기록합니다
  2. 같은 방식으로 Query Profile을 확인합니다


6. 사용자 생성 후 쿼리 수행

  1. 다음과 같이 신규 사용자 tasty_dev_user를 생성합니다

    // 신규 사용자 생성
    USE ROLE securityadmin ;
    
    CREATE USER tasty_dev_user 
           PASSWORD='dev123' 
           DEFAULT_ROLE=tasty_dev 
           MUST_CHANGE_PASSWORD=false ;
    
    GRANT ROLE tasty_dev TO USER tasty_dev_user ;
  2. snowsight의 왼쪽 하단의 로그인된 사용자 이름을 클릭하여 Sign out 합니다

  3. account ID값을 클릭하여 로그인하거나 북마크한 로그인 페이지로 돌아가서 신규 사용자로 로그인합니다

    • User : tasty_dev_user
    • Password : dev123
  4. 새 워크시트를 열고 컨텍스트를 설정합니다

    // 컨텍스트 설정
    USE ROLE tasty_dev ;
    USE WAREHOUSE tasty_dev_wh ;
    USE DATABASE frostbyte_tasty_bytes ;
    USE SCHEMA raw_pos ;
  5. 동일한 쿼리를 수행합니다

    // 쿼리 수행 #5
    SELECT l.country, l.city, year(order_ts), min(order_amount), avg(order_amount), max(order_amount)
      FROM order_header h
           LEFT OUTER JOIN location l
             ON h.location_id = l.location_id 
     GROUP BY ALL
     ORDER BY 1,2,3
    ;
  6. 다시 sign out 하고 다시 원래 사용자로 로그인 합니다


7. 쿼리 결과 모니터링

  1. Monitoring > Query History
  2. User를 All로 선택합니다
  3. Filters를 클릭하여 SQL text를 활성화하고 select l.country이라고 넣고 (쿼리의 일부분) Apply Filters를 클릭합니다
  4. Columns를 클릭하여 Warehouse Size를 추가로 체크합니다
    쿼리모니터링
    • 동일한 쿼리에 대해서는 웨어하우스의 설정이나 수행한 사용자에 관계없이 쿼리 결과 캐시에서 결과를 리턴하였습니다
    • 스페이스나 줄바꿈은 동일한 쿼리로 인식합니다
profile
Snowflake Korea SE

0개의 댓글