成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Snowflake的三大性能調優策略

譯文
運維 數據庫運維
本文將從數據提取、數據轉換和最終用戶的查詢三個方面,和您討論如何優化Snowflake數據庫的查詢性能。

【51CTO.com快譯】作為一款分析平臺,Snowflake數據倉庫(Data Warehouse)以其超快的查詢性能蜚聲于業界。不過,我們對Snowflake既無法建立索引,又不可捕獲統計信息,更無法管理分區。那么,您該如何優化Snowflake數據庫,以達到更好的查詢性能呢?本文將介紹有關如何將系統調整到最大吞吐量的三個主要方面,即:數據提取、數據轉換和最終用戶的查詢。

影響Snowflake查詢性能的因素

作為技術人員,我們經常需要在對問題不甚了了的情況下,提出并實施解決方案。那么總的說來,我們在分析平臺上的性能問題時,通常會從如下三個方面入手:

i. 數據的加載速度:應具有能夠快速加載大量數據的能力。

ii. 數據的轉換:應具有最大化吞吐量,并將原始數據快速地轉換為適合查詢格式的能力。

iii. 數據的查詢速度:能夠最大程度地減少每次查詢的延遲,并盡快將結果提供給商業智能用戶。

1.Snowflake的數據加載

避免掃描文件

下圖展示了將數據批量加載到Snowflake處的最常見方法。該方法主要是將數據從本地(on-premise)系統傳輸到云端存儲,然后使用COPY命令加載到Snowflake中。

那么在復制數據之前,Snowflake會檢查文件是否已被加載。這是通過限制針對某個特定目錄的COPY,來實現最大化加載性能的第一種、也是最簡單的方法。如下代碼段展示了一系列COPY操作。

SQL

 

  1. -- Slowest method:  Scan entire stage 
  2. copy into sales_table 
  3.         from @landing_data 
  4.  pattern='.*[.]csv'
  5. -- Most Flexible method:  Limit within directory 
  6. copy into sales_table 
  7. from @landing_data/sales/transactions/2020/05 
  8.        pattern='.*[.]csv'
  9. -- Fastest method:  A named file 
  10. copy into sales_table 
  11. from @landing_data/sales/transactions/2020/05/sales_050.csv; 

 

可見,最快捷的方法是:命名一個特定的文件,并用通配符來體現其靈活性。當然,我們也可以在加載完畢后立即刪除目標文件。

調整虛擬倉庫和文件的大小

下圖展示了:在將大型數據文件加載到Snowflake中時,設計人員往往趨向于擴展出更大的虛擬倉庫,以加快整個加載過程。這是一個常見的誤區。實際上,在這種情況下,給倉庫擴容并不會帶來任何性能上的優勢。

也就是說,上面的COPY語句將打開一個10 Gb的數據文件,并使用某個線程在一個節點上順次加載數據,而其余的服務器則保持為空閑的狀態。通過基準測試,我們發現:通常情況下,加載的速率約為每分鐘9 Gb。我們可以設法提高該速度。

下圖給出了一種更好的方法--將單個10Gb文件分解為100個100 Mb的文件,以充分利用Snowflake的自動化并行處理功能。

2.Snowflake的轉換性能

延遲與吞吐量

雖然優化SQL是減少時間開銷的最有效方法,但是設計人員通常不太好把握時機。除了減少單個查詢的延遲,最大化吞吐量(即:在盡可能短的時間內實現數據交付的最大化)也是非常重要的。

下圖展示了典型的數據轉換模式,該模式會在虛擬倉庫中執行一系列的批處理作業。只有在前一項任務完成時,后一項任務才會開始:

我們很容易想到的解決方案是:將其擴展到更大的虛擬倉庫中,以更快地完成作業任務。不過,該方案往往會受到硬件資源的極限限制。此外,雖然此舉能夠提高查詢的性能,但是也會造成大量倉庫資源未被充分利用。

如上圖所示,Apache Airflow可被用于執行與Snowflake的多個獨立連接。其中,每個線程會針對同一虛擬倉庫去執行單個任務。隨著工作量的增加,如果可用資源出現不足的情況,作業任務就會開始排隊。為了分擔負載,我們可以將Snowflake的多集群功能,配置為能夠自動創建另一個相同大小的虛擬倉庫。

完成任務后,上述解決方案還會自動縮小為單個群集,并且能夠在完成了最長的作業后,將群集掛起。目前為止,這是獲取自動擴展與收縮能力的最有效方法。

如下SQL代碼段展示了創建多集群倉庫所需的命令,該倉庫將在60秒鐘的空閑時間后自動掛起。我們通過ECONOMYE擴展策略,來提高吞吐量,并節省單個查詢的等待時間。

SQL

 

  1.   -- Create a multi-cluster warehouse for batch processing 
  2.   create or replace warehouse batch_vwh with 
  3.   warehouse_size      = SMALL 
  4.  min_cluster_count   = 1 
  5.   max_cluster_count   = 10 
  6.  scaling_policy.     = economy 
  7.  auto_suspend.       = 60 
  8.  initially_suspended = true

 

3.調整Snowflake的查詢性能

選擇必要列

與許多其他數據分析平臺類似,Snowflake也用到了列式數據存儲。如下圖所示,該存儲被優化為僅獲取那些特定查詢所需的屬性,而非所有列:

 

在上圖中,該查詢只是在上百個列的表中獲取了其中的兩列。而傳統的行存儲則需要從磁盤中讀取所有列的數據。顯然,前者的效率要高出許多。

最大化緩存使用率

下圖展示了Snowflake內部架構的重要組成部分,它能夠在虛擬倉庫和云端服務層之間緩存數據。

商業智能儀表盤可以通過對同一查詢的重新執行,以刷新并顯示被更改以后的數據值。Snowflake通過返回最近24小時內查詢到的結果緩存(Results Cache)中的內容,來實現對此類查詢的自動化調優。

