2021年11月27日 星期六

SQL Server 備份效能與磁碟效能分析 - I

本篇主要介紹關於磁碟測試與資料庫備份的調校,本篇提到許多的方式與從不同的面向來確認,所以特別整理成此篇,也希望可以提供給大家進行參考。

由於篇幅過長,所以拆成幾個部份進行分享。

磁碟的選擇有許多種,但在選擇磁碟種類時,通常可以選擇可用容量、IOPS與吞吐量等,但往往很多人只會關心到 IOPS ,但其實 IOPS 的值的高低,並不代表最後磁碟的效益,比如說如果要存取 1MB 的資料時,如果 Block Size 只有 64K 時,就需要 16 次的 IOPS 才可以完成,但是如果 Block Size 是 256K 時,只要 4 次的 IOPS 就可以完成,所以從這個例子上來看,我們關心的,真的就不只是 IOPS 的高低,而應該是要看最後的吞吐量才是重點。 

另外,許多的磁碟在底層會有合併寫入的動作,比如說每次寫入的 Block Size 為 64K, 而在實際底層則會合併 256K 後,才會進行一次的寫入動作,所以在 IOPS 的部份,也要注意是否有這樣的情況發生。

 本篇我已 AWS 的平台介紹當你選擇一個 EBS Volume 與 EC2 時,該如何進行評估,並且在最後的時候,如果運行 SQL Server 備份時,該如何進行備份效能的提升。 

資源資訊: EC2 - Z1D-6xlarge 

Instance vCPU Mem (GiB) Networking Performance (Gbps)*** SSD Storage (GB) 
z1d.6xlarge 24 192 10 1 x 900 NVMe SSD 

EBS: 
Volume Size: 4,096 GB 
IOPS: 8,000

我們從文件上來看,當 32,000 IOPS 以下時,吞吐量可以達到 500MB/s ,所以我們需注意相關的EC2類型並沒有相關的限制,在其他的類型,如上述的網路速度,10G 與 10G up 是不同的,10G 是穩定在 10G 的傳輸速度,但 10G 則是可以維持在10G一段時間,我們簡稱信用額度與爆衝值,所以二者在長期的一段時間上來看,是有不同的,詳細的說明,可以參考文件[1]。 

另外一個要注意的重點就是每一種 Instance Type 都會有不同的限制,除了上述提到的部份,還有 Baseline IOPS與Maximum IOPS,如 z1d.large 的 Baseline IOPS 只有 3,333, 而 Maximum IOPS 有13,333, 所以如果你建立一顆 IOPS 8000的 Volume 在 z1d.large 上時,你基本只能到3333,但可以最大到13,333, 但這個最大值是在24小時內,最多只能維持30分鐘,超過30分鐘,就只能執行在 Baseline IOPS 左右了,所以還是有限制存在的,也是我選擇一個較大的 Instance Type 類型進行測試的原因[1]。 

現在我們進入主題,那我們該如何進行 Volume 的測試,根據 AWS 的官網文件,我們可以透過 DiskSpd 與 CrystalDiskMark 二個軟體,但我二個都測試過後,我其實比較喜歡使用 DiskSpd, 另外在測試前,請記得檢查電源管理中的模式是否設定為高效能,這個在 AWS 的 Windows 中是設定為預設啟用,但如果你設定為省電模式時,效能我有比較過,真的差很多,這又是一個故事了(血淚@@). 

Control -> Hardware -> Power Options -> Preferred Plans -> High Performance 


首先在測試前,我要提到一個重要的觀念,當在測試前,如果我們希望測試出預期的IOPS與Throughput 時,有二個重要的要素,一個是你的線程 (Thread),而另一個則是你的 BlockSize,所以後續的測試,我們來看這二者間的關係。

首先我們先下載 DiskSpd 的工具,然後再我透過下列的指令進行。

diskspd -b8K -d30 -t1 -h -r -w40 -L -Z1G -c20G D:\iotest.dat

b: BlockSize
d: 測試時間
t: Thread
w: 讀寫入率
c: 預計測試的檔案大小

D:\ 這就是我掛上的 EBS Volume,如上述提到的。

下列是我進行的測試,我主要分成不同的 BlockSize 與 Thread 進行,並將相關的測試結果整理如下。






從上述可以看出當如果 Thread 數太低時,會造成無法拉高整體的 IOPS ,但當 BlockSize 設定夠高時,的確是可以拉高整體的 Throughput,所以可以透過上圖的測試找出實際二者之間的關係,這個對後續在使用或效能調整時是很重要的,後續我再以 SQL Server 為案例分享該如何進行。


參考連結: 
============ 
[1]. Amazon EC2 Instance Types 
[2]. Benchmark EBS volumes

沒有留言:

張貼留言