欧美性猛交xxxx免费看_牛牛在线视频国产免费_天堂草原电视剧在线观看免费_国产粉嫩高清在线观看_国产欧美日本亚洲精品一5区

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

SQL Server死鎖示例及解決方法

馬哥Linux運(yùn)維 ? 來(lái)源:cnblogs ? 2023-11-19 15:39 ? 次閱讀

1.死鎖原理

根據(jù)操作系統(tǒng)中的定義:死鎖是指在一組進(jìn)程中的各個(gè)進(jìn)程均占有不會(huì)釋放的資源,但因互相申請(qǐng)被其他進(jìn)程所站用不會(huì)釋放的資源而處于的一種永久等待狀態(tài)。

死鎖的四個(gè)必要條件:
互斥條件(Mutual exclusion):資源不能被共享,只能由一個(gè)進(jìn)程使用。
請(qǐng)求與保持條件(Hold and wait):已經(jīng)得到資源的進(jìn)程可以再次申請(qǐng)新的資源。
非剝奪條件(No pre-emption):已經(jīng)分配的資源不能從相應(yīng)的進(jìn)程中被強(qiáng)制地剝奪。
循環(huán)等待條件(Circular wait):系統(tǒng)中若干進(jìn)程組成環(huán)路,該環(huán)路中每個(gè)進(jìn)程都在等待相鄰進(jìn)程正占用的資源。

對(duì)應(yīng)到SQL Server中,當(dāng)在兩個(gè)或多個(gè)任務(wù)中,如果每個(gè)任務(wù)鎖定了其他任務(wù)試圖鎖定的資源,此時(shí)會(huì)造成這些任務(wù)永久阻塞,從而出現(xiàn)死鎖;這些資源可能是:?jiǎn)涡?RID,堆中的單行)、索引中的鍵(KEY,行鎖)、頁(yè)(PAG,8KB)、區(qū)結(jié)構(gòu)(EXT,連續(xù)的8頁(yè))、堆或B樹(HOBT)、表(TAB,包括數(shù)據(jù)和索引)、文件(File,數(shù)據(jù)庫(kù)文件)、應(yīng)用程序?qū)S觅Y源(APP)、元數(shù)據(jù)(METADATA)、分配單元(Allocation_Unit)、整個(gè)數(shù)據(jù)庫(kù)(DB)。一個(gè)死鎖示例如下圖所示:

ffec8e40-86a5-11ee-939d-92fbcf53809c.jpg


說(shuō)明:T1、T2表示兩個(gè)任務(wù);R1和R2表示兩個(gè)資源;由資源指向任務(wù)的箭頭(如R1->T1,R2->T2)表示該資源被改任務(wù)所持有;由任務(wù)指向資源的箭頭(如T1->S2,T2->S1)表示該任務(wù)正在請(qǐng)求對(duì)應(yīng)目標(biāo)資源;
其滿足上面死鎖的四個(gè)必要條件:
(1).互斥:資源S1和S2不能被共享,同一時(shí)間只能由一個(gè)任務(wù)使用;
(2).請(qǐng)求與保持條件:T1持有S1的同時(shí),請(qǐng)求S2;T2持有S2的同時(shí)請(qǐng)求S1;
(3).非剝奪條件:T1無(wú)法從T2上剝奪S2,T2也無(wú)法從T1上剝奪S1;
(4).循環(huán)等待條件:上圖中的箭頭構(gòu)成環(huán)路,存在循環(huán)等待。

2.死鎖排查

(1).使用SQL Server的系統(tǒng)存儲(chǔ)過(guò)程sp_who和sp_lock,可以查看當(dāng)前數(shù)據(jù)庫(kù)中的鎖情況;進(jìn)而根據(jù)objectID(@objID)(SQL Server 2005)/ object_name(@objID)(Sql Server 2000)可以查看哪個(gè)資源被鎖,用dbcc ld(@blk),可以查看最后一條發(fā)生給SQL Server的Sql語(yǔ)句;

CREATE Table #Who(spid int,
    ecid int,
    status nvarchar(50),
    loginname nvarchar(50),
    hostname nvarchar(50),
    blk int,
    dbname nvarchar(50),
    cmd nvarchar(50),
    request_ID int);


CREATE Table #Lock(spid int,
    dpid int,
    objid int,
    indld int,
    [Type] nvarchar(20),
    Resource nvarchar(50),
    Mode nvarchar(10),
    Status nvarchar(10)
);


