利用sys.sysprocesses檢查SqlServer的阻塞和死鎖
更新時間:2011年10月25日 15:11:33 作者:
Sys.SysProcesses 系統(tǒng)表是一個很重要的系統(tǒng)視圖,主要用來定位與解決Sql Server的阻塞和死鎖
MSDN:包含正在 SQL Server 實例上運行的進(jìn)程的相關(guān)信息。這些進(jìn)程可以是客戶端進(jìn)程或系統(tǒng)進(jìn)程。
視圖中主要的字段:
1. Spid:Sql Servr 會話ID
2. Kpid:Windows 線程ID
3. Blocked:正在阻塞求情的會話 ID。如果此列為 Null,則標(biāo)識請求未被阻塞
4. Waittype:當(dāng)前連接的等待資源編號,標(biāo)示是否等待資源,0 或 Null表示不需要等待任何資源
5. Waittime:當(dāng)前等待時間,單位為毫秒,0 表示沒有等待
6. DBID:當(dāng)前正由進(jìn)程使用的數(shù)據(jù)庫ID
7. UID:執(zhí)行命令的用戶ID
8. Login_time:客戶端進(jìn)程登錄到服務(wù)器的時間。
9. Last_batch:上次執(zhí)行存儲過程或Execute語句的時間。對于系統(tǒng)進(jìn)程,將存儲Sql Server 的啟動時間
10.Open_tran:進(jìn)程的打開事務(wù)個數(shù)。如果有嵌套事務(wù),就會大于1
11.Status:進(jìn)程ID 狀態(tài),dormant = 正在重置回話 ; running = 回話正在運行一個或多個批處理 ; background = 回話正在運行一個后臺任務(wù) ; rollback = 會話正在處理事務(wù)回滾 ; pending = 回話正在等待工作現(xiàn)成變?yōu)榭捎?; runnable = 會話中的任務(wù)在等待獲取 Scheduler 來運行的可執(zhí)行隊列中 ; spinloop = 會話中的任務(wù)正在等待自旋鎖變?yōu)榭捎?; suspended = 會話正在等待事件完成
12.Hostname:建立鏈接的客戶端工作站的名稱
13.Program_name:應(yīng)用程序的名稱,就是 連接字符串中配的 Application Name
14.Hostprocess:建立連接的應(yīng)用程序在客戶端工作站里的進(jìn)程ID號
15.Cmd:當(dāng)前正在執(zhí)行的命令
16.Loginame:登錄名
應(yīng)用實例:
1. 檢查數(shù)據(jù)庫是否發(fā)生阻塞
先查找哪個鏈接的 blocked 字段不為0。如 SPID53的blocked 字段不為0,而是 52。SPID 52 的 blocked 為0,就可以得出結(jié)論:此時有阻塞發(fā)生,53 被 52 阻塞住了。如果你發(fā)現(xiàn)一個連接的 blocked 字段的值等于它自己,那說明這個連接正在做磁盤讀寫,它要等自己的 I/O 做完。
2. 查找鏈接在那個數(shù)據(jù)庫上
檢查 dbid 即可。得到 dbid,可以運行以下查詢得到數(shù)據(jù)庫的名字:
Select name,dbid from master.sys.sysdatabases
視圖中主要的字段:
1. Spid:Sql Servr 會話ID
2. Kpid:Windows 線程ID
3. Blocked:正在阻塞求情的會話 ID。如果此列為 Null,則標(biāo)識請求未被阻塞
4. Waittype:當(dāng)前連接的等待資源編號,標(biāo)示是否等待資源,0 或 Null表示不需要等待任何資源
5. Waittime:當(dāng)前等待時間,單位為毫秒,0 表示沒有等待
6. DBID:當(dāng)前正由進(jìn)程使用的數(shù)據(jù)庫ID
7. UID:執(zhí)行命令的用戶ID
8. Login_time:客戶端進(jìn)程登錄到服務(wù)器的時間。
9. Last_batch:上次執(zhí)行存儲過程或Execute語句的時間。對于系統(tǒng)進(jìn)程,將存儲Sql Server 的啟動時間
10.Open_tran:進(jìn)程的打開事務(wù)個數(shù)。如果有嵌套事務(wù),就會大于1
11.Status:進(jìn)程ID 狀態(tài),dormant = 正在重置回話 ; running = 回話正在運行一個或多個批處理 ; background = 回話正在運行一個后臺任務(wù) ; rollback = 會話正在處理事務(wù)回滾 ; pending = 回話正在等待工作現(xiàn)成變?yōu)榭捎?; runnable = 會話中的任務(wù)在等待獲取 Scheduler 來運行的可執(zhí)行隊列中 ; spinloop = 會話中的任務(wù)正在等待自旋鎖變?yōu)榭捎?; suspended = 會話正在等待事件完成
12.Hostname:建立鏈接的客戶端工作站的名稱
13.Program_name:應(yīng)用程序的名稱,就是 連接字符串中配的 Application Name
14.Hostprocess:建立連接的應(yīng)用程序在客戶端工作站里的進(jìn)程ID號
15.Cmd:當(dāng)前正在執(zhí)行的命令
16.Loginame:登錄名
應(yīng)用實例:
1. 檢查數(shù)據(jù)庫是否發(fā)生阻塞
先查找哪個鏈接的 blocked 字段不為0。如 SPID53的blocked 字段不為0,而是 52。SPID 52 的 blocked 為0,就可以得出結(jié)論:此時有阻塞發(fā)生,53 被 52 阻塞住了。如果你發(fā)現(xiàn)一個連接的 blocked 字段的值等于它自己,那說明這個連接正在做磁盤讀寫,它要等自己的 I/O 做完。
2. 查找鏈接在那個數(shù)據(jù)庫上
檢查 dbid 即可。得到 dbid,可以運行以下查詢得到數(shù)據(jù)庫的名字:
Select name,dbid from master.sys.sysdatabases
相關(guān)文章
解析關(guān)于SQL語句Count的一點細(xì)節(jié)
本篇文章是對關(guān)于SQL語句Count的一點細(xì)節(jié)進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-06-06
SQL?Server查詢結(jié)果導(dǎo)出到EXCEL表格的圖文教程
相信大家常常會遇到將SqlServer查詢結(jié)果導(dǎo)出到Excel的問題,下面這篇文章主要給大家給大家介紹了SQL?Server查詢結(jié)果導(dǎo)出到EXCEL表格的相關(guān)資料,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下2022-08-08
sqlserver 動態(tài)創(chuàng)建臨時表的語句分享
開發(fā)業(yè)務(wù)需求,需要對一個表作數(shù)據(jù)分析,由于數(shù)據(jù)量較大,而且分析時字段會隨條件相應(yīng)變化而變化2012-01-01
SQL?Server?Agent?服務(wù)啟動后又停止問題
這篇文章主要介紹了SQL?Server?Agent?服務(wù)啟動后又停止問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-04-04
批量更新數(shù)據(jù)庫所有表中字段的內(nèi)容,中木馬后的急救處理
這里對非ntext,nvarchar,image字段有效,這些字段要別外處理. 這下面的內(nèi)容,部分我是自己用過的.對于ntext等字段大于8000的我沒有試過.一起寫在這里2009-09-09

