SQL Server 2008 I/O性能監控

原文首發於it168,鏈接見http://tech.it168.com/a2011/0221/1158/000001158998.shtml

  I/O性能診斷

  SQL Server性能非常依賴於I/O子系統。除非你的數據庫適合物理內存,SQL Server經常地會有數據庫頁面進出緩存池。這樣就發生了實質的I/O流量。同樣,在事務被明確的提交前,日誌記錄需要寫入磁盤。SQL Server爲各種目的可以使用tempdb,例如存儲中間結果,排序,保持行的版本或其他。所以好的I/O子系統對於SQL Server性能非常重要。

  I/O的性能取決於以下一些方面:

  磁盤類型包括IDE、SATA、SCSI、SAS、Fibre Channel drive等類型,其中IDE、SATA一般用在個人電腦上。

  同時爲了在數據安全、數據性能和數據容量之間做平衡,又發展出了RAID,RAID是一種把多塊獨立的磁盤按不同的方式組合起來形成一個硬盤組,從而提供比單個硬盤更高的存儲性能和提高數據備份技術。RAID主要包括RAID0~RAID7等幾個規範,常用的RAID類型爲RAID0、RAID1、RAID5,RAID10。

   此外根據連接方式不同還可以分爲:Direct Attached Storage(DAS),Storage Area Networks(SAN),Fibre Channel Storage Area Networks,iSCSI Storage Area Networks。

  吞吐量和IOPS指標

  吞吐量主要取決於陣列的架構,光纖通道的大小以及硬盤的個 數。陣列的架構與每個陣列不同,但也都存在內部帶寬,不過在一般情況下,內部帶寬都設計的很充足,不是瓶頸所在。其次是光纖通道對數據流量的影響,爲了達 到1GB/s的數據流量要求,我們必須使用1GB*8=8GB的光纖卡,也可以用4塊2GB的光纖卡。其實是硬盤的個數,可以參考以下指標計算方式,假設 爲了滿足1GB的數據流量要求,所必須的磁盤個數。

SQL Server 2008性能監控

  IOPS(Input/Output Operations Per Second),即每秒進行讀寫(I/O)操作的次數,多用於數據庫等場合,衡量隨機訪問的性能。

  決定IOPS的主要取決於陣列的算法、cache命中率以及磁盤個數。Cache命中率取決於數據的分佈、Cache Size的大小、數據的訪問規則,以及Cache的算法。

   磁盤的限制,每個磁盤能處理的IOPS是有限制的,通常情況下每個磁盤的最大IOPS是確定的,比如IDE和SATA硬盤的IOPS大致在100以內 (我們可以使用HD Tune工具進行IOPS測試),而且IOPS的測試結果與測試方式(例如隨機讀寫和順序讀寫、讀和寫的比例、傳輸數據庫尺寸的大小、磁盤的數量)有很大 關係,儘管如此磁盤的IOPS指標還是對我們評估磁盤的壓力和是否能夠滿足系統的性能需求有着一定的指導意義。

  假設現在的業務需求是10000 IOPS,120塊SCSI磁盤,那麼在不同的Cache命中率、不同的讀寫比例情況下,不同的RAID級別對每塊磁盤的IOPS需求是多少呢?

  Raid 0 –每個磁盤的I/O計算= (讀+寫) /磁盤個數

  Raid 1 --每個磁盤的I/O計算= [讀+(2*寫)]/2

  Raid 5 --每個磁盤的I/O計算= [讀+(4*寫)]/磁盤個數

  Raid 10 --每個磁盤的I/O計算= [讀+(2*寫)]/磁盤個數

  此外當吞吐率超過85%時,會出現I/O瓶頸,因此單個磁盤IOPS計算規則爲

  ((10000*(1-Cache命中率)*讀比例)+10000*寫比例*RAID係數)/磁盤數/0.85

SQL Server 2008性能監控

  即每塊磁盤的IOPS大約在200左右即可滿足RAID0、RAID5、RAID10的要求。

  此外,關於SQL Server的部署一般規劃和建議如下:

  操作系統和SQL Server單獨構建在RAID1的磁盤鏡像上;出於高速和安全的原則,日誌文件需要單獨安裝在RAID1/RAID10上;tempdb文件最好放在RAID0上,而數據文件出於安全、性能、容量、成本的綜合考慮一般則使用RAID5。

  在微軟的technet上有一篇關於存儲的最佳實踐top 10(Storage Top 10 Best Practices)是這麼要求的:

  1. 瞭解SQL Server的IO特性和應用系統的IO需求規格。

  2. 使用更多/更快的磁盤驅動以獲取良好的性能

  3. 不要過度優化存儲,簡單的設計通常能夠提供良好的性能和靈活性。

  4. 部署前驗證配置。可以用SQLIO之類的工具模擬測試。

  5. 始終把日誌文件放在RAID10/RAID1上。

  6. 把日誌文件和數據文件從物理磁盤上隔離。

  7. 認真考慮TempDB的數據配置。

  8. 在數據文件的數量和CPU的容量之間平衡。

  9. 不要忽視SQL Server的基礎。

  10.不要忽視存儲的配置

  對於SQL Server佔用I/O資源的監控主要集中在磁盤響應時間、隊列長度、磁盤讀寫和傳輸速度上。下面提供了幾種對象、計數器和相應的閾值及描述。

SQL Server 2008性能監控

  Sys.dm_io_virtual_file_stats能夠返回數據和日誌文件的 I/O 統計信息,這也爲我們從整體上了解各磁盤和數據庫的吞吐量和等待時間有了一個直觀的認識。

SQL Server 2008性能監控

   sys.dm_io_pending_io_requests則對應SQL Server 中每個掛起的 I/O 請求,我們將sys.dm_io_pending_io_requests和Sys.dm_io_virtual_file_stats關聯起來,則可以 查看當前是否有等待的IO,然後進行去定位和識別。

SQL Server 2008性能監控

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章