欧美日韩激情_美女国产一区_国产精品久久久久影院日本_69xxx在线

sqlserver列鎖,sqlserver行鎖

sqlserver怎么清除死鎖

1、首先需要判斷是哪個用戶鎖住了哪張表.

公司主營業務:成都做網站、網站制作、移動網站開發等業務。幫助企業客戶真正實現互聯網宣傳,提高企業的競爭能力。創新互聯建站是一支青春激揚、勤奮敬業、活力青春激揚、勤奮敬業、活力澎湃、和諧高效的團隊。公司秉承以“開放、自由、嚴謹、自律”為核心的企業文化,感謝他們對我們的高要求,感謝他們從不同領域給我們帶來的挑戰,讓我們激情的團隊有機會用頭腦與智慧不斷的給客戶帶來驚喜。創新互聯建站推出甌海免費做網站回饋大家。

查詢被鎖表

select?request_session_id?spid,OBJECT_NAME(resource_associated_entity_id)?tableName?

from?sys.dm_tran_locks?where?resource_type='OBJECT'

查詢后會返回一個包含spid和tableName列的表.

其中spid是進程名,tableName是表名.

2.了解到了究竟是哪個進程鎖了哪張表后,需要通過進程找到鎖表的主機.

查詢主機名

exec?sp_who2?'xxx'

xxx就是spid列的進程,檢索后會列出很多信息,其中就包含主機名.

3.通過spid列的值進行關閉進程.

關閉進程

declare?@spid?int

Set?@spid?=?xxx?--鎖表進程

declare?@sql?varchar(1000)

set?@sql='kill?'+cast(@spid?as?varchar)

exec(@sql)

PS:有些時候強行殺掉進程是比較危險的,所以最好可以找到執行進程的主機,在該機器上關閉進程.

sqlserver鎖表機制

這個問題要具體分析:

第一,事務隔離級別基本兩種模式,一種是阻塞式(read committed,repeatable read,serializable)

,一種是非阻塞式(read uncommitted,snapshot)。

默認是read committed,這種情況一般在更新表的時候,如果不使用hint 提示,基本是先對表添加IX鎖,級別不算高,基本和其他鎖兼容,但是repeatable read,serializable 事務隔離級別就會先對表添加IX鎖,然后向X鎖轉化,而X鎖和大多數鎖都不兼容,容易發生表阻塞。

第二種隔離級別不會有以上問題,但是又引入了其它的問題。

以上是一種情況。

另外一種就是 鎖升級,一個鎖是96B內存,如果太多,sqlserver就會升級為表鎖,一般是5000以上行級鎖就升級為一個表X鎖。

所以適當的文件分組和表分區 是有必要的。

其次就是資源互相引用導致事務長時間不能釋放,導致真正的死鎖,不過SQL2005以后,這種情況發生的概率很低。

留個問題你自己去想。

兩個SQL,兩個連接,同時執行。

update A set A.NAME=xxx where A.id=55

update A set A.NAME=xxx where A.id=56, 如果 56 不存在你說會發生什么情況呢?

如何處理SQL Server死鎖問題

死鎖,簡而言之,兩個或者多個trans,同時請求對方正在請求的某個對象,導致雙方互相等待。簡單的例子如下:

trans1 trans2

------------------------------------------------------------------------

1.IDBConnection.BeginTransaction 1.IDBConnection.BeginTransaction

2.update table A 2.update table B

3.update table B 3.update table A

4.IDBConnection.Commit 4.IDBConnection.Commit

那么,很容易看到,如果trans1和trans2,分別到達了step3,那么trans1會請求對于B的X鎖,trans2會請求對于A的X鎖,而二者的鎖在step2上已經被對方分別持有了。由于得不到鎖,后面的Commit無法執行,這樣雙方開始死鎖。

好,我們看一個簡單的例子,來解釋一下,應該如何解決死鎖問題。

-- Batch #1

CREATE DATABASE deadlocktest

GO

USE deadlocktest

SET NOCOUNT ON

DBCC TRACEON (1222, -1)

-- 在SQL2005中,增加了一個新的dbcc參數,就是1222,原來在2000下,我們知道,可以執行dbcc

--traceon(1204,3605,-1)看到所有的死鎖信息。SqlServer 2005中,對于1204進行了增強,這就是1222。

GO

IF OBJECT_ID ('t1') IS NOT NULL DROP TABLE t1

IF OBJECT_ID ('p1') IS NOT NULL DROP PROC p1

IF OBJECT_ID ('p2') IS NOT NULL DROP PROC p2

GO

CREATE TABLE t1 (c1 int, c2 int, c3 int, c4 char(5000))

GO

DECLARE @x int

SET @x = 1

WHILE (@x = 1000) BEGIN

INSERT INTO t1 VALUES (@x*2, @x*2, @x*2, @x*2)

SET @x = @x + 1

END

GO

CREATE CLUSTERED INDEX cidx ON t1 (c1)

CREATE NONCLUSTERED INDEX idx1 ON t1 (c2)

GO

CREATE PROC p1 @p1 int AS SELECT c2, c3 FROM t1 WHERE c2 BETWEEN @p1 AND @p1+1

GO

CREATE PROC p2 @p1 int AS

UPDATE t1 SET c2 = c2+1 WHERE c1 = @p1

UPDATE t1 SET c2 = c2-1 WHERE c1 = @p1

GO

上述sql創建一個deadlock的示范數據庫,插入了1000條數據,并在表t1上建立了c1列的聚集索引,和c2列的非聚集索引。另外創建了兩個sp,分別是從t1中select數據和update數據。

好,打開一個新的查詢窗口,我們開始執行下面的query:

-- Batch #2

USE deadlocktest

SET NOCOUNT ON

WHILE (1=1) EXEC p2 4

GO

開始執行后,然后我們打開第三個查詢窗口,執行下面的query:

-- Batch #3

USE deadlocktest

SET NOCOUNT ON

CREATE TABLE #t1 (c2 int, c3 int)

GO

WHILE (1=1) BEGIN

INSERT INTO #t1 EXEC p1 4

TRUNCATE TABLE #t1

END

GO

開始執行,哈哈,很快,我們看到了這樣的錯誤信息:

Msg 1205, Level 13, State 51, Procedure p1, Line 4

Transaction (Process ID 54) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction.

spid54發現了死鎖。

那么,我們該如何解決它?

在SqlServer 2005中,我們可以這么做:

1.在trans3的窗口中,選擇EXEC p1 4,然后right click,看到了菜單了嗎?選擇Analyse Query in Database Engine Tuning Advisor。

2.注意右面的窗口中,wordload有三個選擇:負載文件、表、查詢語句,因為我們選擇了查詢語句的方式,所以就不需要修改這個radio option了。

3.點左上角的Start Analysis按鈕

4.抽根煙,回來后看結果吧!出現了一個分析結果窗口,其中,在Index Recommendations中,我們發現了一條信息:大意是,在表t1上增加一個非聚集索引索引:t2+t1。

5.在當前窗口的上方菜單上,選擇Action菜單,選擇Apply Recommendations,系統會自動創建這個索引。

重新運行batch #3,呵呵,死鎖沒有了。

這種方式,我們可以解決大部分的Sql Server死鎖問題。那么,發生這個死鎖的根本原因是什么呢?為什么增加一個non clustered index,問題就解決了呢? 這次,我們分析一下,為什么會死鎖呢?再回顧一下兩個sp的寫法:

CREATE PROC p1 @p1 int AS

SELECT c2, c3 FROM t1 WHERE c2 BETWEEN @p1 AND @p1+1

GO

CREATE PROC p2 @p1 int AS

UPDATE t1 SET c2 = c2+1 WHERE c1 = @p1

UPDATE t1 SET c2 = c2-1 WHERE c1 = @p1

GO

很奇怪吧!p1沒有insert,沒有delete,沒有update,只是一個select,p2才是update。這個和我們前面說過的,trans1里面updata A,update B;trans2里面upate B,update A,根本不貼邊啊!

那么,什么導致了死鎖?

需要從事件日志中,看sql的死鎖信息:

Spid X is running this query (line 2 of proc [p1], inputbuffer “… EXEC p1 4 …”):

SELECT c2, c3 FROM t1 WHERE c2 BETWEEN @p1 AND @p1+1

Spid Y is running this query (line 2 of proc [p2], inputbuffer “EXEC p2 4”):

UPDATE t1 SET c2 = c2+1 WHERE c1 = @p1

The SELECT is waiting for a Shared KEY lock on index t1.cidx. The UPDATE holds a conflicting X lock.

The UPDATE is waiting for an eXclusive KEY lock on index t1.idx1. The SELECT holds a conflicting S lock.

首先,我們看看p1的執行計劃。怎么看呢?可以執行set statistics profile on,這句就可以了。下面是p1的執行計劃

SELECT c2, c3 FROM t1 WHERE c2 BETWEEN @p1 AND @p1+1

|--Nested Loops(Inner Join, OUTER REFERENCES:([Uniq1002], [t1].[c1]))

