通過 sysprocesses 簡單查詢死鎖及解決死鎖辦法
簡單查詢死鎖,如下四步可以輕鬆解決:
第一步:查詢死鎖語句
1: 條件是 blocked <> 0
select dbid,* from sys.sysprocesses
where 1=1
and spid >50
and blocked <> 0
--and spid= 62
查詢結果如下圖所示:
以上查詢得出:
第二步:查詢發生阻塞或死鎖的當前資料庫
1:通過第一步查詢,知道資料庫id 為 dbid=5。
2:sp_helpdb 或 select name,dbid from master.sys.sysdatabases 查詢資料庫名稱
第三步:查詢發生阻塞或死鎖的sql語句
輸出死鎖的執行的語句:
dbcc inputbuffer(961)
語句如下:
select o.tp_login,o.tp_title, convert(varchar(10),a.timecreated,120) as accessingdate,count(*) as docnum, 'sps' as type from userdata u,alldocs a, userinfo o ,webs w where a.listid = u.tp_listid and a.id = u.tp_docid and w.id = a.webid and w.siteid = a.siteid and w.siteid = o.tp_siteid and..........以後省去
第四步:殺死鎖
kill 961
之後再從第一步進行查詢,看是否還存在死鎖;
從第二步、第三步,查詢出了出問題的鎖死資料庫及sql語句,便於分析徹底解決死鎖問題。
以下是sysprocesses表中儲存關於執行在 microsoft® sql server™ 上的程序的資訊。這些程序可以是客戶端程序或系統程序。sysprocesses只儲存在master資料庫中。
列名資料型別
描述spidsmallintsql server 程序 id。
kpidsmallintmicrosoft windows nt 4.0® 執行緒 id。
blockedsmallint分塊程序的程序 id (spid)。
waittypebinary(2)保留。
waittimeint當前等待時間(以毫秒為單位)。當程序不處於等待時,為 0。
lastwaittypenchar(32)表示上次或當前等待型別名稱的字串。
waitresourcenchar(32)鎖資源的文字化表示法。
dbidsmallint當前正由程序使用的資料庫 id。
uidsmallint執行命令的使用者 id。
cpuint程序的累計 cpu 時間。無論 set statistics time on 選項是 on 還是 off,都為所有程序更新該條目。
physical_ioint程序的累計磁碟讀取和寫入。
memusageint當前分配給該程序的過程快取記憶體中的頁數。乙個負數,表示程序正在釋放由另乙個程序分配的記憶體。
login_timedatetime客戶端程序登入到伺服器的時間。對於系統程序,是儲存 sql server 啟動發生的時間。
last_batchdatetime客戶端程序上次執行遠端儲存過程呼叫或 execute 語句的時間。對於系統程序,是儲存 sql server 啟動發生的時間。
ecidsmallint用於唯一標識代表單個程序進行操作的子執行緒的執行上下文 id。
open_transmallint程序的開啟事務數。
statusnchar(30)程序 id 狀態(如執行、休眠等)。
sidbinary(85)使用者的全域性唯一識別符號 (guid)。
hostnamenchar(128)工作站的名稱。
program_namenchar(128)應用程式的名稱。
hostprocessnchar(8)工作站程序 id 號。
cmdnchar(16)當前正在執行的命令。
nt_domainnchar(128)客戶端的 windows nt 4.0 域(如果使用 windows 身份驗證)或信任連線的 windows nt 4.0 域。
nt_usernamenchar(128)程序的 windows nt 4.0使用者名稱(如果使用 windows 身份驗證)或信任連線的 windows nt 4.0 使用者名稱。
net_addressnchar(12)指派給每個使用者工作站上的網路介面卡唯一識別符號。當使用者登入時,該識別符號插入net_address列。
net_librarynchar(12)用於儲存客戶端網路庫的列。每個客戶端程序都在網路連線上進入。網路連線有乙個與這些程序關聯的網路庫,該網路庫使得這些程序可以建立連線。有關更多資訊,請參見客戶端和伺服器 net-library。
loginamenchar(128)登入名。
sqlserver死鎖阻塞
create proc p lockinfo kill lock spid bit 1,是否殺掉死鎖的程序,1 殺掉,0 僅顯示 show spid if nolock bit 1 如果沒有死鎖的程序,是否顯示正常程序資訊,1 顯示,0 不顯示 as declare count int,s nvar...
SQL SERVER 檢視死鎖和阻塞的SQL語句
檢視死鎖 select t1.resource type 資源鎖定型別 db name resource database id as 資料庫名,t1.resource associated entity id 鎖定物件,t1.request mode as等待者請求的鎖定模式,t1.request...
阻塞和死鎖
阻塞和死鎖是兩個不同的概念。舉個例子,現在有執行緒1和執行緒2,執行緒1占用了資源a,執行緒2占用了資源b。此時執行緒2需要使用資源a才能繼續,但是資源a被執行緒1所占用,那麼執行緒2只能等待資源a被執行緒1釋放掉,這種情況稱為執行緒2被阻塞。但是,如果此時執行緒1也許要資源b才能繼續,那麼兩個執行...