SqlServer2005 性能調校之 利用Sql Server Profiler捕捉阻塞事件


  在SQLServer2005之前,從不同的來源可以得到很多可用的腳本,來捕獲哪些數據庫進程產生阻塞以及哪些進程被阻塞。然而,這些腳本需要手工執行。sp_blocker就是一個實例。

  然而,我們可以利用Sql Server Profiler ,來自動的捕獲被阻塞的進程。要用Sql Server Profiler捕獲這些進程,我們需要用到Sql Server Profiler 的Blocked Process Report事件。

.Blocked Process Report:這表示一個任務被阻塞的時間已經超出了特定時間長度。這個事件類不包含系統任務或等待非死鎖可檢測(non-deadlock-detectable)資源的任務。

  為了配置Sql Server Profiler,我們必須在SqlServer中為捕獲阻塞事件配置一個閾值。

現在我通過一個例子來實現,利用Sql Profiler捕捉阻塞事件:

一.配置Blocked Process Report
1.打開Sql Server Profiler工具 如圖:

2.新建跟蹤 如圖:

3.選擇要跟蹤的數據實例,如圖:

4.選擇跟蹤模板,為空白,如圖:

5.選擇Blocked Process Report 事件,如圖:

 

為了配置閾值及生產報表的頻度,可使用sp_configure命令來配置Blocked Process Report選項,默認情況下是不產生阻塞進程報表的。在代碼實例中,Blocked Process Report配置為5秒鍾報告一次阻塞事件,配置之后,再次執行sp_configure驗證是否配置成功:

--首先執行以下語句配置
sp_configure 'show advanced options',1
GO
RECONFIGURE
GO
sp_configure 'blocked process threshold',5
GO 
RECONFIGURE
GO
--然后再執行
sp_configure


如上圖,出現如紅色的行,證明配置成功了。

二.通過示例里數據庫PerformanceDB來實現阻塞事件做個實驗。

我們為實驗開兩個查詢窗口:

1.第一個窗口中,執行如下UPDATE語句,這段代碼有意令事務保持打開,從而可以觸發阻塞事件。

USE PerformanceDB
BEGIN TRAN
UPDATE dbo.Orders_new SET EmpID=445,Filler='b' WHERE orderId=430

2.第二個窗口中,執行相同條件的數據行。由於數據已經被UPDATE 事務阻塞,因此這個查詢將會被阻塞

SELECT * FROM dbo.Orders_new WHERE orderId=430 

  但滿足阻塞事件的閾值(在sp_configuer中為5秒)之后,Sql Profiler 會自動捕獲每個阻塞事件。對於Sql Profiler中捕獲的每個阻塞事件,Sql Profiler為阻塞者記錄下執行語句,它會精確的定位哪個進程是阻塞者以及哪個進程被阻塞。這些數據會以XML格式顯示,如圖(會5秒鍾捕捉一次):

  配置Sql Profiler來捕捉阻塞事件,使得性能監視以及調校任務比以前容易了很多,我們測量阻塞事件的發生頻度以及每天發生的阻塞事件數目,將會提供性能數據的定量檢測。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM