通過 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) | 登入名。 |
相關文章
- 解決Oracle死鎖問題步驟Oracle
- 死鎖問題排查過程-間隙鎖的復現以及解決
- Mysql使用kill命令解決死鎖問題MySql
- 手把手教你分析解決MySQL死鎖問題MySql
- 故障解析丨一次死鎖問題的解決
- MySQL死鎖問題MySql
- SQLServer 如何收集資料以排除 SQL 死鎖問題SQLServer
- Python | 多執行緒死鎖問題的巧妙解決方法Python執行緒
- 記憶體混亂及解決方法和死鎖問題記憶體
- MySQL 死鎖解決MySql
- MySQL解決死鎖MySql
- SQL SERVER死鎖查詢,死鎖分析,解鎖,查詢佔用SQLServer
- MySQL 死鎖問題分析MySql
- 通過Observable解決搜尋框問題
- Slave SQL執行緒與PXB FTWRL死鎖問題分析SQL執行緒
- MySQL死鎖系列-線上死鎖問題排查思路MySql
- 如何捕獲問題SQL解決過度CPU消耗的問題SQL
- MySQL鎖等待與死鎖問題分析MySql
- SpringBoot中通過CORS解決跨域問題Spring BootCORS跨域
- SpringBoot Seata 死鎖問題排查Spring Boot
- 面試:什麼是死鎖,如何避免或解決死鎖;MySQL中的死鎖現象,MySQL死鎖如何解決面試MySql
- 運維必備-解決鎖問題的全過程運維
- SQL Server 的死鎖SQLServer
- sql多參問題解決SQL
- 僅4步,就可通過SQL進行分散式死鎖的檢測與消除SQL分散式
- Python | 淺談併發鎖與死鎖問題Python
- MySQL死鎖分析與解決之路MySql
- 併發技術5:死鎖問題
- 解決庫存扣減及訂單建立時防止併發死鎖的問題
- 什麼是死鎖?如何解決死鎖?
- mysql慢查詢,死鎖解決方案MySql
- 通過IPFS技術解決NFT的永久儲存問題
- Oracle死鎖一例(ORA-00060),鎖表導致的業務死鎖問題Oracle
- 用分散式鎖解決併發問題分散式
- java鎖的問題速通Java
- SQL Server 2016升級遷移過程中效能問題解決案例SQLServer
- 例項詳解 Java 死鎖與破解死鎖Java
- 用SQL解決有向圖問題(轉)SQL
- 【OracleEBS】 訂單暫掛問題sql解決OracleSQL