INSERT INTO #Who
    EXEC sp_who active  --看哪個(gè)引起的阻塞,blk 
INSERT INTO #Lock
    EXEC sp_lock  --看鎖住了那個(gè)資源id,objid 


DECLARE @DBName nvarchar(20);
SET @DBName='NameOfDataBase'


SELECT #Who.* FROM #Who WHERE dbname=@DBName
SELECT #Lock.* FROM #Lock
    JOIN #Who
        ON #Who.spid=#Lock.spid
            AND dbname=@DBName;


--最后發(fā)送到SQL Server的語(yǔ)句
DECLARE crsr Cursor FOR
    SELECT blk FROM #Who WHERE dbname=@DBName AND blk<>0;
DECLARE @blk int;
open crsr;
FETCH NEXT FROM crsr INTO @blk;
WHILE (@@FETCH_STATUS = 0)
BEGIN;
    dbcc inputbuffer(@blk);
    FETCH NEXT FROM crsr INTO @blk;
END;
close crsr;
DEALLOCATE crsr;


--鎖定的資源
SELECT #Who.spid,hostname,objid,[type],mode,object_name(objid) as objName FROM #Lock
    JOIN #Who
        ON #Who.spid=#Lock.spid
            AND dbname=@DBName
    WHERE objid<>0;


DROP Table #Who;
DROP Table #Lock;

(2).使用SQL Server Profiler分析死鎖:將Deadlock graph事件類添加到跟蹤。此事件類使用死鎖涉及到的進(jìn)程和對(duì)象的XML數(shù)據(jù)填充跟蹤中的TextData數(shù)據(jù)列。SQL Server事件探查器可以將XML文檔提取到死鎖XML (.xdl)文件中,以后可在SQL Server Management Studio中查看該文件。

3.避免死鎖

