国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數(shù)據(jù)庫 > SQL Server > 正文

sql server死鎖的精辟解釋

2024-08-31 00:49:01
字體:
供稿:網(wǎng)友

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)系。*/


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 岐山县| 仪陇县| 綦江县| 临江市| 林口县| 尼玛县| 彝良县| 鄂伦春自治旗| 陇南市| 易门县| 武宁县| 蒙自县| 泌阳县| 祁东县| 百色市| 镇雄县| 来安县| 修水县| 长顺县| 绵竹市| 武宁县| 保康县| 台北市| 东乡县| 凌云县| 罗定市| 墨竹工卡县| 平度市| 东山县| 新宁县| 汪清县| 澜沧| 巴里| 海南省| 灵川县| 鄂尔多斯市| 嵊泗县| 盐津县| 当雄县| 天柱县| 汉寿县|