如何通過(guò)sysprocesses 簡(jiǎn)單查詢死鎖及解決死鎖最新方案(四步解決)
簡(jiǎn)單查詢死鎖,如下四步可以輕松解決:
第一步:查詢死鎖語(yǔ)句
1: 條件是 blocked <> 0
select dbid,* from sys.sysprocesses where 1=1 and spid >50 and blocked <> 0 --and spid= 62
查詢結(jié)果如下圖所示:
以上查詢得出:
- 受影響的數(shù)據(jù)庫(kù)ID 是 5;
- 受到阻塞的會(huì)話有1301、1306、869、109;
- 阻塞會(huì)話是961;
第二步:查詢發(fā)生阻塞或死鎖的當(dāng)前數(shù)據(jù)庫(kù)
1:通過(guò)第一步查詢,知道數(shù)據(jù)庫(kù)ID 為 DBID=5。
2:sp_helpdb 或 Select name,dbid from master.sys.sysdatabases 查詢數(shù)據(jù)庫(kù)名稱
第三步:查詢發(fā)生阻塞或死鎖的SQL語(yǔ)句
輸出死鎖的執(zhí)行的語(yǔ)句:
dbcc inputbuffer(961)
語(yǔ)句如下:
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
之后再?gòu)牡谝徊竭M(jìn)行查詢,看是否還存在死鎖;
從第二步、第三步,查詢出了出問(wèn)題的鎖死數(shù)據(jù)庫(kù)及SQL語(yǔ)句,便于分析徹底解決死鎖問(wèn)題。
以下是sysprocesses 表中保存關(guān)于運(yùn)行在 Microsoft® SQL Server™ 上的進(jìn)程的信息。這些進(jìn)程可以是客戶端進(jìn)程或系統(tǒng)進(jìn)程。sysprocesses 只存儲(chǔ)在master 數(shù)據(jù)庫(kù)中。
列名 | 數(shù)據(jù)類型 | 描述 |
---|---|---|
spid | smallint | SQL Server 進(jìn)程 ID。 |
kpid | smallint | Microsoft Windows NT 4.0® 線程 ID。 |
blocked | smallint | 分塊進(jìn)程的進(jìn)程 ID (spid)。 |
waittype | binary(2) | 保留。 |
waittime | int | 當(dāng)前等待時(shí)間(以毫秒為單位)。當(dāng)進(jìn)程不處于等待時(shí),為 0。 |
lastwaittype | nchar(32) | 表示上次或當(dāng)前等待類型名稱的字符串。 |
waitresource | nchar(32) | 鎖資源的文本化表示法。 |
dbid | smallint | 當(dāng)前正由進(jìn)程使用的數(shù)據(jù)庫(kù) ID。 |
uid | smallint | 執(zhí)行命令的用戶 ID。 |
cpu | int | 進(jìn)程的累計(jì) CPU 時(shí)間。無(wú)論 SET STATISTICS TIME ON 選項(xiàng)是 ON 還是 OFF,都為所有進(jìn)程更新該條目。 |
physical_io | int | 進(jìn)程的累計(jì)磁盤(pán)讀取和寫(xiě)入。 |
memusage | int | 當(dāng)前分配給該進(jìn)程的過(guò)程高速緩存中的頁(yè)數(shù)。一個(gè)負(fù)數(shù),表示進(jìn)程正在釋放由另一個(gè)進(jìn)程分配的內(nèi)存。 |
login_time | datetime | 客戶端進(jìn)程登錄到服務(wù)器的時(shí)間。對(duì)于系統(tǒng)進(jìn)程,是存儲(chǔ) SQL Server 啟動(dòng)發(fā)生的時(shí)間。 |
last_batch | datetime | 客戶端進(jìn)程上次執(zhí)行遠(yuǎn)程存儲(chǔ)過(guò)程調(diào)用或 EXECUTE 語(yǔ)句的時(shí)間。對(duì)于系統(tǒng)進(jìn)程,是存儲(chǔ) SQL Server 啟動(dòng)發(fā)生的時(shí)間。 |
ecid | smallint | 用于唯一標(biāo)識(shí)代表單個(gè)進(jìn)程進(jìn)行操作的子線程的執(zhí)行上下文 ID。 |
open_tran | smallint | 進(jìn)程的打開(kāi)事務(wù)數(shù)。 |
status | nchar(30) | 進(jìn)程 ID 狀態(tài)(如運(yùn)行、休眠等)。 |
sid | binary(85) | 用戶的全局唯一標(biāo)識(shí)符 (GUID)。 |
hostname | nchar(128) | 工作站的名稱。 |
program_name | nchar(128) | 應(yīng)用程序的名稱。 |
hostprocess | nchar(8) | 工作站進(jìn)程 ID 號(hào)。 |
cmd | nchar(16) | 當(dāng)前正在執(zhí)行的命令。 |
nt_domain | nchar(128) | 客戶端的 Windows NT 4.0 域(如果使用 Windows 身份驗(yàn)證)或信任連接的 Windows NT 4.0 域。 |
nt_username | nchar(128) | 進(jìn)程的 Windows NT 4.0用戶名(如果使用 Windows 身份驗(yàn)證)或信任連接的 Windows NT 4.0 用戶名。 |
net_address | nchar(12) | 指派給每個(gè)用戶工作站上的網(wǎng)絡(luò)接口卡唯一標(biāo)識(shí)符。當(dāng)用戶登錄時(shí),該標(biāo)識(shí)符插入 net_address 列。 |
net_library | nchar(12) | 用于存儲(chǔ)客戶端網(wǎng)絡(luò)庫(kù)的列。每個(gè)客戶端進(jìn)程都在網(wǎng)絡(luò)連接上進(jìn)入。網(wǎng)絡(luò)連接有一個(gè)與這些進(jìn)程關(guān)聯(lián)的網(wǎng)絡(luò)庫(kù),該網(wǎng)絡(luò)庫(kù)使得這些進(jìn)程可以建立連接。有關(guān)更多信息,請(qǐng)參見(jiàn)客戶端和服務(wù)器 Net-Library。 |
loginame | nchar(128) | 登錄名。 |
到此這篇關(guān)于如何通過(guò)sysprocesses 簡(jiǎn)單查詢死鎖及解決死鎖最新方案的文章就介紹到這了,更多相關(guān)sysprocesses查詢死鎖內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
解決sql server 數(shù)據(jù)庫(kù),sa用戶被鎖定的問(wèn)題
這篇文章主要介紹了解決sql server 數(shù)據(jù)庫(kù),sa用戶被鎖定的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-06-06數(shù)據(jù)庫(kù)備份 SQLServer的備份和災(zāi)難恢復(fù)
數(shù)據(jù)處理在現(xiàn)代企業(yè)運(yùn)營(yíng)中變得越來(lái)越重要,越來(lái)越關(guān)鍵,甚至?xí)蔀槠髽I(yè)發(fā)展的一項(xiàng)瓶頸. 數(shù)據(jù)保護(hù)的重要性也不言而喻. 如果一個(gè)企業(yè)沒(méi)有很好的數(shù)據(jù)保護(hù)方案或策略的話,一旦發(fā)生重要數(shù)據(jù)丟失,后果將會(huì)是災(zāi)難性的,伴隨著會(huì)有經(jīng)濟(jì)利益方面的損失.2010-07-07SQL Server 數(shù)據(jù)庫(kù)基本操作語(yǔ)句總結(jié)
SQL Server 數(shù)據(jù)庫(kù)基本操作語(yǔ)句總結(jié),需要的朋友可以參考一下2013-05-05