上面1中列出了死鎖的四個(gè)必要條件,我們只要想辦法破其中的任意一個(gè)或多個(gè)條件,就可以避免死鎖發(fā)生,一般有以下幾種方法(FROM Sql Server 2005聯(lián)機(jī)叢書):
(1).按同一順序訪問(wèn)對(duì)象。(注:避免出現(xiàn)循環(huán))
(2).避免事務(wù)中的用戶交互。(注:減少持有資源的時(shí)間,較少鎖競(jìng)爭(zhēng))
(3).保持事務(wù)簡(jiǎn)短并處于一個(gè)批處理中。(注:同(2),減少持有資源的時(shí)間)
(4).使用較低的隔離級(jí)別。(注:使用較低的隔離級(jí)別(例如已提交讀)比使用較高的隔離級(jí)別(例如可序列化)持有共享鎖的時(shí)間更短,減少鎖競(jìng)爭(zhēng))
(5).使用基于行版本控制的隔離級(jí)別:2005中支持快照事務(wù)隔離和指定READ_COMMITTED隔離級(jí)別的事務(wù)使用行版本控制,可以將讀與寫操作之間發(fā)生的死鎖幾率降至最低:
SET ALLOW_SNAPSHOT_ISOLATION ON --事務(wù)可以指定SNAPSHOT事務(wù)隔離級(jí)別;
SET READ_COMMITTED_SNAPSHOT ON--指定READ_COMMITTED隔離級(jí)別的事務(wù)將使用行版本控制而不是鎖定。默認(rèn)情況下(沒(méi)有開啟此選項(xiàng),沒(méi)有加with nolock提示),SELECT語(yǔ)句會(huì)對(duì)請(qǐng)求的資源加S鎖(共享鎖);而開啟了此選項(xiàng)后,SELECT不會(huì)對(duì)請(qǐng)求的資源加S鎖。
注意:設(shè)置READ_COMMITTED_SNAPSHOT選項(xiàng)時(shí),數(shù)據(jù)庫(kù)中只允許存在執(zhí)行ALTER DATABASE命令的連接。在ALTER DATABASE完成之前,數(shù)據(jù)庫(kù)中決不能有其他打開的連接。數(shù)據(jù)庫(kù)不必一定要處于單用戶模式中。
(6).使用綁定連接。(注:綁定會(huì)話有利于在同一臺(tái)服務(wù)器上的多個(gè)會(huì)話之間協(xié)調(diào)操作。綁定會(huì)話允許一個(gè)或多個(gè)會(huì)話共享相同的事務(wù)和鎖(但每個(gè)回話保留其自己的事務(wù)隔離級(jí)別),并可以使用同一數(shù)據(jù),而不會(huì)有鎖沖突??梢詮耐粋€(gè)應(yīng)用程序內(nèi)的多個(gè)會(huì)話中創(chuàng)建綁定會(huì)話,也可以從包含不同會(huì)話的多個(gè)應(yīng)用程序中創(chuàng)建綁定會(huì)話。在一個(gè)會(huì)話中開啟事務(wù)(begin tran)后,調(diào)用exec sp_getbindtoken @Token out;來(lái)取得Token,然后傳入另一個(gè)會(huì)話并執(zhí)行EXEC sp_bindsession @Token來(lái)進(jìn)行綁定(最后的示例中演示了綁定連接)。

4.死鎖處理方法:

(1).根據(jù)2中提供的sql,查看那個(gè)spid處于wait狀態(tài),然后用kill spid來(lái)干掉(即破壞死鎖的第四個(gè)必要條件:循環(huán)等待);當(dāng)然這只是一種臨時(shí)解決方案,我們總不能在遇到死鎖就在用戶的生產(chǎn)環(huán)境上排查死鎖、Kill sp,我們應(yīng)該考慮如何去避免死鎖。

(2).使用SET LOCK_TIMEOUT timeout_period(單位為毫秒)來(lái)設(shè)定鎖請(qǐng)求超時(shí)。默認(rèn)情況下,數(shù)據(jù)庫(kù)沒(méi)有超時(shí)期限(timeout_period值為-1,可以用SELECT @@LOCK_TIMEOUT來(lái)查看該值,即無(wú)限期等待)。當(dāng)請(qǐng)求鎖超過(guò)timeout_period時(shí),將返回錯(cuò)誤。timeout_period值為0時(shí)表示根本不等待,一遇到鎖就返回消息。設(shè)置鎖請(qǐng)求超時(shí),破環(huán)了死鎖的第二個(gè)必要條件(請(qǐng)求與保持條件)。

服務(wù)器:消息1222,級(jí)別16,狀態(tài)50,行1
已超過(guò)了鎖請(qǐng)求超時(shí)時(shí)段。

(3). SQL Server內(nèi)部有一個(gè)鎖監(jiān)視器線程執(zhí)行死鎖檢查,鎖監(jiān)視器對(duì)特定線程啟動(dòng)死鎖搜索時(shí),會(huì)標(biāo)識(shí)線程正在等待的資源;然后查找特定資源的所有者,并遞歸地繼續(xù)執(zhí)行對(duì)那些線程的死鎖搜索,直到找到一個(gè)構(gòu)成死鎖條件的循環(huán)。檢測(cè)到死鎖后,數(shù)據(jù)庫(kù)引擎選擇運(yùn)行回滾開銷最小的事務(wù)的會(huì)話作為死鎖犧牲品,返回1205錯(cuò)誤,回滾死鎖犧牲品的事務(wù)并釋放該事務(wù)持有的所有鎖,使其他線程的事務(wù)可以請(qǐng)求資源并繼續(xù)運(yùn)行。

5.兩個(gè)死鎖示例及解決方法

5.1 SQL死鎖

(1).測(cè)試用的基礎(chǔ)數(shù)據(jù):

CREATE TABLE Lock1(C1 int default(0));
CREATE TABLE Lock2(C1 int default(0));
INSERT INTO Lock1 VALUES(1);
INSERT INTO Lock2 VALUES(1);

(2).開兩個(gè)查詢窗口,分別執(zhí)行下面兩段sql

--Query 1
Begin Tran
  Update Lock1 Set C1=C1+1;
  WaitFor Delay '0000';
  SELECT * FROM Lock2
Rollback Tran;
 
--Query 2
Begin Tran
  Update Lock2 Set C1=C1+1;
  WaitFor Delay '0000';
  SELECT * FROM Lock1
Rollback Tran;

上面的SQL中有一句WaitFor Delay '0000',用于等待1分鐘,以方便查看鎖的情況。

(3).查看鎖情況

在執(zhí)行上面的WaitFor語(yǔ)句期間,執(zhí)行第二節(jié)中提供的語(yǔ)句來(lái)查看鎖信息

000ab672-86a6-11ee-939d-92fbcf53809c.jpg

Query1中,持有Lock1中第一行(表中只有一行數(shù)據(jù))的行排他鎖(RID:X),并持有該行所在頁(yè)的意向更新鎖(PAG:IX)、該表的意向更新鎖(TAB:IX);Query2中,持有Lock2中第一行(表中只有一行數(shù)據(jù))的行排他鎖(RID:X),并持有該行所在頁(yè)的意向更新鎖(PAG:IX)、該表的意向更新鎖(TAB:IX);

執(zhí)行完Waitfor,Query1查詢Lock2,請(qǐng)求在資源上加S鎖,但該行已經(jīng)被Query2加上了X鎖;Query2查詢Lock1,請(qǐng)求在資源上加S鎖,但該行已經(jīng)被Query1加上了X鎖;于是兩個(gè)查詢持有資源并互不相讓,構(gòu)成死鎖。

(4).解決辦法

a).SQL Server自動(dòng)選擇一條SQL作死鎖犧牲品:運(yùn)行完上面的兩個(gè)查詢后,我們會(huì)發(fā)現(xiàn)有一條SQL能正常執(zhí)行完畢,而另一個(gè)SQL則報(bào)如下錯(cuò)誤:

服務(wù)器:消息1205,級(jí)別13,狀態(tài)50,行1
事務(wù)(進(jìn)程 ID xx)與另一個(gè)進(jìn)程已被死鎖在 lock 資源上,且該事務(wù)已被選作死鎖犧牲品。請(qǐng)重新運(yùn)行該事務(wù)。

這就是上面第四節(jié)中介紹的鎖監(jiān)視器干活了。

b).按同一順序訪問(wèn)對(duì)象:顛倒任意一條SQL中的Update與SELECT語(yǔ)句的順序。例如修改第二條SQL成如下:

--Query2
Begin Tran
  SELECT * FROM Lock1--在Lock1上申請(qǐng)S鎖
  WaitFor Delay '0000';
  Update Lock2 Set C1=C1+1;--Lock2X
Rollback Tran;

當(dāng)然這樣修改也是有代價(jià)的,這會(huì)導(dǎo)致第一條SQL執(zhí)行完畢之前,第二條SQL一直處于阻塞狀態(tài)。單獨(dú)執(zhí)行Query1或Query2需要約1分鐘,但如果開始執(zhí)行Query1時(shí),馬上同時(shí)執(zhí)行Query2,則Query2需要2分鐘才能執(zhí)行完;這種按順序請(qǐng)求資源從一定程度上降低了并發(fā)性。

c).SELECT語(yǔ)句加With(NoLock)提示:默認(rèn)情況下SELECT語(yǔ)句會(huì)對(duì)查詢到的資源加S鎖(共享鎖),S鎖與X鎖(排他鎖)不兼容;但加上With(NoLock)后,SELECT不對(duì)查詢到的資源加鎖(或者加Sch-S鎖,Sch-S鎖可以與任何鎖兼容);從而可以是這兩條SQL可以并發(fā)地訪問(wèn)同一資源。當(dāng)然,此方法適合解決讀與寫并發(fā)死鎖的情況,但加With(NoLock)可能會(huì)導(dǎo)致臟讀。

SELECT * FROM Lock2 WITH(NOLock)
SELECT * FROM Lock1 WITH(NOLock)

d).使用較低的隔離級(jí)別。SQL Server 2000支持四種事務(wù)處理隔離級(jí)別(TIL),分別為:READ UNCOMMITTED、READ COMMITTED、REPEATABLE READ、SERIALIZABLE;SQL Server 2005中增加了SNAPSHOT TIL。默認(rèn)情況下,SQL Server使用READ COMMITTED TIL,我們可以在上面的兩條SQL前都加上一句SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED,來(lái)降低TIL以避免死鎖;事實(shí)上,運(yùn)行在READ UNCOMMITTED TIL的事務(wù),其中的SELECT語(yǔ)句不對(duì)結(jié)果資源加鎖或加Sch-S鎖,而不會(huì)加S鎖;但還有一點(diǎn)需要注意的是:READ UNCOMMITTED TIL允許臟讀,雖然加上了降低TIL的語(yǔ)句后,上面兩條SQL在執(zhí)行過(guò)程中不會(huì)報(bào)錯(cuò),但執(zhí)行結(jié)果是一個(gè)返回1,一個(gè)返回2,即讀到了臟數(shù)據(jù),也許這并不是我們所期望的。

e).在SQL前加SET LOCK_TIMEOUT timeout_period,當(dāng)請(qǐng)求鎖超過(guò)設(shè)定的timeout_period時(shí)間后,就會(huì)終止當(dāng)前SQL的執(zhí)行,犧牲自己,成全別人。