雖然數據也會被緩存到快速SSD(固態硬盤)上的虛擬倉庫中,但是不同于上述提到的結果緩存,虛擬倉庫是基于最近、最少使用原則,來保存原始數據,因此此類數據很可能已經過期了。不過,我們雖然無法直接調整虛擬倉庫中的緩存內容,但是可以通過如下步驟進行優化:

  • 獲取所需的屬性:避免在查詢中使用SELECT *,畢竟這會將所有數據的屬性,從數據庫存儲(Database Storage)中全量獲取到倉庫緩存(Warehouse Cache)中。此舉不僅速度緩慢,而且還可能導致那些不需要的數據也被填充到了倉庫緩存中。
  • 擴容:我們雖然應該避免通過擴容的方式,來應對特定的查詢,但是我們需要通過調整倉庫本身的大小,以提高整體的查詢性能。那些新增的服務器既可以分散突發任務的負擔,又能夠有效地增加倉庫緩存的大小。
  • 考慮數據集群:對于大小超過TB的數據表而言,請考慮通過創建集群鍵(cluster key,請參見--https://www.analytics.today/blog/tuning-snowflake-performance-with-clustering)的方式,最大程度地消除分區(partition)。此舉既可以提高單個查詢的性能,又可以返回較少的微分區(micro-partitions),從而充分地使用到倉庫緩存。

SQL

 

  1.   -- Identify potential performance issues 
  2.   select query_id                      as query_id 
  3.   ,      round(bytes_scanned/1024/1024)     as mb_scanned 
  4.  ,    total_elapsed_time / 1000          as elapsed_seconds 
  5.   ,      (partitions_scanned /  
  6.        nullif(partitions_total,0)) * 100 as pct_table_scan 
  7.  ,      percent_scanned_from_cache * 100   as pct_from cache 
  8.  ,    bytes_spilled_to_local_storage     as spill_to_local 
  9.  ,      bytes_spilled_to_remote_storage    as spill_to_remote 
  10.  from   snowflake.account_usage.query_history 
  11.  where (bytes_spilled_to_local_storage > 1024 * 1024 or 
  12.         bytes_spilled_to_remote_storage > 1024 * 1024 or 
  13.         percentage_scanned_from_cache < 0.1) 
  14.  and  elapsed_seconds > 120 
  15.  and    bytes_scanned > 1024 * 1024 
  16.  order by elapsed_seconds desc

 

上面的SQL代碼段可以幫助我們識別出,那些運行超過了2分鐘,并已經掃描了1兆數據量的查詢性能問題。如下兩個方面特別值得我們的關注:

  • 表掃描:在大型數據表中,如果PCT_TABLE_SCAN的值比較高,或MB_SCANNED的量比較大,則都表明查詢的選擇性比較差。因此,我們需要檢查查詢中的WHERE子句,并適當地考慮使用集群鍵。
  • 溢出:SPILL_TO_LOCAL或SPILL_TO_REMOTE中的任何值,都表明系統在小型虛擬倉庫上進行了大型的操作。因此,我們需要考慮將查詢移至更大的倉庫中,或適當地對現有的倉庫進行擴容。

總結

業界關于Snowflake的一個常見誤解是:直接擴容出更大的倉庫,是提高查詢性能的唯一方案。但這實際上并不一定是絕好的策略。我們需要厘清問題到底是發生在獲取數據環節、還是數據轉換部分、亦或最終用戶的查詢中。畢竟設計出可擴容的大型倉庫,要比單純的查詢調整,更適合提高數據庫的查詢性能。

原標題:Top 3 Snowflake Performance Tuning Tactics ,作者: John Ryan

【51CTO譯稿,合作站點轉載請注明原文譯者和出處為51CTO.com】

 

責任編輯:龐桂玉 來源: 51CTO
相關推薦

2013-03-18 15:07:10

Linux系統性能調優

2019-07-30 09:00:00

Snowflake數據庫性能調優

2011-03-10 14:40:54

LAMPMysql

2023-10-08 13:47:33

Docker容器

2010-09-27 09:23:42

JVM調優

2017-07-21 08:55:13

TomcatJVM容器

2023-08-16 11:39:19

高并發調優

2012-06-20 11:05:47

性能調優攻略

2021-03-04 08:39:21

SparkRDD調優

2011-05-20 15:02:01

Oracle性能調優

2011-11-14 10:28:23

2020-11-30 11:40:35

NginxLinux性能調優

2011-03-18 11:21:48

2014-12-01 11:30:06

PostgreSQL

2016-03-25 09:59:38

性能調優LinuxMySQL

2013-02-28 10:15:14

Ubuntu性能調優故障排查

2012-06-21 09:43:45

2024-12-04 15:49:29

2021-11-07 23:49:19

SQL數據庫工具

2022-09-14 22:58:58

Push 推薦Java 開發vivo
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 日本午夜免费福利视频 | 亚洲天堂色 | 精品96久久久久久中文字幕无 | 亚洲欧美国产一区二区三区 | 久久久九九 | 国产男女视频网站 | 91在线免费视频 | 亚洲精品日韩精品 | 成人午夜免费福利视频 | 亚洲欧美激情网 | 欧美人妇做爰xxxⅹ性高电影 | 日韩成人在线观看 | 国产精品性做久久久久久 | 午夜在线影院 | 91精品国产综合久久精品 | 国产精品日韩欧美一区二区 | 久草热视频 | 草草草草视频 | 亚洲精品乱码久久久久久按摩观 | 精品自拍视频 | 久久成人人人人精品欧 | 九九热久久免费视频 | 最新日韩精品 | 99视频在线免费观看 | 女女爱爱视频 | 国产九九精品视频 | 91精品国产91久久久久久最新 | 国产一区二区三区在线看 | 国产激情一区二区三区 | 91看国产 | 韩日一区| 一区二区三区四区不卡视频 | 国产1区2区 | 亚洲国产精品91 | 国产伦精品一区二区三区精品视频 | 日本久久网 | 亚洲精品自拍视频 | 日韩电影在线一区 | m豆传媒在线链接观看 | 日韩欧美在线视频 | 国产欧美日韩 |