[Snowflake’s New Feature] معرفی انبارهای استاندارد Generation 2: مقایسه عملکرد
![[Snowflake’s New Feature] معرفی انبارهای استاندارد Generation 2: مقایسه عملکرد [Snowflake’s New Feature] معرفی انبارهای استاندارد Generation 2: مقایسه عملکرد](https://i3.wp.com/media2.dev.to/dynamic/image/width=1000,height=500,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8h913uz1im5j0mlf6gi3.png?w=780&resize=780,470&ssl=1)
※ این یک ترجمه انگلیسی از مقاله اصلی ژاپنی است: https://dev.classmethod.jp/articles/snowflake-generation-2-standard-warehouses/
این ساگارا است.
Snowflake انبارهای جدیدی را با عملکرد بهبود یافته با نام “انبارهای استاندارد Generation 2” منتشر کرده است.
https://docs.snowflake.com/en/release-notes/2025/other/2025-05-05-gen2-standard-warehouses
من سعی کردم سرعت این انبارهای جدید را با موارد سنتی مقایسه کنم و نتایج را در اینجا خلاصه می کنم.
انبارهای استاندارد Generation 2 چیست؟
در زیر ترجمه ای از نقل قول از مستندات رسمی آورده شده است. “انبارهای استاندارد نسل 2” نسل بعدی انبارهای مجازی استاندارد فعلی Snowflake است که بر عملکرد بهبود یافته متمرکز است.
انبارهای استاندارد Generation 2 (Gen2) یک نسخه به روز شده (“نسل بعدی”) انبارهای مجازی استاندارد فعلی Snowflake است که با تمرکز بر بهبود عملکرد برای بارهای تحلیلی و مهندسی داده ها. Gen2 بر روی بهینه سازی های سخت افزاری و نرم افزاری هوشمند سریعتر ساخته شده است ، از جمله پیشرفت هایی برای حذف ، به روزرسانی ، ادغام عملیات و عملیات اسکن جدول. با Gen2 ، اکثر نمایش داده ها سریعتر کامل می شوند و امکان انجام پردازش بیشتر را به طور همزمان انجام می دهند.
https://docs.snowflake.com/en/user-guide/warehouses-gen2#label-gen-2-standard-warehouses-region-availability
مناطق موجود
این ویژگی از انتشار آن به طور کلی (GA) در دسترس است ، اما در حال حاضر فقط در مناطق زیر موجود است:
- AWS US-West-2 (اورگان)
- AWS EU-Central-1 (فرانکفورت)
- Azure East US 2 (ویرجینیا)
- لاجورد غربی اروپا (هلند)
هزینه
با نگاهی به جدول مصرف سرویس Snowflake ، هزینه همانطور که در شکل زیر نشان داده شده است. در مقایسه با انبارهای استاندارد ، هزینه برای AWS 1.35 برابر بیشتر و 1.25 برابر بیشتر برای لاجورد است.
امتحان کردن
بیایید در واقع بررسی کنیم که چگونه سرعت پرس و جو در مقایسه با انبارهای قبلی تغییر می کند.
تعریف انبار
پرس و جو زیر را برای تعریف انبارها برای تأیید انجام دهید. برای استفاده از “انبار استاندارد Generation 2” ، به سادگی تنظیم کنید resource_constraint = standard_gen_2
بشر
-- Define the traditional warehouse for comparison
create or replace warehouse large_wh_gen1
warehouse_size = large;
-- Define the Gen2 warehouse
create or replace warehouse large_wh_gen2
resource_constraint = standard_gen_2
warehouse_size = large;
نمایش داده شد
ما از نمونه های نمونه برای TPC-DS ارائه شده به عنوان داده های نمونه Snowflake برای تأیید استفاده خواهیم کرد. با توجه به حجم داده ها ، snowflake_sample_data.tpcds_sf10tcl.store_returns
جدول دارای 2.9 میلیارد ردیف است ، و snowflake_sample_data.tpcds_sf10tcl.web_sales
جدول دارای 7.2 میلیارد ردیف است.
قبل از اجرای هر پرس و جو ، حافظه نهان پرس و جو را غیرفعال می کنیم و انبار را به حالت تعلیق در می آوریم تا اطمینان حاصل شود که از حافظه نهان استفاده نشده است.
- پرس و جو آماده سازی قبل از تأیید انبار سنتی
-- Disable query cache at the session level
alter session set use_cached_result = false;
-- Suspend and resume the traditional warehouse
alter warehouse large_wh_gen1 suspend;
alter warehouse large_wh_gen1 resume;
use warehouse large_wh_gen1;
-- Specify the target schema for the query
use schema snowflake_sample_data.tpcds_sf10tcl;
- پرس و جو آماده سازی قبل از تأیید انبار Gen2
-- Disable query cache at the session level
alter session set use_cached_result = false;
-- Suspend and resume the Gen2 warehouse
alter warehouse large_wh_gen2 suspend;
alter warehouse large_wh_gen2 resume;
use warehouse large_wh_gen2;
-- Specify the target schema for the query
use schema snowflake_sample_data.tpcds_sf10tcl;
with customer_total_return as
(select sr_customer_sk as ctr_customer_sk
,sr_store_sk as ctr_store_sk
,sum(SR_RETURN_AMT_INC_TAX) as ctr_total_return
from store_returns
,date_dim
where sr_returned_date_sk = d_date_sk
and d_year =1999
group by sr_customer_sk
,sr_store_sk)
select c_customer_id
from customer_total_return ctr1
,store
,customer
where ctr1.ctr_total_return > (select avg(ctr_total_return)*1.2
from customer_total_return ctr2
where ctr1.ctr_store_sk = ctr2.ctr_store_sk)
and s_store_sk = ctr1.ctr_store_sk
and s_state = 'NM'
and ctr1.ctr_customer_sk = c_customer_sk
order by c_customer_id
limit 100;
with wscs as
(select sold_date_sk
,sales_price
from (select ws_sold_date_sk sold_date_sk
,ws_ext_sales_price sales_price
from web_sales
union all
select cs_sold_date_sk sold_date_sk
,cs_ext_sales_price sales_price
from catalog_sales) x ),
wswscs as
(select d_week_seq,
sum(case when (d_day_name='Sunday') then sales_price else null end) sun_sales,
sum(case when (d_day_name='Monday') then sales_price else null end) mon_sales,
sum(case when (d_day_name='Tuesday') then sales_price else null end) tue_sales,
sum(case when (d_day_name='Wednesday') then sales_price else null end) wed_sales,
sum(case when (d_day_name='Thursday') then sales_price else null end) thu_sales,
sum(case when (d_day_name='Friday') then sales_price else null end) fri_sales,
sum(case when (d_day_name='Saturday') then sales_price else null end) sat_sales
from wscs
,date_dim
where d_date_sk = sold_date_sk
group by d_week_seq)
select d_week_seq1
,round(sun_sales1/sun_sales2,2)
,round(mon_sales1/mon_sales2,2)
,round(tue_sales1/tue_sales2,2)
,round(wed_sales1/wed_sales2,2)
,round(thu_sales1/thu_sales2,2)
,round(fri_sales1/fri_sales2,2)
,round(sat_sales1/sat_sales2,2)
from
(select wswscs.d_week_seq d_week_seq1
,sun_sales sun_sales1
,mon_sales mon_sales1
,tue_sales tue_sales1
,wed_sales wed_sales1
,thu_sales thu_sales1
,fri_sales fri_sales1
,sat_sales sat_sales1
from wswscs,date_dim
where date_dim.d_week_seq = wswscs.d_week_seq and
d_year = 1999) y,
(select wswscs.d_week_seq d_week_seq2
,sun_sales sun_sales2
,mon_sales mon_sales2
,tue_sales tue_sales2
,wed_sales wed_sales2
,thu_sales thu_sales2
,fri_sales fri_sales2
,sat_sales sat_sales2
from wswscs
,date_dim
where date_dim.d_week_seq = wswscs.d_week_seq and
d_year = 1999+1) z
where d_week_seq1=d_week_seq2-53
order by d_week_seq1;
نتایج تأیید
پرس و جو 1
به طور متوسط ، انبار Gen2 حدود 2.6 ثانیه سریعتر بود.
نوع انبار | 1 را اجرا کنید | 2 | 3 را اجرا کنید | 4 | 5 | میانگین |
---|---|---|---|---|---|---|
سنتی | 8.7s | 9.4s | 8.9s | 10s | 8.7s | 9.14s |
gen2 | 7.4s | 6.2s | 6.1s | 6.4s | 6.7s | 6.56s |
در اینجا پروفایل های پرس و جو نیز وجود دارد. می بینید که نسبت زمان صرف شده در عملیات کل برای انبار Gen2 کمتر است.
پرس و جو 2
به طور متوسط ، انبار Gen2 حدود 24 ثانیه سریعتر بود. من از تفاوت معنی داری در مقایسه با پرس و جو 1 تعجب کردم!
نوع انبار | 1 را اجرا کنید | 2 | 3 را اجرا کنید | 4 | 5 | میانگین |
---|---|---|---|---|---|---|
سنتی | 48s | 48s | 47s | 48s | 49s | 48.00s |
gen2 | 17s | 14 | 13s | 12s | 12s | 13.60s |
در اینجا پروفایل های پرس و جو نیز وجود دارد. می بینید که نسبت زمان صرف شده برای کل و پیوستن به عملیات برای انبار Gen2 کمتر است. از آنجا که Query 1 “4.09GB” و Query 2 اسکن شده ’66 .83 گیگابایتی ‘اسکن شده است ، به نظر می رسد با حجم اسکن بزرگتر ، مزایای عملکرد انبار Gen2 آشکارتر می شود.
پایان
Snowflake “انبارهای استاندارد Generation 2” جدید را با عملکرد بهبود یافته منتشر کرده است ، بنابراین من مقایسه سرعت را با انبارهای سنتی انجام دادم.
تفاوت در پرس و جو 2 به ویژه تعجب آور بود … با توجه به زمان پردازش بیش از سه برابر سریعتر (48.00 در مقابل 13.60s) ، مشخص است که انبار Gen2 بهره وری هزینه قابل توجهی بهتر را ارائه می دهد ، حتی با توجه به افزایش قیمت 1.35x (AWS) / 1.25x (Azure).
اگرچه من این بار فقط با دو نمایش داده شده آزمایش کردم ، در این محدوده تأیید ، احساس کردم که مزایای عملکرد به ویژه برای آن مشهود است نمایش داده شدگان با حجم اسکن بزرگ و کل قابل توجهی یا پردازش مشابهبشر
در حال حاضر ، آنها هنوز در مناطقی در ژاپن در دسترس نیستند ، اما این نتایج تأیید باعث می شود انتشار آنها بسیار پیش بینی شود. لطفاً هنگامی که در منطقه شما در دسترس هستند ، آنها را امتحان کنید!