利用sys.sysprocesses檢查SqlServer的阻塞和死鎖
更新時(shí)間:2011年10月25日 15:11:33 作者:
Sys.SysProcesses 系統(tǒng)表是一個(gè)很重要的系統(tǒng)視圖,主要用來(lái)定位與解決Sql Server的阻塞和死鎖
MSDN:包含正在 SQL Server 實(shí)例上運(yùn)行的進(jìn)程的相關(guān)信息。這些進(jìn)程可以是客戶端進(jìn)程或系統(tǒng)進(jìn)程。
視圖中主要的字段:
1. Spid:Sql Servr 會(huì)話ID
2. Kpid:Windows 線程ID
3. Blocked:正在阻塞求情的會(huì)話 ID。如果此列為 Null,則標(biāo)識(shí)請(qǐng)求未被阻塞
4. Waittype:當(dāng)前連接的等待資源編號(hào),標(biāo)示是否等待資源,0 或 Null表示不需要等待任何資源
5. Waittime:當(dāng)前等待時(shí)間,單位為毫秒,0 表示沒(méi)有等待
6. DBID:當(dāng)前正由進(jìn)程使用的數(shù)據(jù)庫(kù)ID
7. UID:執(zhí)行命令的用戶ID
8. Login_time:客戶端進(jìn)程登錄到服務(wù)器的時(shí)間。
9. Last_batch:上次執(zhí)行存儲(chǔ)過(guò)程或Execute語(yǔ)句的時(shí)間。對(duì)于系統(tǒng)進(jìn)程,將存儲(chǔ)Sql Server 的啟動(dòng)時(shí)間
10.Open_tran:進(jìn)程的打開(kāi)事務(wù)個(gè)數(shù)。如果有嵌套事務(wù),就會(huì)大于1
11.Status:進(jìn)程ID 狀態(tài),dormant = 正在重置回話 ; running = 回話正在運(yùn)行一個(gè)或多個(gè)批處理 ; background = 回話正在運(yùn)行一個(gè)后臺(tái)任務(wù) ; rollback = 會(huì)話正在處理事務(wù)回滾 ; pending = 回話正在等待工作現(xiàn)成變?yōu)榭捎?; runnable = 會(huì)話中的任務(wù)在等待獲取 Scheduler 來(lái)運(yùn)行的可執(zhí)行隊(duì)列中 ; spinloop = 會(huì)話中的任務(wù)正在等待自旋鎖變?yōu)榭捎?; suspended = 會(huì)話正在等待事件完成
12.Hostname:建立鏈接的客戶端工作站的名稱(chēng)
13.Program_name:應(yīng)用程序的名稱(chēng),就是 連接字符串中配的 Application Name
14.Hostprocess:建立連接的應(yīng)用程序在客戶端工作站里的進(jìn)程ID號(hào)
15.Cmd:當(dāng)前正在執(zhí)行的命令
16.Loginame:登錄名
應(yīng)用實(shí)例:
1. 檢查數(shù)據(jù)庫(kù)是否發(fā)生阻塞
先查找哪個(gè)鏈接的 blocked 字段不為0。如 SPID53的blocked 字段不為0,而是 52。SPID 52 的 blocked 為0,就可以得出結(jié)論:此時(shí)有阻塞發(fā)生,53 被 52 阻塞住了。如果你發(fā)現(xiàn)一個(gè)連接的 blocked 字段的值等于它自己,那說(shuō)明這個(gè)連接正在做磁盤(pán)讀寫(xiě),它要等自己的 I/O 做完。
2. 查找鏈接在那個(gè)數(shù)據(jù)庫(kù)上
檢查 dbid 即可。得到 dbid,可以運(yùn)行以下查詢得到數(shù)據(jù)庫(kù)的名字:
Select name,dbid from master.sys.sysdatabases
視圖中主要的字段:
1. Spid:Sql Servr 會(huì)話ID
2. Kpid:Windows 線程ID
3. Blocked:正在阻塞求情的會(huì)話 ID。如果此列為 Null,則標(biāo)識(shí)請(qǐng)求未被阻塞
4. Waittype:當(dāng)前連接的等待資源編號(hào),標(biāo)示是否等待資源,0 或 Null表示不需要等待任何資源
5. Waittime:當(dāng)前等待時(shí)間,單位為毫秒,0 表示沒(méi)有等待
6. DBID:當(dāng)前正由進(jìn)程使用的數(shù)據(jù)庫(kù)ID
7. UID:執(zhí)行命令的用戶ID
8. Login_time:客戶端進(jìn)程登錄到服務(wù)器的時(shí)間。
9. Last_batch:上次執(zhí)行存儲(chǔ)過(guò)程或Execute語(yǔ)句的時(shí)間。對(duì)于系統(tǒng)進(jìn)程,將存儲(chǔ)Sql Server 的啟動(dòng)時(shí)間
10.Open_tran:進(jìn)程的打開(kāi)事務(wù)個(gè)數(shù)。如果有嵌套事務(wù),就會(huì)大于1
11.Status:進(jìn)程ID 狀態(tài),dormant = 正在重置回話 ; running = 回話正在運(yùn)行一個(gè)或多個(gè)批處理 ; background = 回話正在運(yùn)行一個(gè)后臺(tái)任務(wù) ; rollback = 會(huì)話正在處理事務(wù)回滾 ; pending = 回話正在等待工作現(xiàn)成變?yōu)榭捎?; runnable = 會(huì)話中的任務(wù)在等待獲取 Scheduler 來(lái)運(yùn)行的可執(zhí)行隊(duì)列中 ; spinloop = 會(huì)話中的任務(wù)正在等待自旋鎖變?yōu)榭捎?; suspended = 會(huì)話正在等待事件完成
12.Hostname:建立鏈接的客戶端工作站的名稱(chēng)
13.Program_name:應(yīng)用程序的名稱(chēng),就是 連接字符串中配的 Application Name
14.Hostprocess:建立連接的應(yīng)用程序在客戶端工作站里的進(jìn)程ID號(hào)
15.Cmd:當(dāng)前正在執(zhí)行的命令
16.Loginame:登錄名
應(yīng)用實(shí)例:
1. 檢查數(shù)據(jù)庫(kù)是否發(fā)生阻塞
先查找哪個(gè)鏈接的 blocked 字段不為0。如 SPID53的blocked 字段不為0,而是 52。SPID 52 的 blocked 為0,就可以得出結(jié)論:此時(shí)有阻塞發(fā)生,53 被 52 阻塞住了。如果你發(fā)現(xiàn)一個(gè)連接的 blocked 字段的值等于它自己,那說(shuō)明這個(gè)連接正在做磁盤(pán)讀寫(xiě),它要等自己的 I/O 做完。
2. 查找鏈接在那個(gè)數(shù)據(jù)庫(kù)上
檢查 dbid 即可。得到 dbid,可以運(yùn)行以下查詢得到數(shù)據(jù)庫(kù)的名字:
Select name,dbid from master.sys.sysdatabases
相關(guān)文章
用戶"sa"登陸失敗 SQLServer 錯(cuò)誤18456的解決方法
sqlserver下用sa登錄提示18456錯(cuò)誤的解決方法。2009-11-11SQL 雙親節(jié)點(diǎn)查找所有子節(jié)點(diǎn)的實(shí)現(xiàn)方法
下面小編就為大家?guī)?lái)一篇SQL 雙親節(jié)點(diǎn)查找所有子節(jié)點(diǎn)的實(shí)現(xiàn)方法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-05-05數(shù)據(jù)庫(kù)清除日志文件(LDF文件過(guò)大)
數(shù)據(jù)庫(kù)清除日志文件,(LDF文件過(guò)大),一般情況下,有更簡(jiǎn)單的方法,需要在sqlserver查詢執(zhí)行。2009-11-11SQL Server數(shù)據(jù)庫(kù)之備份和恢復(fù)數(shù)據(jù)庫(kù)
在一些對(duì)數(shù)據(jù)可靠性要求很高的行業(yè),若發(fā)生意外停機(jī)或數(shù)據(jù)丟失,其損失是十分慘重的,因此,本文詳細(xì)介紹了數(shù)據(jù)庫(kù)備份和恢復(fù)數(shù)據(jù)庫(kù)方法,感興趣的同學(xué)可以借鑒一下2023-03-03解決MybatisPlus?SqlServer?OFFSET?分頁(yè)問(wèn)題
這篇文章主要介紹了MybatisPlus?SqlServer?OFFSET?分頁(yè)問(wèn)題,在分頁(yè)的時(shí)候有錯(cuò)誤問(wèn)題本文給大家記錄下來(lái),方便大家查閱,需要的朋友可以參考下2022-04-04sqlserver中的自定義函數(shù)的方法小結(jié)
“自定義函數(shù)”是我們平常的說(shuō)法,而“用戶定義的函數(shù)”是 SQL Server 中書(shū)面的說(shuō)法。2010-06-06