sysprocesses
sysprocesses 表中保存關(guān)于運(yùn)行在 microsoft® sql server™ 上的進(jìn)程的信息。這些進(jìn)程可以是客戶端進(jìn)程或系統(tǒng)進(jìn)程。sysprocesses 只存儲(chǔ)在 master 數(shù)據(jù)庫中。
列名 數(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ù)庫 id。 
uid smallint 執(zhí)行命令的用戶 id。 
cpu int 進(jìn)程的累計(jì) cpu 時(shí)間。無論 set statistics time on 選項(xiàng)是 on 還是 off,都為所有進(jìn)程更新該條目。 
physical_io int 進(jìn)程的累計(jì)磁盤讀取和寫入。 
memusage int 當(dāng)前分配給該進(jìn)程的過程高速緩存中的頁數(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ǔ)過程調(diào)用或 execute 語句的時(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)程的打開事務(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ò)庫的列。每個(gè)客戶端進(jìn)程都在網(wǎng)絡(luò)連接上進(jìn)入。網(wǎng)絡(luò)連接有一個(gè)與這些進(jìn)程關(guān)聯(lián)的網(wǎng)絡(luò)庫,該網(wǎng)絡(luò)庫使得這些進(jìn)程可以建立連接。有關(guān)更多信息,請(qǐng)參見客戶端和服務(wù)器 net-library。 
loginame nchar(128) 登錄名。 
nmliwei http://www.**************.com 2006-11-16 08:18
那滿足什么條件的是死鎖呢?
阿楚 http://www.**************.com 2006-11-16 08:42
當(dāng)某組資源的兩個(gè)或多個(gè)線程之間有循環(huán)相關(guān)性時(shí),將發(fā)生死鎖。
死鎖是一種可能發(fā)生在任何多線程系統(tǒng)中的狀態(tài),而不僅僅發(fā)生在關(guān)系數(shù)據(jù)庫管理系統(tǒng)中。多線程系統(tǒng)中的一個(gè)線程可能獲取一個(gè)或多個(gè)資源(如鎖)。如果正獲取的資源當(dāng)前為另一線程所擁有,則第一個(gè)線程可能必須等待擁有線程釋放目標(biāo)資源。這時(shí)就說等待線程在那個(gè)特定資源上與擁有線程有相關(guān)性。
如果擁有線程需要獲取另外一個(gè)資源,而該資源當(dāng)前為等待線程所擁有,則這種情形將成為死鎖:在事務(wù)提交或回滾之前兩個(gè)線程都不能釋放資源,而且它們因?yàn)檎却龑?duì)方擁有的資源而不能提交或回滾事務(wù)。例如,運(yùn)行事務(wù) 1 的線程 t1 具有 supplier 表上的排它鎖。運(yùn)行事務(wù) 2 的線程 t2 具有 part 表上的排它鎖,并且之后需要 supplier 表上的鎖。事務(wù) 2 無法獲得這一鎖,因?yàn)槭聞?wù) 1 已擁有它。事務(wù) 2 被阻塞,等待事務(wù) 1。然后,事務(wù) 1 需要 part 表的鎖,但無法獲得鎖,因?yàn)槭聞?wù) 2 將它鎖定了。事務(wù)在提交或回滾之前不能釋放持有的鎖。因?yàn)槭聞?wù)需要對(duì)方控制的鎖才能繼續(xù)操作,所以它們不能提交或回滾。
死鎖經(jīng)常與正常阻塞混淆。當(dāng)一個(gè)事務(wù)鎖定了另一個(gè)事務(wù)需要的資源,第二個(gè)事務(wù)等待鎖被釋放。默認(rèn)情況下,sql server 事務(wù)不會(huì)超時(shí)(除非設(shè)置了 lock_timeout)。第二個(gè)事務(wù)被阻塞,而不是被死鎖。
nmliwei http://www.**************.com 2006-11-16 09:52
我是說在sysprocesses中查死鎖 where后面的條件該怎么寫,不是問大家要死鎖的定義,同志們.
[ 本帖最后由 nmliwei 于 2006-11-16 17:54 編輯 ]
阿楚 http://www.**************.com 2006-11-16 10:32
不好意思,開始時(shí)沒明白你的意思。
找到下面這些,也許會(huì)有些幫助
常看到死鎖的問題,一般都是kill進(jìn)程,但如果不查出引起死鎖的原因,死鎖會(huì)時(shí)常發(fā)生
可以通過查找引起死鎖的的操作,就可以方便的解決死鎖,現(xiàn)將日常解決問題的方法總結(jié),也許對(duì)大家有幫助
1/死鎖發(fā)生時(shí),通過如下語法,查詢出引起死鎖的操作
use master
go
declare @spid int,@bl int
declare s_cur cursor for 
select 0 ,blocked
from (select * from sysprocesses where blocked>0 ) a 
where not exists(select * from (select * from sysprocesses where blocked>0 ) b 
where a.blocked=spid)
union select spid,blocked from sysprocesses where blocked>0
open s_cur
fetch next from s_cur into @spid,@bl
while @@fetch_status = 0
begin
if @spid =0 
        select '引起數(shù)據(jù)庫死鎖的是: '+ cast(@bl as varchar(10)) + '進(jìn)程號(hào),其執(zhí)行的sql語法如下'
else
        select '進(jìn)程號(hào)spid:'+ cast(@spid as varchar(10))+ '被' + '進(jìn)程號(hào)spid:'+ cast(@bl as varchar(10)) +'阻塞,其當(dāng)前進(jìn)程執(zhí)行的sql語法如下'
dbcc inputbuffer (@bl )
fetch next from s_cur into @spid,@bl
end
close s_cur
deallocate s_cur
exec sp_who2
2/查找程序/數(shù)據(jù)庫,此t_sql語法在什么地方使用
3/分析找到的,并解決問題
eg:
/*
------------------------------------------------------- 
引起數(shù)據(jù)庫死鎖的是: 71進(jìn)程號(hào),其執(zhí)行的sql語法如下
eventtype     parameters eventinfo                           
-------------- ---------- ------------------------------------------------ 
language event 0       
select * from test
insert test values(1,2)
(所影響的行數(shù)為 1 行)
dbcc 執(zhí)行完畢。如果 dbcc 輸出了錯(cuò)誤信息,請(qǐng)與系統(tǒng)管理員聯(lián)系。
                                                    
------------------------------------------------------------------------------ 
進(jìn)程號(hào)spid:64被進(jìn)程號(hào)spid:71阻塞,其當(dāng)前進(jìn)程執(zhí)行的sql語法如下
eventtype     parameters eventinfo                           
-------------- ---------- ------------------------------------------------ 
language event 0       
select * from test
insert test values(1,2)
(所影響的行數(shù)為 1 行)
dbcc 執(zhí)行完畢。如果 dbcc 輸出了錯(cuò)誤信息,請(qǐng)與系統(tǒng)管理員聯(lián)系。
                                                    
------------------------------------------------------------------------------ 
進(jìn)程號(hào)spid:65被進(jìn)程號(hào)spid:64阻塞,其當(dāng)前進(jìn)程執(zhí)行的sql語法如下
eventtype     parameters eventinfo                                                             
-------------- ---------- -------------------------------------------------------------------------------------------------- 
language event 0       begin tran
select * from test with (holdlock)
waitfor time '12:00'
select * from test
commit
(所影響的行數(shù)為 1 行)
dbcc 執(zhí)行完畢。如果 dbcc 輸出了錯(cuò)誤信息,請(qǐng)與系統(tǒng)管理員聯(lián)系。
                                                    
------------------------------------------------------------------------------ 
進(jìn)程號(hào)spid:73被進(jìn)程號(hào)spid:64阻塞,其當(dāng)前進(jìn)程執(zhí)行的sql語法如下
eventtype     parameters eventinfo                                                             
-------------- ---------- -------------------------------------------------------------------------------------------------- 
language event 0       begin tran
select * from test with (holdlock)
waitfor time '12:00'
select * from test
commit
(所影響的行數(shù)為 1 行)
dbcc 執(zhí)行完畢。如果 dbcc 輸出了錯(cuò)誤信息,請(qǐng)與系統(tǒng)管理員聯(lián)系。*/
新聞熱點(diǎn)
疑難解答
圖片精選