SQL Server 效能調優(io)

2021-09-20 14:33:04 字數 3309 閱讀 3413

目錄

診斷磁碟io問題

常見的磁碟問題

容量替代了效能

負載隔離配置有問題

分割槽對齊配置有問題

總結

關於io

這一塊,前面的東西如磁碟大小,磁碟頻寬,隨機讀取寫入,順序讀取寫入,

raid

選擇,das

和san

比較都不講了。

直接就開始講關於

io問題的診斷和一般問題的處理。

io這一塊東西比較特殊,是資料庫的重點,因為資料庫一般都是

io密集型產品,為了讓

io速度更快,那麼資料庫會使用記憶體來代替磁碟。

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

資料庫要放在**。

負載隔離對

sqlserver 

儲存計畫來說是很重要的,最簡單的,也是很容被忽略的,為啥,因為不知道日誌檔案

和資料檔案的區別,不知道生產庫和

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

乙個扇區,

sqlserver 

的推薦分配單元大小是

64kb

但是ntfs

的大小則是

4kb,

根據推薦值

64kb

的大小就是

128個扇區。但是保留扇區是

63個,當發生

io的時候,

sqlserver 

讀取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不講,還是挺簡單的。

SQL Server 效能調優(io)

目錄 診斷磁碟 io問題 1常見的磁碟問題 1容量替代了效能 1負載隔離配置有問題 2分割槽對齊配置有問題 2總結 2 關於io這一塊,前面的東西如磁碟大小,磁碟頻寬,隨機讀取寫入,順序讀取寫入,raid 選擇,das 和san 比較都不講了。直接就開始講關於 io問題的診斷和一般問題的處理。io這...

sql server效能調優

我踩過的聽過的那些坑 第24 24周 資料庫維護 database maintenance 第23 24周 臨時資料庫 tempdb 第22 24周 等待和i o延遲統計 第21 24周 效能監控 pal工具 第20 24周 死鎖 deadlocking 第19 24周 鎖公升級 lock esca...

SQL Server效能調優系列

這是關於sql server調優系列文章,以下內容基本涵蓋我們日常中所寫的查詢運算的分解以及調優內容項,皆為原創.資料庫技術經驗篇 sql server調優系列基礎篇 sql server調優系列基礎篇 常用運算子總結 sql server調優系列基礎篇 聯合運算子總結 sql server調優系列...