利用sys.sysprocesses檢查SqlServer的阻塞和死鎖
發(fā)布日期:2022-01-23 08:02 | 文章來(lái)源:源碼之家
視圖中主要的字段:
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í)行命令的用戶(hù)ID
8. Login_time:客戶(hù)端進(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:建立鏈接的客戶(hù)端工作站的名稱(chēng)
13.Program_name:應(yīng)用程序的名稱(chēng),就是 連接字符串中配的 Application Name
14.Hostprocess:建立連接的應(yīng)用程序在客戶(hù)端工作站里的進(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)行以下查詢(xú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í)行命令的用戶(hù)ID
8. Login_time:客戶(hù)端進(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:建立鏈接的客戶(hù)端工作站的名稱(chēng)
13.Program_name:應(yīng)用程序的名稱(chēng),就是 連接字符串中配的 Application Name
14.Hostprocess:建立連接的應(yīng)用程序在客戶(hù)端工作站里的進(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)行以下查詢(xún)得到數(shù)據(jù)庫(kù)的名字:
Select name,dbid from master.sys.sysdatabases
版權(quán)聲明:本站文章來(lái)源標(biāo)注為YINGSOO的內(nèi)容版權(quán)均為本站所有,歡迎引用、轉(zhuǎn)載,請(qǐng)保持原文完整并注明來(lái)源及原文鏈接。禁止復(fù)制或仿造本網(wǎng)站,禁止在非www.sddonglingsh.com所屬的服務(wù)器上建立鏡像,否則將依法追究法律責(zé)任。本站部分內(nèi)容來(lái)源于網(wǎng)友推薦、互聯(lián)網(wǎng)收集整理而來(lái),僅供學(xué)習(xí)參考,不代表本站立場(chǎng),如有內(nèi)容涉嫌侵權(quán),請(qǐng)聯(lián)系alex-e#qq.com處理。
相關(guān)文章