f).使用基于行版本控制的隔離級(jí)別(SQL Server 2005支持):開啟下面的選項(xiàng)后,SELECT不會(huì)對(duì)請(qǐng)求的資源加S鎖,不加鎖或者加Sch-S鎖,從而將讀與寫操作之間發(fā)生的死鎖幾率降至最低;而且不會(huì)發(fā)生臟讀。

SET ALLOW_SNAPSHOT_ISOLATION ON
SET READ_COMMITTED_SNAPSHOT ON

g).使用綁定連接(使用方法見下一個(gè)示例。)

5.2程序死鎖(SQL阻塞)

看一個(gè)例子:一個(gè)典型的數(shù)據(jù)庫(kù)操作事務(wù)死鎖分析,按照我自己的理解,我覺(jué)得這應(yīng)該算是C#程序中出現(xiàn)死鎖,而不是數(shù)據(jù)庫(kù)中的死鎖;下面的代碼模擬了該文中對(duì)數(shù)據(jù)庫(kù)的操作過(guò)程:

//略去的無(wú)關(guān)的code
SqlConnection conn = new SqlConnection(connectionString);
conn.Open();
SqlTransaction tran = conn.BeginTransaction();
string sql1 = "Update Lock1 SET C1=C1+1";
string sql2 = "SELECT * FROM Lock1";
ExecuteNonQuery(tran, sql1); //使用事務(wù):事務(wù)中Lock了Table
ExecuteNonQuery(null, sql2); //新開一個(gè)connection來(lái)讀取Table


public static void ExecuteNonQuery(SqlTransaction tran, string sql)
{
    SqlCommand cmd = new SqlCommand(sql);
    if (tran != null)
    {
        cmd.Connection = tran.Connection;
        cmd.Transaction = tran;
        cmd.ExecuteNonQuery();
    }
    else
    {
        using (SqlConnection conn = new SqlConnection(connectionString))
        {
            conn.Open();
            cmd.Connection = conn;
            cmd.ExecuteNonQuery();
        }
    }
}

執(zhí)行到ExecuteNonQuery(null, sql2)時(shí)拋出SQL執(zhí)行超時(shí)的異常,下圖從數(shù)據(jù)庫(kù)的角度來(lái)看該問(wèn)題:

001df9ee-86a6-11ee-939d-92fbcf53809c.jpg

代碼從上往下執(zhí)行,會(huì)話1持有了表Lock1的X鎖,且事務(wù)沒(méi)有結(jié)束,回話1就一直持有X鎖不釋放;而會(huì)話2執(zhí)行select操作,請(qǐng)求在表Lock1上加S鎖,但S鎖與X鎖是不兼容的,所以回話2的被阻塞等待,不在等待中,就在等待中獲得資源,就在等待中超時(shí)。。。從中我們可以看到,里面并沒(méi)有出現(xiàn)死鎖,而只是SELECT操作被阻塞了。也正因?yàn)椴皇菙?shù)據(jù)庫(kù)死鎖,所以SQL Server的鎖監(jiān)視器無(wú)法檢測(cè)到死鎖。

我們?cè)購(gòu)腃#程序的角度來(lái)看該問(wèn)題:

002c41fc-86a6-11ee-939d-92fbcf53809c.jpg

C#程序持有了表Lock1上的X鎖,同時(shí)開了另一個(gè)SqlConnection還想在該表上請(qǐng)求一把S鎖,圖中已經(jīng)構(gòu)成了環(huán)路;太貪心了,結(jié)果自己把自己給鎖死了。。。

雖然這不是一個(gè)數(shù)據(jù)庫(kù)死鎖,但卻是因?yàn)閿?shù)據(jù)庫(kù)資源而導(dǎo)致的死鎖,上例中提到的解決死鎖的方法在這里也基本適用,主要是避免讀操作被阻塞,解決方法如下:

a).把SELECT放在Update語(yǔ)句前:SELECT不在事務(wù)中,且執(zhí)行完畢會(huì)釋放S鎖;
b).把SELECT也放加入到事務(wù)中:ExecuteNonQuery(tran, sql2);
c).SELECT加With(NOLock)提示:可能產(chǎn)生臟讀;
d).降低事務(wù)隔離級(jí)別:SELECT語(yǔ)句前加SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;同上,可能產(chǎn)生臟讀;
e).使用基于行版本控制的隔離級(jí)別(同上例)。
g).使用綁定連接:取得事務(wù)所在會(huì)話的token,然后傳入新開的connection中;執(zhí)行EXEC sp_bindsession @Token后綁定了連接,最后執(zhí)行exec sp_bindsession null;來(lái)取消綁定;最后需要注意的四點(diǎn)是:
(1).使用了綁定連接的多個(gè)connection共享同一個(gè)事務(wù)和相同的鎖,但各自保留自己的事務(wù)隔離級(jí)別;
(2).如果在sql3字符串的“exec sp_bindsession null”換成“commit tran”或者“rollback tran”,則會(huì)提交整個(gè)事務(wù),最后一行C#代碼tran.Commit()就可以不用執(zhí)行了(執(zhí)行會(huì)報(bào)錯(cuò),因?yàn)槭聞?wù)已經(jīng)結(jié)束了-,-)。
(3).開啟事務(wù)(begin tran)后,才可以調(diào)用exec sp_getbindtoken @Token out來(lái)取得Token;如果不想再新開的connection中結(jié)束掉原有的事務(wù),則在這個(gè)connection close之前,必須執(zhí)行“exec sp_bindsession null”來(lái)取消綁定連接,或者在新開的connectoin close之前先結(jié)束掉事務(wù)(commit/tran)。
(4). (Sql server 2005聯(lián)機(jī)叢書)后續(xù)版本的Microsoft SQL Server將刪除該功能。請(qǐng)避免在新的開發(fā)工作中使用該功能,并著手修改當(dāng)前還在使用該功能的應(yīng)用程序。請(qǐng)改用多個(gè)活動(dòng)結(jié)果集(MARS)或分布式事務(wù)。

tran = connection.BeginTransaction();
string sql1 = "Update Lock1 SET C1=C1+1";
ExecuteNonQuery(tran, sql1); //使用事務(wù):事務(wù)中Lock了測(cè)試表Lock1
string sql2 = @"DECLARE @Token varchar(255);
exec sp_getbindtoken @Token out;
SELECT @Token;";
string token = ExecuteScalar(tran, sql2).ToString();
string sql3 = "EXEC sp_bindsession @Token;Update Lock1 SET C1=C1+1;exec sp_bindsession null;";
SqlParameter parameter = new SqlParameter("@Token", SqlDbType.VarChar);
parameter.Value = token;
ExecuteNonQuery(null, sql3, parameter); //新開一個(gè)connection來(lái)操作測(cè)試表Lock1
tran.Commit();

附:鎖兼容性(FROM SQL Server 2005聯(lián)機(jī)叢書)

鎖兼容性控制多個(gè)事務(wù)能否同時(shí)獲取同一資源上的鎖。如果資源已被另一事務(wù)鎖定,則僅當(dāng)請(qǐng)求鎖的模式與現(xiàn)有鎖的模式相兼容時(shí),才會(huì)授予新的鎖請(qǐng)求。如果請(qǐng)求鎖的模式與現(xiàn)有鎖的模式不兼容,則請(qǐng)求新鎖的事務(wù)將等待釋放現(xiàn)有鎖或等待鎖超時(shí)間隔過(guò)期。

003c1398-86a6-11ee-939d-92fbcf53809c.jpg

編輯:黃飛

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 監(jiān)視器
    +關(guān)注

    關(guān)注

    1

    文章

    780

    瀏覽量

    33259
  • 死鎖
    +關(guān)注

    關(guān)注

    0

    文章

    25

    瀏覽量

    8096
  • 線程
    +關(guān)注

    關(guān)注

    0

    文章

    507

    瀏覽量

    19763
  • SQL Server
    +關(guān)注

    關(guān)注

    0

    文章

    20

    瀏覽量

    13461

原文標(biāo)題:SQL Server死鎖總結(jié)

