目錄sql
診斷磁盤io問題數據庫
常見的磁盤問題windows
容量替代了性能網絡
負載隔離配置有問題ide
分區對齊配置有問題工具
總結sqlserver
關於io這一塊,前面的東西如磁盤大小,磁盤帶寬,隨機讀取寫入,順序讀取寫入,raid選擇,DAS和SAN比較都不講了。post
直接就開始講關於io問題的診斷和通常問題的處理。性能
io這一塊東西比較特殊,是數據庫的重點,由於數據庫通常都是io密集型產品,爲了讓io速度更快,那麼數據庫會使用內存來代替磁盤。ui
io出現問題,可能會連帶其餘資源的問題。cpu,內存,網絡。因此在分析問題的時候對數據庫結構的瞭解是必不可少的。
通常使用的工具就是perfmon特別是 physical disk\disk reads/sec 和 physical disk\ disk writes/sec。
對於這2個性能指標有一個閥值的表格:
• Less than 10 ms = good performance
• Between 10 ms and 20 ms = slow performance
• Between 20 ms and 50 ms = poor performance
• Greater than 50 ms = significant performance problem.
還有一些就是 PAGEIOLATCH_*,ASYNC_IO_COMPLETION,IO_COMPLETION,WRITELOG這些等待事件。關於這些 wait event的查詢能夠看SQL Server 性能調優(方法論)
在此以前,咱們先要排除集中情況就是,接下來討論的和miss index,較差性能的寫入,多餘的io無關。單純從io層面討論io的配置問題。
io的配置問題最多見的有如下4中狀況:
• 容量替代了性能
• 負載隔離配置有問題
• 分區對齊配置有問題
• SAN的帶寬配置有問題(這個SAN 小弟不是很熟悉,那麼就不討論了,若是想了解狀況能夠查看原書:《Troubleshooting SQL Server: A Guide for the Accidental DBA》)
一個800g的數據庫能夠存放在1個1t的磁盤中,也能夠是經過raid拆分爲多個磁盤,固然一個磁盤的性能明顯比多個磁盤的要差。
可能讀到這裏不太清楚負載隔離是什麼,簡單的說就是數據文件要放在哪裏,日誌文件要放在哪裏,tempdb數據庫要放在哪裏。
負載隔離對sql server 存儲計劃來講是很重要的,最簡單的,也是很容被忽略的,爲啥,由於不知道日誌文件和數據文件的區別,不知道生產庫和tempdb之間的關係和區別。日誌文件是順序寫入的,數據文件是隨即讀寫的,若是你把2個放在同一個磁盤或者raid裏面,要日誌文件的順序讀寫算啥了。都體現不出優勢來了。
因此日誌文件和數據文件要分開無疑。
有一片相關的文章:《Disk Partition Alignment Best Practices for SQL Server》,不少人都不知道分區對齊是什麼概念,可是又20%-30%的性能都浪費在上面。
關鍵的問題就是有63個保留扇區被用來MBR。當windows建立分區的時候就會保留31.5kb的空間供MBR使用。這樣就照成了不對齊,和raid的條帶單元代銷不對齊了。raid條帶的單元大小是從4kb到512kb的。
多數磁盤一個扇區的大小是512B,可是 ssd是4kb一個扇區,sql server 的推薦分配單元大小是64kb可是ntfs的大小則是4kb,根據推薦值64kb的大小就是128個扇區。可是保留扇區是63個,當發生io的時候,sql server 讀取128個扇區,那麼就會發生2次io,從第一個磁盤中讀取65個扇區,從第二個磁盤中讀取63個扇區。爲了阻止,windows 的保留空間變爲了1mb,那麼就能包容全部的raid單元條帶的大小。可是windows2008如下的版本默認是不對齊的。就須要命令行下調用diskpar或者diskpart來顯示的對齊。
查看是否對齊的惟一方法就是wmic命令:
wmic partition get BlockSize, StartingOffset, Name, Index
若是用Startingofferset/raid條帶大小,若是爲整數那麼就是對齊的不然就是不對齊的。
分區保留扇區只能在磁盤的建立分區的時候設置。
create partition primary align=64
分區對齊後,能夠給分區分配盤符而且在格式化的時候指定分配單元大小,這樣就避免了沒對齊帶來的性能衝擊。
關於隔離的內容我的以爲講得不是很深刻,你們能夠去看原書:《Disk Partition Alignment Best Practices for SQL Server》第二章的Choosing the Right RAID Level下的Workload considerations小節,詳細描述了關於數據文件,日誌文件,tempdb的特色,並建議使用哪一種raid 比較合適。
這裏的io問題主要是講io的配置問題。io的配置若是撇開SAN不講,仍是挺簡單的。