通過 sysprocesses 解決Sql死鎖問題
今天我像往常一樣編寫新的模組功能(碼程式碼),突然出現了一個奇怪的現象:程式執行之後頁面一直處於載入狀態。這讓我感到不知所措,然後我就按照常用的三大策略:重新生成解決方案、重啟VS、重啟電腦,結果然並卵……在後面除錯過程中我發現Sql語句執行後遲遲拿不到結果,我隱約感覺到問題就出在這裡,後來經過查閱資料初步確定資料庫被鎖住了,那就解決死鎖的問題嘍!
按照下述四步即可輕鬆解決死鎖問題:
第一步:查詢是否發生死鎖
select dbid,* from sys.sysprocesses
where 1=1 and blocked <> 0
第二步:查詢發生阻塞或死鎖的資料庫
/*方法一*/
sp_helpdb
/*方法二*/
select dbid,name from sys.sysdatabases
第三步:查詢造成阻塞或死鎖的Sql語句
/*520對應blocked的列值*/
dbcc inputbuffer(520)
第四步:打破死鎖
kill 520
之後再從第一步進行查詢,看是否還存在死鎖,然後按照順序進行處理即可。
以下是sysprocesses 表中儲存的關於執行在 Microsoft® SQL Server™ 上的程式資訊,這些程式可以是客戶端程式或系統程式。sysprocesses 只儲存在master 資料庫中。
列名 | 型別 | 說明 |
---|---|---|
spid | smallint | SQL Server程式 ID。 |
kpid | smallint | Microsoft Windows NT 4.0® 執行緒 ID。 |
blocked | smallint | 分塊程式的程式 ID (spid)。 |
waittype | binary(2) | 保留。 |
waittime | int | 當前等待時間(以毫秒為單位)。當程式不處於等待時為0。 |
lastwaittype | nchar(32) | 表示上次或當前等待型別名稱的字串。 |
waitresource | nchar(32) | 鎖資源的文字化表示法。 |
dbid | smallint | 當前正由程式使用的資料庫 ID。 |
uid | smallint | 執行命令的使用者 ID。 |
cpu | int | 程式的累計 CPU 時間。無論 SET STATISTICS TIME ON 選項是 ON 還是 OFF,都為所有程式更新該條目。 |
physical_io | int | 程式的累計磁碟讀取和寫入。 |
memusage | int | 當前分配給該程式的過程快取記憶體中的頁數。一個負數,表示程式正在釋放由另一個程式分配的記憶體。 |
login_time | datetime | 客戶端程式登入到伺服器的時間。對於系統程式,是儲存 SQL Server 啟動發生的時間。 |
last_batch | datetime | 客戶端程式上次執行遠端儲存過程呼叫或 EXECUTE 語句的時間。對於系統程式,是儲存 SQL Server 啟動發生的時間。 |
ecid | smallint | 用於唯一標識代表單個程式進行操作的子執行緒的執行上下文 ID。 |
open_tran | smallint | 程式的開啟事務數。 |
status | nchar(30) | 程式 ID 狀態(如執行、休眠等)。 |
sid | binary(85) | 使用者的全域性唯一識別符號 (GUID)。 |
hostname | nchar(128) | 工作站的名稱。 |
program_name | nchar(128) | 應用程式的名稱。 |
hostprocess | nchar(8) | 工作站程式 ID 號。 |
cmd | nchar(16) | 當前正在執行的命令。 |
nt_domain | nchar(128) | 客戶端的 Windows NT 4.0 域(如果使用 Windows 身份驗證)或信任連線的 Windows NT 4.0 域。 |
nt_username | nchar(128) | 程式的 Windows NT 4.0使用者名稱(如果使用 Windows 身份驗證)或信任連線的 Windows NT 4.0 使用者名稱。 |
net_address | nchar(12) | 指派給每個使用者工作站上的網路介面卡唯一識別符號。當使用者登入時,該識別符號插入net_address列。 |
net_library | nchar(12) | 用於儲存客戶端網路庫的列。每個客戶端程式都在網路連線上進入。網路連線有一個與這些程式關聯的網路庫,該網路庫使得這些程式可以建立連線。有關更多資訊,請參見客戶端和伺服器 Net-Library。 |
loginame | nchar(128) | 登入名。 |
相關文章
- 解決SQL2005死鎖問題SQL
- 解決Oracle死鎖問題步驟Oracle
- SQLserver 程式被死鎖問題解決SQLServer
- SQL Server 2000 死鎖(dead lock) 問題解決SQLServer
- 死鎖問題排查過程-間隙鎖的復現以及解決
- sql server死鎖的問題SQLServer
- Mysql使用kill命令解決死鎖問題MySql
- Oracle觸發器死鎖問題解決Oracle觸發器
- Java 程式死鎖問題原理及解決方案Java
- 手把手教你分析解決MySQL死鎖問題MySql
- SQ死鎖及死鎖的解決
- 故障解析丨一次死鎖問題的解決
- MySQL死鎖問題MySql
- 通過註解完美解決混淆問題
- MySQL 死鎖解決MySql
- MySQL解決死鎖MySql
- 記憶體混亂及解決方法和死鎖問題記憶體
- MySQL死鎖系列-線上死鎖問題排查思路MySql
- MySQL 死鎖問題分析MySql
- Sqlserver分析死鎖問題SQLServer
- 線上死鎖問題分析
- 死鎖問題總結
- SQLServer 如何收集資料以排除 SQL 死鎖問題SQLServer
- 通過Observable解決搜尋框問題
- Python | 多執行緒死鎖問題的巧妙解決方法Python執行緒
- 最近解決了一個比較複雜的“死鎖”問題
- sqlserver大數批次update時死鎖的問題及解決方案SQLServer
- 解決SQL Server 2005中鎖的問題SQLServer
- 如何通過sid查詢造成死鎖的sql語句,並殺死會話SQL會話
- MySQL鎖等待與死鎖問題分析MySql
- 面試:什麼是死鎖,如何避免或解決死鎖;MySQL中的死鎖現象,MySQL死鎖如何解決面試MySql
- Slave SQL執行緒與PXB FTWRL死鎖問題分析SQL執行緒
- 死鎖檢測及解決
- SQL Server死鎖SQLServer
- Oracle 解決鎖表問題Oracle
- oracle 鎖問題的解決Oracle
- 如何捕獲問題SQL解決過度CPU消耗的問題SQL
- 如何捕獲問題SQL解決過度CPU消耗問題 (zt)SQL