文章出處:【微信號(hào):magedu-Linux,微信公眾號(hào):馬哥Linux運(yùn)維】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    電腦裝不上SQL2OOO的解決方法

    電腦裝不上SQL2OOO的解決方法
    發(fā)表于 07-30 11:54

    labview連接SQL server方法

    for ODBC Drivers: [Microsoft][ODBC SQL Server Driver][SQL Server]用戶 '(null)' 登錄失敗
    發(fā)表于 12-15 16:45

    SQL server服務(wù),遠(yuǎn)程過(guò)程調(diào)用失敗的解決方法

    成功解決SQL server服務(wù),遠(yuǎn)程過(guò)程調(diào)用失敗
    發(fā)表于 12-27 10:11

    VB訪問(wèn)SQL-SERVER數(shù)據(jù)庫(kù)的方法

    VB訪問(wèn)SQL-SERVER數(shù)據(jù)庫(kù)的方法
    發(fā)表于 05-22 11:28

    sql server 2000常用函數(shù)大全

    sql server
    發(fā)表于 09-28 08:28 ?0次下載

    SQL Server精華(CHM)

    SQL Server精華(CHM)察看與修改DTS包屬性 Microsoft? SQL Server? 2000的數(shù)據(jù)轉(zhuǎn)換服務(wù)允許您透過(guò)「DTS設(shè)計(jì)器」
    發(fā)表于 12-26 14:06 ?215次下載

    SQL Server 2000菜鳥入門

    SQL Server 2000企業(yè)版安裝教程(一) SQL Server 2000企業(yè)版安裝教程(二) SQL
    發(fā)表于 12-26 14:08 ?36次下載

    數(shù)據(jù)庫(kù)與SQL Server 2005教程

    SQL Server Management Studio(可稱為SQL Server集成管理器,簡(jiǎn)寫為Management Studio
    發(fā)表于 04-10 17:43 ?0次下載

    SQL Server系統(tǒng)概述課程

        本章要點(diǎn)           本章主要介紹:SQL Server 2005的概況
    發(fā)表于 04-14 15:54 ?0次下載

    基于SQL Server2000圖像算法評(píng)測(cè)軟件設(shè)計(jì)

    介紹了一種基于SQL Server圖像算法評(píng)測(cè)實(shí)驗(yàn)軟件設(shè)計(jì)方案,采用面向?qū)ο?b class='flag-5'>方法設(shè)計(jì),將數(shù)據(jù)封裝模塊化,使用SQL Server管理算法及測(cè)
    發(fā)表于 12-07 14:14 ?27次下載
    基于<b class='flag-5'>SQL</b> <b class='flag-5'>Server</b>2000圖像算法評(píng)測(cè)軟件設(shè)計(jì)

    LABVIEW與SQL SERVER的連接方法詳細(xì)說(shuō)明

     在用 LABVIEW 進(jìn)行數(shù)據(jù)采集分析過(guò)程中,一般會(huì)用到數(shù)據(jù)庫(kù)。在數(shù)據(jù)量很大的場(chǎng)合,可考慮使用 SQL SERVER 。下面就介紹 LABVIEW 與 SQL SERVER 的連接
    發(fā)表于 12-24 08:00 ?43次下載
    LABVIEW與<b class='flag-5'>SQL</b> <b class='flag-5'>SERVER</b>的連接<b class='flag-5'>方法</b>詳細(xì)說(shuō)明

    SQL Server組件有哪些?

    SQL Server組件有哪些?SQL Server數(shù)據(jù)庫(kù)引擎由四個(gè)基本組件組成。無(wú)論我們的SQL Se
    的頭像 發(fā)表于 04-14 16:51 ?1534次閱讀

    mysql和sql server區(qū)別

    MySQL和SQL Server是兩種常見的關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng)(RDBMS),用于存儲(chǔ)和管理數(shù)據(jù)庫(kù)。雖然它們都支持SQL語(yǔ)言,但在其他方面存在一些顯著的區(qū)別。以下是MySQL和SQL
    的頭像 發(fā)表于 11-21 11:07 ?1617次閱讀

    SQL Server數(shù)據(jù)庫(kù)備份方法

    SQL Server是一種用于管理和存儲(chǔ)數(shù)據(jù)的關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng)。備份數(shù)據(jù)庫(kù)是保護(hù)和恢復(fù)數(shù)據(jù)的重要措施之一,以防止意外數(shù)據(jù)丟失。在本文中,我們將詳細(xì)介紹SQL Server數(shù)據(jù)庫(kù)備份
    的頭像 發(fā)表于 11-23 14:27 ?1605次閱讀

    dbForge Studio For SQL Server:用于有效開發(fā)的最佳SQL Server集成開發(fā)環(huán)境

    dbForge Studio For SQL Server:用于有效開發(fā)的最佳SQL Server集成開發(fā)環(huán)境 SQL編碼助手
    的頭像 發(fā)表于 01-16 10:36 ?149次閱讀