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

Snowflake SE·2025년 1월 2일
0

Zero to Snowflake

목록 보기
16/21

0. 실습 시나리오

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

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


1. 워크시트 준비

  1. Projects > Worksheets 에서 +를 클릭하여 새 SQL Worksheet를 만듭니다
  2. 타임스탬프로 만들어진 worksheet 에서 ...을 클릭하여 RENAME합니다
    • 이름 변경 : Lab8. Result Cache
  3. Snowsight UI또는 다음과 같은 SQL로 worksheet 컨텍스트를 설정합니다
    // 컨텍스트 설정
    USE ROLE tasty_data_engineer ;
    USE WAREHOUSE tasty_de_wh ;
    USE DATABASE tasty_db ;
    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 Details에서 ...을 클릭하여 View 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 tasty_db ;
    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를 활성화하고 location이라고 넣고 (쿼리의 일부분) Apply Filters를 클릭합니다
    쿼리모니터링

    • 동일한 쿼리에 대해서는 웨어하우스의 설정이나 수행한 사용자에 관계없이 쿼리 결과 캐시에서 결과를 리턴하였습니다
    • 스페이스나 줄바꿈은 동일한 쿼리로 인식합니다
profile
Snowflake Korea SE

0개의 댓글