|--Index Seek(OBJECT:([t1].[idx1]), SEEK:([t1].[c2] = [@p1] AND [t1].[c2] = [@p1]+(1)) ORDERED FORWARD)

|--Clustered Index Seek(OBJECT:([t1].[cidx]), SEEK:([t1].[c1]=[t1].[c1] AND [Uniq1002]=[Uniq1002]) LOOKUP ORDERED FORWARD)

我們看到了一個nested loops,第一行,利用索引t1.c2來進行seek,seek出來的那個rowid,在第二行中,用來通過聚集索引來查找整行的數據。這是什么?就是bookmark lookup啊!為什么?因為我們需要的c2、c3不能完全的被索引t1.c1帶出來,所以需要書簽查找。

好,我們接著看p2的執行計劃。

UPDATE t1 SET c2 = c2+1 WHERE c1 = @p1

|--Clustered Index Update(OBJECT:([t1].[cidx]), OBJECT:([t1].[idx1]), SET:([t1].[c2] = [Expr1004]))

|--Compute Scalar(DEFINE:([Expr1013]=[Expr1013]))

|--Compute Scalar(DEFINE:([Expr1004]=[t1].[c2]+(1), [Expr1013]=CASE WHEN CASE WHEN ...

|--Top(ROWCOUNT est 0)

|--Clustered Index Seek(OBJECT:([t1].[cidx]), SEEK:([t1].[c1]=[@p1]) ORDERED FORWARD)

通過聚集索引的seek找到了一行,然后開始更新。這里注意的是,update的時候,它會申請一個針對clustered index的X鎖的。

實際上到這里,我們就明白了為什么update會對select產生死鎖。update的時候,會申請一個針對clustered index的X鎖,這樣就阻塞住了(注意,不是死鎖!)select里面最后的那個clustered index seek。死鎖的另一半在哪里呢?注意我們的select語句,c2存在于索引idx1中,c1是一個聚集索引cidx。問題就在這里!我們在p2中更新了c2這個值,所以sqlserver會自動更新包含c2列的非聚集索引:idx1。而idx1在哪里?就在我們剛才的select語句中。而對這個索引列的更改,意味著索引集合的某個行或者某些行,需要重新排列,而重新排列,需要一個X鎖。

SO………,問題就這樣被發現了。

總結一下,就是說,某個query使用非聚集索引來select數據,那么它會在非聚集索引上持有一個S鎖。當有一些select的列不在該索引上,它需要根據rowid找到對應的聚集索引的那行,然后找到其他數據。而此時,第二個的查詢中,update正在聚集索引上忙乎:定位、加鎖、修改等。但因為正在修改的某個列,是另外一個非聚集索引的某個列,所以此時,它需要同時更改那個非聚集索引的信息,這就需要在那個非聚集索引上,加第二個X鎖。select開始等待update的X鎖,update開始等待select的S鎖,死鎖,就這樣發生鳥。

那么,為什么我們增加了一個非聚集索引,死鎖就消失鳥?我們看一下,按照上文中自動增加的索引之后的執行計劃:

SELECT c2, c3 FROM t1 WHERE c2 BETWEEN @p1 AND @p1+1

|--Index Seek(OBJECT:([deadlocktest].[dbo].[t1].[_dta_index_t1_7_2073058421__K2_K1_3]), SEEK:([deadlocktest].[dbo].[t1].[c2] = [@p1] AND [deadlocktest].[dbo].[t1].[c2] = [@p1]+(1)) ORDERED FORWARD)

哦,對于clustered index的需求沒有了,因為增加的覆蓋索引已經足夠把所有的信息都select出來。就這么簡單。

實際上,在sqlserver 2005中,如果用profiler來抓eventid:1222,那么會出現一個死鎖的圖,很直觀的說。

下面的方法,有助于將死鎖減至最少(詳細情況,請看SQLServer聯機幫助,搜索:將死鎖減至最少即可。

按同一順序訪問對象。

避免事務中的用戶交互。

保持事務簡短并處于一個批處理中。

使用較低的隔離級別。

使用基于行版本控制的隔離級別。

將 READ_COMMITTED_SNAPSHOT 數據庫選項設置為 ON,使得已提交讀事務使用行版本控制。

使用快照隔離。

使用綁定連接。

如何掌握SQLServer的鎖機制

SQL SERVER里的鎖機制:

NOLOCK(不加鎖)

此選項被選中時,SQL Server 在讀取或修改數據時不加任何鎖。 在這種情況下,用戶有可能讀取到未完成事務(Uncommited Transaction)或回滾(Roll Back)中的數據, 即所謂的“臟數據”。

HOLDLOCK(保持鎖)

此選項被選中時,SQL Server 會將此共享鎖保持至整個事務結束,而不會在途中釋放。 例如,“ SELECT * FROM my_table HOLDLOCK”就要求在整個查詢過程中,保持對表的鎖定,直到查詢完成才釋放鎖定。

UPDLOCK(修改鎖)

此選項被選中時,SQL Server 在讀取數據時使用修改鎖來代替共享鎖,并將此鎖保持至整個事務或命令結束。使用此選項能夠保證多個進程能同時讀取數據但只有該進程能修改數據。

TABLOCK(表鎖)

此選項被選中時,SQL Server 將在整個表上置共享鎖直至該命令結束。 這個選項保證其他進程只能讀取而不能修改數據。

PAGLOCK(頁鎖)

此選項為默認選項, 當被選中時,SQL Server 使用共享頁鎖。

TABLOCKX(排它表鎖)

此選項被選中時,SQL Server 將在整個表上置排它鎖直至該命令或事務結束。這將防止其他進程讀取或修改表中的數據。

關于Sqlserver數據庫 鎖機制的小疑問,下種情況是否需要加入鎖機制

不需要,就算確實用戶同時執行,數據庫的操作機制是有隊列的,所以不存在并發情況。

鎖基本用不到,我反正開發了5年了沒用到過。

你要了解死鎖發生的情況,一般是用事務的時候可能會碰到死鎖,你申請了A資源,鎖住了A然后申請B資源,其他人申請了B資源,然后申請A,這樣就互不相讓,導致A,B資源都不可訪問了,不過其他數據我不知道,SQLSERVER發生這種死鎖不是一直鎖死的,過幾分鐘就會發現這個死鎖,把鎖釋放掉,2個事務都失敗。

本文標題:sqlserver列鎖,sqlserver行鎖
當前路徑:http://m.kartarina.com/article16/dscgsdg.html

成都網站建設公司_創新互聯,為您提供網站收錄微信公眾號品牌網站制作自適應網站電子商務網站內鏈

廣告

聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯

成都定制網站網頁設計
欧美日韩激情_美女国产一区_国产精品久久久久影院日本_69xxx在线
精品电影一区二区| 91丨国产丨九色丨pron| 有码一区二区三区| 亚洲私人影院在线观看| 中文字幕一区二区三区av| 中文字幕欧美日韩一区| 国产精品一区二区无线| 精品一区二区在线视频| 激情成人午夜视频| 国产一区二三区| 国产精品福利一区| 亚洲天堂久久久久久久| 亚洲电影一区二区| 美日韩一区二区| 狠狠色2019综合网| 成人午夜精品在线| 欧美中文字幕一区二区三区| 欧美日韩精品一区二区在线播放| 日韩免费高清av| 成人av在线网站| 日本韩国精品在线| 欧美一区二区三区四区视频| av午夜一区麻豆| 欧美亚洲禁片免费| 日韩免费视频一区二区| 中文字幕av一区二区三区高| 亚洲男帅同性gay1069| 日韩精品五月天| 国产99一区视频免费| 亚洲永久精品大片| 美女视频第一区二区三区免费观看网站 | 蜜臀久久99精品久久久久宅男| 久久99精品一区二区三区 | 一区二区三区在线视频观看| 日韩综合小视频| 国产suv精品一区二区三区| 色香蕉久久蜜桃| 久久亚洲一区二区三区四区| 亚洲综合一区二区三区| 韩国欧美一区二区| 欧美综合在线视频| 久久在线免费观看| 亚洲va在线va天堂| 成人午夜电影久久影院| 91精品国产欧美一区二区成人 | 久久99国产精品成人| 99视频一区二区| 精品美女一区二区三区| 一区二区三区四区av| 国产精品一卡二卡| 91精品国产综合久久国产大片| 亚洲国产岛国毛片在线| 久久aⅴ国产欧美74aaa| 欧美日韩国产大片| 一区二区三区四区在线播放 | 蜜臀va亚洲va欧美va天堂| 国产精品成人一区二区艾草| 日韩欧美第一区| 亚洲日本成人在线观看| 成人免费毛片嘿嘿连载视频| 欧美日韩国产另类不卡| 自拍偷在线精品自拍偷无码专区 | 91久久精品一区二区三| 中文字幕成人av| 国产校园另类小说区| 男女性色大片免费观看一区二区| 一本色道久久综合狠狠躁的推荐| 中文字幕av一区二区三区免费看| 精品久久久三级丝袜| 热久久免费视频| 56国语精品自产拍在线观看| 一区二区日韩电影| 欧洲一区二区三区在线| 亚洲自拍都市欧美小说| 在线观看91视频| 亚洲午夜成aⅴ人片| 欧美无砖专区一中文字| 一区二区三区四区蜜桃 | 国产成人精品影视| 欧美videossexotv100| 久久精品国产99久久6| 日韩久久免费av| 国产一区二区在线电影| av中文一区二区三区| 激情综合亚洲精品| 日韩成人免费电影| 亚洲私人黄色宅男| 国产喷白浆一区二区三区| 亚洲一区精品在线| 欧美在线一区二区| 丝袜美腿亚洲一区| 精品日韩成人av| 韩国精品一区二区| 日韩美女精品在线| 欧美午夜精品一区二区三区| 日韩和的一区二区| 日韩欧美卡一卡二| 97se亚洲国产综合在线| 亚洲一区自拍偷拍| 欧美mv日韩mv| 99久久99久久久精品齐齐| 亚洲www啪成人一区二区麻豆| 欧美一二三四在线| 成人午夜又粗又硬又大| 一区二区三区中文在线观看| 精品欧美一区二区久久| 91丝袜国产在线播放| 日韩av一级片| 综合久久久久久久| 日韩免费观看2025年上映的电影| 波多野洁衣一区| 日本不卡一区二区三区| 国产日产欧美精品一区二区三区| 欧美影院一区二区三区| 国内精品免费**视频| 一区二区三区高清| 国产欧美一区二区在线观看| 欧美日韩国产综合视频在线观看 | 国产精品乱人伦中文| 91精品国产色综合久久久蜜香臀| 国产精品视频观看| 欧美日韩在线亚洲一区蜜芽| 国产成人av电影在线播放| 亚洲一卡二卡三卡四卡| 国产欧美一区二区三区在线看蜜臀 | 久久99精品国产麻豆不卡| 亚洲欧洲精品一区二区三区不卡| 日韩一区二区三区四区| 欧洲人成人精品| 成人avav在线| 国产a级毛片一区| 久久精品久久99精品久久| 性感美女久久精品| 亚洲视频一区在线| 国内精品国产成人| 天堂资源在线中文精品| 亚洲欧美一区二区三区久本道91| 国产欧美一区二区精品忘忧草| 91精品福利在线一区二区三区| 欧美三级在线视频| 一区二区三区四区高清精品免费观看 | 捆绑调教一区二区三区| 亚洲一级不卡视频| 亚洲精品大片www| 亚洲色图另类专区| 亚洲欧洲精品天堂一级| 中文字幕免费在线观看视频一区| 久久久美女毛片| 久久九九国产精品| 久久精品欧美一区二区三区不卡| 日韩精品一区二区在线| 日韩视频免费观看高清在线视频| 欧美美女网站色| 欧美一区二区不卡视频| 免费成人在线网站| 日本免费在线视频不卡一不卡二| 亚洲高清免费在线| 亚州成人在线电影| 免费在线成人网| 另类小说视频一区二区| 激情图片小说一区| 高清在线不卡av| 9l国产精品久久久久麻豆| 91美女蜜桃在线| 在线视频欧美精品| 欧美日韩精品系列| 91精品国产综合久久婷婷香蕉| 麻豆成人久久精品二区三区红 | 一区二区三区在线观看国产| 亚洲欧美电影院| 亚洲成人久久影院| 国产又粗又猛又爽又黄91精品| 国产成人午夜99999| 91久久香蕉国产日韩欧美9色| 在线精品亚洲一区二区不卡| 亚洲电影欧美电影有声小说| 美女在线视频一区| bt7086福利一区国产| 5566中文字幕一区二区电影| 精品福利一二区| 成人免费一区二区三区视频| 亚洲 欧美综合在线网络| 国产电影精品久久禁18| 日本高清不卡在线观看| 日韩欧美久久一区| 亚洲精选一二三| 激情另类小说区图片区视频区| 91欧美激情一区二区三区成人| 91麻豆精品国产自产在线| 不卡电影一区二区三区| 8v天堂国产在线一区二区| 久久九九久久九九| 午夜精品久久一牛影视| 国产91精品在线观看| 欧美日韩国产三级| 亚洲欧洲国产日本综合| 蜜桃视频第一区免费观看| 91麻豆精东视频| 国产亚洲精品资源在线26u| 天天综合日日夜夜精品|