brunch

You can make anything
by writing

C.S.Lewis

by 말바보 Nov 21. 2022

Snowflake: 쿼리 가속 서비스


읽는 시간: 4분 17초


이 게시물에서는 중요한 Snowflake 기능 중 하나인 QAS(Query Acceleration Service)에 대해 논의할 것입니다. 명령문이 웨어하우스에 제출되면 Snowflake는 명령문 실행을 위한 리소스를 할당합니다. 사용 가능한 리소스가 충분하지 않으면 웨어하우스에 따라 명령문이 대기되거나 추가 웨어하우스가 시작됩니다. 거의 모든 WH 리소스를 소모한 WH에 롱 러너가 제출된 시나리오를 고려하십시오. 따라서 다른 짧은 실행 쿼리도 차단되었습니다.


따라서 이러한 시나리오를 처리하기 위해 다음 두 가지 접근 방식을 선택할 수 있습니다.



현재 창고를 확장하십시오.


계정에서 멀티클러스터링을 활성화합니다.



확장하면 롱 러너의 성능이 향상되지만 작은 쿼리의 경우에는 어떻습니까? 즉, Large Warehouse 기능을 완전히 활용하지 못하는 소규모 쿼리로 WH 크레딧을 낭비하고 있습니다. 대신 XS Warehouse는 다른 쿼리 로드를 처리하기에 충분합니다.


Query Acceleration Service는 쿼리 실행을 완료하기 위해 일시적으로 추가 데이터베이스 리소스를 증가시키는 매우 중요한 역할을 합니다. 쿼리가 완료되면 추가 리소스가 해제됩니다. QAS는 우리가 정의하고 대형 테이블 스캔에 적용하는 스케일 팩터를 기반으로 대형/더 큰 창고를 사용합니다. 즉, 현재 WH, 즉 X-SMALL에서 쿼리를 실행하게 됩니다. 그러나 스케일 팩터 기반의 서버리스 서비스인 QAS는 더 많은 데이터베이스 리소스를 포함하고 테이블 스캔을 완료합니다. 쿼리 실행이 끝나면 수동 개입 없이 리소스가 자동으로 해제됩니다.


“쿼리 가속화 서비스는 언제든지 리소스를 동적으로 재할당할 수 있습니다. 성능 향상은 다른 시간에 실행되는 동일한 쿼리에 따라 다를 수 있습니다.”


기술적 구현:


쿼리 가속 서비스의 이점을 얻을 수 있는 쿼리를 식별하려면 SYSTEM$ESTIMATE_QUERY_ACCELERATION 함수를 사용하거나 QUERY_ACCELERATION_ELIGIBLE 보기를 쿼리할 수 있습니다.



SYSTEM$ESTIMATE_QUERY_ACCELERATION :



select parse_json(system$estimate_query_acceleration('01a6be40–0000-bc71–0002-a75a0007c4c2'));


{
"estimatedQueryTimes": {
"1": 80,


"2": 70,


"4": 62,


"8": 57
},
"originalQueryTime": 103.672,
"queryUUID": "01a6be40-0000-bc71-0002-a75a0007c4c2",
"status": "eligible",
"upperLimitScaleFactor": 8
}


참고: 쿼리 가속화는 특정 쿼리에 도움이 될 수 있습니다. 위 출력에서 QAS는 query_acceleration_max_scale_factor 값에 따라 성능을 향상시킬 수 있습니다.


항상 그런 것은 아니며 때로는 쿼리가 쿼리 가속 서비스에 적합하지 않은 경우도 있습니다.


select parse_json(system$estimate_query_acceleration('01a6beaf-0000-bc71–0002-a75a0007c72a'));


{
"estimatedQueryTimes": {},
"originalQueryTime": 0.879,
"queryUUID": "01a6beaf-0000-bc71-0002-a75a0007c72a",
"status": "ineligible",
"upperLimitScaleFactor": 0
}



QUERY_ACCELERATION_ELIGIBLE 보기:



또한 ACCELERATION_ELIGIBLE 보기를 쿼리하여 쿼리 가속화 서비스에서 가장 많은 이점을 얻을 수 있는 쿼리 및 웨어하우스를 식별합니다.


select query_id, eligible_query_acceleration_time
from snowflake.account_usage.query_acceleration_eligible
where warehouse_name = 'XTRA_SMALL_WH'
order by eligible_query_acceleration_time desc;




가속_적격


a) 쿼리 가속을 활성화하는 방법:


웨어하우스를 생성할 때(CREATE WAREHOUSE 사용) 이후에(ALTER WAREHOUSE 사용) ENABLE_QUERY_ACCELERATION = TRUE를 지정하여 쿼리 가속 서비스를 활성화합니다.


alter warehouse XTRA_SMALL_WH set enable_query_acceleration = true query_acceleration_max_scale_factor = 16;


따라서 데이터베이스 서버가 자동으로 최대 16개의 서버로 확장될 수 있습니다.


b) 쿼리 가속 서비스 사용을 모니터링하는 방법:


창고에서 QAS를 활성화하지 않고 아래 쿼리를 실행하고 타이밍을 관찰합니다.


select d_year AS ss_sold_year, i.i_brand_id ,i.i_brand ,
sum(ss_quantity) ss_qty,sum(ss_wholesale_cost) ss_wc,sum(ss_sales_price) ss_sp
from store_sales s,store_returns sr,item i,date_dim d
where
s.ss_ticket_number = sr.sr_ticket_number and s.ss_sold_date_sk = d.d_date_sk and
s.ss_item_sk = i.i_item_sk and i.i_manufact_id = 939 and d_qoy = 4
group by d_year, i_brand_id, i_brand
order by 1,4,5,2
limit 200;




프로필 개요


따라서 쿼리를 실행하는 데 7분 이상 걸리는 것을 볼 수 있습니다. 또한 Query가 QAS의 이점을 얻을 수 있는지 알아보기 위해 Estimate_query_acceleration 함수를 실행합니다.


select parse_json(system$estimate_query_acceleration('01a6bea7-0000-bcaa-0002-a75a0007b792'));




QAS 추정


쿼리가 가속화 서비스에 적격임을 분명히 알 수 있으므로 Warehouse에서 이를 활성화할 것입니다.


c) QAS 서비스 활성화:


ALTER SESSION SET use_cached_result = FALSE;


alter warehouse XTRA_SMALL_WH set enable_query_acceleration = true query_acceleration_max_scale_factor = 16;




가속 스케일 팩터


이제 쿼리를 실행하고 쿼리 프로필을 분석합니다.




QAS 서비스 프로필


d) 무엇보다 QUERY_ACCELERATION_HISTORY 기능을 사용하여 청구 보기:


select * from
table(information_schema.query_acceleration_history(
date_range_start=>dateadd(h, -12, current_timestamp)));




QAS 결제


결론적으로 창고에 대한 사용법을 봅니다.



QAS 프로필


원래 이야기는 다음 위치에 게시되었습니다.


https://cloudyard.in/2022/11/snowflake-query-acceleration-service/

브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari