SQL Server磁盤I/O性能分析

 

SQL Server中的I/O操做類型:前端

1.對於內存中沒有緩存的數據,第一次訪問時須要將數據從所在的頁面從數據文件中讀取到內存中數據庫

2.在任何Insert/Update/Delete提交前,SQL Server須要保證日誌記錄可以寫入到日誌文件中緩存

3.當SQL Server作Checkpoint時,須要將內存緩衝區中已經發生修改的數據頁面同步到硬盤的數據文件中,通常一分鐘一次Checkpoint。若是修改較多,頻率高一些,寫的數量 和上次checkpoint依賴發生的數據修改量有直接關係性能

4.當SQL Server Buffer Pool發生壓力時,會觸發Lazy Writer,主動將內存裏的一些好久沒有使用過的數據頁面和執行計劃清空。若是這些頁面上發生的修改還未由checkpoint寫回硬盤,Lazy Writer會將其寫回spa

5.一些特殊操做,例如DBCC Checkdb、Reindex、Updata Statistics、Backup等,會帶來較大的硬盤讀寫。這些操做應該給都發生在一些固定的時間段日誌

 

 

數據庫級別的I/O影響:
1.Recovery Interval(sp_configure)控制着SQL Server多久進行一次checkpoint索引

   checkpoint pages/sec(Buffer Manager)呈週期性上升事務

   MSSQL:SQL Statistics-Batch Requests/sec:每秒鐘完成的批處理(batch)數目內存

   MSSQL:Databases-Active Transactions:SQL Server裏打開的,尚未提交的事物數目同步

2.數據/日誌文件的自動增加和收縮

3.數據文件裏面碎片程度:頁面碎片越多,SQL Server就須要讀取和寫入更多的頁面,增長硬盤讀寫量

4.表格上的索引結構

5.數據文件和日誌文件分開放在不一樣的磁盤上。若是可能的話,日誌文件要放在寫入速度較快的磁盤上

6.一個數據文件組是否有多個文件,而且放在不一樣的磁盤上。可是對於日誌文件,在一個時間點,SQL Server只會寫一個日誌文件,因此在不一樣磁盤上建立多個日誌文件對性能沒有任何提升

 

系統級別的I/O影響:
%Disk Time:只觀察其曲線趨勢,值自己沒有參考價值

%idle Time:磁盤處於空閒狀態百分比。當磁盤處於空閒狀態時,值爲100%。當磁盤滿負荷操做時,值爲0,因此能夠根據該值反推%Disk Time

Disk Bytes/sec:每秒鐘磁盤讀和寫總量(磁盤的吞吐量)。須要先確認該磁盤的最大讀寫速度纔有參考價值,能夠看出是否已經達到了該磁盤的讀寫上限

Avg.disk sec/transfer:磁盤每一次讀或寫的動做所花的平均時間

Avg.Disk Queue Length:發出的磁盤操做正在等待被磁盤處理的請求數目。理論上講,這個值不該該長時間大於2

Current Disk Queue Length:當前正在等待被磁盤處理的請求數目

當Avg.Disk Queue Length高時,須要分別觀察Disk Bytes/sec和Avg.disk sec/transfer哪一個計數器已經達到了其最大值

 

SQL Server中的性能計數器

Buffer Manager:

Page Reads/sec和Page Writes/sec:每秒鐘讀寫了多少頁面。瞭解到因爲Buffer Pool的行爲帶來了多少磁盤讀寫

Lazy Writes/sec:Lazy Writer爲了清空Buffer Pool每秒鐘作了多少頁面寫入操做

Checkpoint Writes/sec:每秒鐘從Buffer Pool裏寫入到磁盤上的Dirty Page數目

Freespace Scans/sec:在堆(heap)結構裏找可以使用的空間。對於沒有彙集索引的表格,SQL Server會以堆的形式存儲。若是該值很高,應該多創建一些彙集索引

Full Scans/sec:每秒鐘SQL Server作全表掃描數目,該值越小越好

Databases(Log Activity):

Log Flush Wait Time:寫入日誌的動做曾經由於磁盤來不及響應而遇到的等待時間,會致使前端的事務不能提交,會嚴重影響SQL Server性能。該值應該在絕大多數時間都爲0

Log Flush Waits/sec:在每秒提交的事務裏,有多少個事務曾經等待過日誌寫入完成。理想狀況下,日誌寫入應該馬上完成,不須要等待。

相關文章
相關標籤/搜索