利用 sys.sysprocesses 檢查 Sql Server的阻塞和死結

來源:互聯網
上載者:User

Sys.SysProcesses 系統資料表是一個很重要的系統檢視表,主要用來定位與解決Sql Server的阻塞和死結。
MSDN:包含正在 SQL Server 執行個體上啟動並執行進程的相關資訊。這些進程可以是用戶端進程或系統進程。

視圖中主要的欄位:
1. Spid:Sql Servr 會話ID
2. Kpid:Windows  線程ID
3. Blocked:正在阻塞求情的會話 ID。如果此列為 Null,則標識請求未被阻塞
4. Waittype:當前串連的等待資源編號,標示是否等待資源,0 或 Null表示不需要等待任何資源
5. Waittime:當前等待時間,單位為毫秒,0 表示沒有等待
6. DBID:當前正由進程使用的資料庫ID
7. UID:執行命令的使用者ID
8. Login_time:用戶端進程登入到伺服器的時間。
9. Last_batch:上次執行預存程序或Execute語句的時間。對於系統進程,將儲存Sql Server 的啟動時間
10.Open_tran:進程的開啟事務個數。如果有嵌套事務,就會大於1
11.Status:進程ID 狀態,dormant = 正在重設回話 ; running = 回話正在運行一個或多個批處理 ; background = 回話正在運行一個背景工作 ; rollback = 會話正在處理交易回復 ; pending = 回話正在等待工作現成變為可用 ; runnable = 會話中的任務在等待擷取 Scheduler 來啟動並執行可執行隊列中 ; spinloop = 會話中的任務正在等待自旋鎖變為可用 ; suspended = 會話正在等待事件完成
12.Hostname:建立連結的用戶端工作站的名稱
13.Program_name:應用程式的名稱,就是 連接字串中配的 Application Name
14.Hostprocess:建立連線應用程式程式在用戶端工作站裡的進程ID號
15.Cmd:當前正在執行的命令
16.Loginame:登入名稱

應用執行個體:
1. 檢查資料庫是否發生阻塞
先尋找哪個連結的 blocked 欄位不為0。如 SPID53的blocked 欄位不為0,而是 52。SPID 52 的 blocked 為0,就可以得出結論:此時有阻塞發生,53 被 52 阻塞住了。如果你發現一個串連的 blocked 欄位的值等於它自己,那說明這個串連正在做磁碟讀寫,它要等自己的 I/O 做完。

2. 尋找連結在那個資料庫上
檢查 dbid 即可。得到 dbid,可以運行以下查詢得到資料庫的名字:Select name,dbid from master.sys.sysdatabases

尋自己首發於部落格園:利用 sys.sysprocesses 檢查 Sql Server的阻塞和死結
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.