第二章 Disk I/O Configuration。
對於SQL Server,磁碟I/O的配置主要針對資料庫工作負載,考慮和權衡兩個點:
1. 磁碟容量VS磁碟輸送量
一個1TB的庫放在一塊2TB的磁碟上,容量是夠了,但是磁碟輸送量能滿足工作負載嗎?通常會使用RAID,合適的RAID層級也是容量與輸送量權衡的一種結果。
2. 順序IO VS. 隨機I/O
資料庫記錄檔操作通常是順序IO,資料檔案通常隨機IO會多很多。而磁碟的順序IO效能要高於隨機IO,因為前者需要移動磁頭,後者不需要。
以工作負載不同的IO方式在儲存上對資料庫做隔離就很重要了。
選擇正確的RAID層級(Chose the right RAID level)
使用RAID的好處,通常有:1. 增強IO效能 2. 增加IO輸送量 3. 增加單個邏輯裝置的可用容量 4. 資料冗餘
而選擇何種RAID層級,主要取決於工作負載的類型。像資料庫記錄檔以順序寫為主,就要考慮RAID的寫入效能,資料檔案需要在讀、寫和可用容量間做權衡。
RAID 0:提供資料條帶化和高效的IO效能,但是沒有資料冗餘保護,所以SQL Server一般不採用。
RAID 1: 提供完全的資料冗餘保護,較低IO效能,成本較高。可以考慮放置單個的交易記錄檔。如果放置多個交易記錄檔,則每個記錄檔的順序IO操作交織在一起,
就變成了隨機IO,效能會下降。
RAID 5(6): 提供資料冗餘保護,且容量損失少,高效讀效能。但是寫效能相對較低。每次某塊資料更新時,則要重新計算和更新奇偶效驗資料。當某塊磁碟失效,整個RAID的效能會急劇下降,
因為讀取失效磁碟上的資料,需要經過效驗計算得到。RAID6是RAID5的擴充,只是存有兩份效驗資料在不同的磁碟上,但可用容量只有磁碟總量的一半且至少4塊盤。
這樣,還不如用RAID10。可以考慮放置讀多於寫的資料檔案。
RAID10: 先組成RAID1,再用RAID1組成RAID0。容量只有磁碟總容量的一半,提供資料冗餘保護,寫入效能相對較快。最多允許每組RAID1失效一塊磁碟。
比相同數量的磁碟RAID5讀效能要慢一些。
RAID01: 先組成RAID0,再用RAID0組成RAID1。最多隻允許其中一組RAID0失效。當任意一塊磁碟失效,整個RAID01也失效了。資料丟失風險高於RAID10。
除了磁碟本身的硬性效能外,還有一些很重要因素影響其效能:
1. RAID控制器的緩衝大小和配置 2. RAID條帶大小 3. 分區對齊 4. NTFS格式化的檔案簇大小
一定要做基準測試來確定IO子系統的配置正確性,不能迷戀於理論上的資料。推薦的基準測試載入器SQLIO和IOmeter,推薦SQL Server壓力測試工具SQLIOSim
資料檔案、記錄檔和tempdb最好物理隔離。
資料檔案:讀遠多於寫、唯讀或者寫延遲不影響系統效能的情況下可置於RAID5或者RAID6.相反則可以考慮RAID10.
記錄檔:可以考慮RAID1和RAID10。多個寫入頻繁的記錄檔置於同一個物理磁碟上或者磁碟片段會加劇寫入壓力。
tempdb: 它的功能決定它是寫密集型資料庫,最好與使用者庫物理隔離,置於raid1或者RAID10。當然也可以置於SSD和RAMDisk上。
可以為tempdb建立多個相同配置的資料檔案,減少系統頁急用問題。
DAS VS. SAN
DAS簡單附加即可使用,效能可預估,也不需要額外經驗維護,同時也沒有SAN的各種進階功能(如支援叢集、磁碟陣列鏡像和基於陣列的複製)。相對便宜。
SAN適用於企業級儲存,相對較貴。但它是用於最佳化儲存使用方式,而不一定是最佳化儲存效能。
對故障診斷需要額外的儲存經驗或者依賴於外部資源(SAN管理員或者供應商)。
診斷磁碟IO問題
兩個比較重要的效能計數器Avg. Disk sec/Read和Avg. Disk sec/Write。
一般它們的值<10ms=好,10~20ms=有點慢,20~50ms=很慢,>50ms=存在效能問題。
IO瓶頸通常還有PAGEIOLATCH_*, ASYNC_IO_COMPLETION, IO_COMPLETION, 或者 WRITELOG等待類型的嚴重等待。
常見的磁碟I/O問題
診斷磁碟問題前,一定要確認系統不存其它方面的瓶頸。
1. 只考慮容量而非效能
一個1TB的OLTP庫放在一塊2TB的磁碟上,容量滿足,效能通常滿足不了。SAN網路和磁碟通常不會是SQL Server獨佔的,SQL Server也不知道LUN是否是獨立的物理磁碟。
很多時候是與其它應用共用的,故障診斷時就要特別關注IO指標是否只是SQL Server造成的。
2. 錯誤的負載隔離
資料檔案、記錄檔和tempdb要物理隔離,因為IO方式大相徑庭。還要特別注意SAN分配給SQL Server的儲存單元是否與其它應用物理隔離。
3. 錯誤的分區對齊
參照Storage Area Network (SAN) for DBA's
4. 錯誤的SAN頻寬配置
不要迷戀理論值或者供應商提供的資料,一定要經過基準測試,確保SAN的效能滿足工作負載,尤其是多路SAN。
總結
對於儲存,一定要有清晰的規劃,一定要經過測試(基準和壓力)。