亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 數據庫 > SQL Server > 正文

SQL2008中SQL應用之-阻塞(Blocking)應用分析

2020-10-30 19:09:42
字體:
來源:轉載
供稿:網友
通常短時間的阻塞沒有問題,且是較忙的應用程序所需要的。然而,設計糟糕的應用程序會導致長時間的阻塞,這就不必要地鎖定了資源,而且阻塞了其他會話讀取和更新它們。

在SQL Server中,一個阻塞的進程會無限期地保持阻塞,或者直到它超時(根據set lock_timeout)、服務器關閉、進程被殺死、連接完成了更新或者其他發生在原始事務上的操作導致它釋放了資源上的鎖。

發生長時間阻塞的原因如下:

1、在一個沒有索引的表上的過量的行鎖會導致SQL Server得到一個鎖,從而阻塞其他事務。

2、應用程序打開一個事務,并在事務保持打開的時候要求用戶進行反饋或交互。這通常是讓最終用戶在GUI上輸入數據而保持事務打開的時候發生。此時,事務引用的任何資源都會被占據。

3、事務BEGIN后查詢的數據可能在事務事務開始前被調用

4、查詢不恰當地使用鎖定提示。例如,應用程序僅使用很少的行,但卻使用一個表鎖提示

5、應用程序使用長時間運行的事務,在一個事務中更新了很多行或很多表(把一個大量更新的事務變成多個更新較少的事務有助于改善并發性)

一、找到并解決阻塞進程

下面我們演示使用SQL Server動態管理視圖sys.dm_os_waiting_tasks找出阻塞進程,該視圖用于代替早期SQL Server版本中的系統存儲過程sp_who

找出阻塞的進程后,我們使用sys.dm_exec_sql_text動態管理函數和sys.dm_exec_Connections(DMV)找出正在執行的查詢的SQL文本,然后強制結束進程。

強制結束進程,我們使用kill命令。kill的用法,請參看MSDN:http://msdn.microsoft.com/zh-cn/library/ms173730.aspx

該命令有三個參數:

session ID    要終止的進程的會話 ID。session ID 是在建立連接時為每個用戶連接分配的唯一整數 (int)。在連接期間,會話 ID 值與該連接捆綁在一起。連接結束時,則釋放該整數值,并且可以將它重新分配給新的連接。使用 KILL session ID 可終止與指定的會話 ID 關聯的常規非分布式事務和分布式事務。
UOW    標識分布式事務的工作單元 (UOW) ID。UOW 是可從 sys.dm_tran_locks 動態管理視圖的 request_owner_guid 列中獲取的 GUID。也可從錯誤日志中或通過 MS DTC 監視器獲取 UOW。有關監視分布式事務的詳細信息,請參閱 MS DTC 文檔。使用 KILL UOW 可終止孤立的分布式事務。這些事務不與任何真實的會話 ID 相關聯,與虛擬的會話 ID = '-2' 相關聯。可使標識孤立事務變得更為簡單,其方法是查詢 sys.dm_tran_locks、sys.dm_exec_sessionssys.dm_exec_requests 動態管理視圖中的會話 ID 列。
WITH STATUSONLY    生成由于更早的 KILL 語句而正在回滾的指定 session ID 或 UOW 的進度報告。KILL WITH STATUSONLY 不終止或回滾 session ID 或 UOW,該命令只顯示當前的回滾進度。

在第一個查詢窗口:

復制代碼 代碼如下:

BEGIN TRAN
UPDATE Production.ProductInventory
SET Quantity = 400
WHERE ProductID = 1 AND
LocationID = 1

第二個窗口:
復制代碼 代碼如下:

UPDATE Production.ProductInventory
SET Quantity = 406
WHERE ProductID = 1 AND
LocationID = 1

第三個窗口:
復制代碼 代碼如下:

SELECT blocking_session_id, wait_duration_ms, session_id
FROM sys.dm_os_waiting_tasks
WHERE blocking_session_id IS NOT NULL

/*
blocking_session_id wait_duration_ms session_id
52 23876 54
*/

可以看出是SessionID為52的會話阻塞了SessionID為54的會話。

那么,52正在干啥壞事呢?在第三個窗口中執行:
復制代碼 代碼如下:

SELECT t.text
FROM sys.dm_exec_connections c
CROSS APPLY sys.dm_exec_sql_text (c.most_recent_sql_handle) t
WHERE c.session_id = 54

/*
text
(@1 int,@2 tinyint,@3 tinyint)UPDATE [Production].[ProductInventory] set [Quantity] = @1 WHERE
[ProductID]=@2 AND [LocationID]=@3
*/

注意:這并不是第一個查詢窗口中的原SQL語句,SQL Server進行了自動參數化計劃緩存(預編譯)。
我們強制終止會話。在第三個窗口中執行:
復制代碼 代碼如下:

kill 52

注意:窗口一的語句和窗口二的語句均終止。

提示:第三個語句中,使用sys.dm_exec_connections(DMV)返回了Session ID為53的most_recent_sql_handle列。這是SQL文本在內存中的指針。作為sys.dm_exec_sql_text動態管理函數的輸入參數使用。從sys.dm_exec_sql_text返回了text列,該列顯示了阻塞進程的SQL文本。如果阻塞成串,必須通過blocking_session_id和session_ID列仔細查看每一個阻塞進程,直到發現原始的阻塞進程。


二、配置語句等待鎖釋放的時長

如果有一個事務或語句被阻塞,意味著它在等待資源上的鎖被釋放。我們可以事先通過set lock_Timeout來設定需要等待的時間。

語法如下:SET LOCK_TIMEOUT time_period

參數以毫秒為單位。超過時會返回鎖定錯誤。示例:

在第一個窗口中執行:

復制代碼 代碼如下:

USE AdventureWorks
BEGIN TRAN
UPDATE Production.ProductInventory
SET Quantity = 400
WHERE ProductID = 1 AND
LocationID = 1

在第二個窗口中執行:
復制代碼 代碼如下:

USE AdventureWorks
SET LOCK_TIMEOUT 1000
UPDATE Production.ProductInventory
SET Quantity = 406
WHERE ProductID = 1 AND
LocationID = 1

/*
1秒后的執行結果
Msg 1222, Level 16, State 51, Line 3
Lock request time out period exceeded.
The statement has been terminated.
*/

解析:在這個示例中,我們設置了鎖超時時間為1000毫秒,即1秒。這個設置不會影響資源被進程占有的時間,只會影響等待另一個進程釋放資源訪問的時間。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产婷婷色综合av蜜臀av| 亚洲激情成人网| 久久91精品国产| 欧美极品少妇xxxxⅹ免费视频| 国产z一区二区三区| 欧美日韩成人在线播放| 91chinesevideo永久地址| 国模gogo一区二区大胆私拍| 国产成人精品视频在线| 亚洲bt欧美bt日本bt| 欧洲亚洲在线视频| 国模视频一区二区三区| 91福利视频在线观看| 精品中文视频在线| 国产精自产拍久久久久久| 欧美在线免费观看| 亚洲欧美激情精品一区二区| 国产区亚洲区欧美区| 国产日韩欧美黄色| 日韩网站免费观看| 欧美成人高清视频| 欧美国产日本高清在线| 欧美国产高跟鞋裸体秀xxxhd| 亚洲精品国精品久久99热| 97超碰国产精品女人人人爽| 亚洲国产日韩精品在线| 欧美成人午夜视频| 国产成人精品免费久久久久| 欧美另类69精品久久久久9999| 国产日韩欧美成人| 国产欧美一区二区三区在线| 国产精品久久久久久久久免费看| 欧美乱妇40p| 日韩国产高清视频在线| 欧美高清一级大片| 亚洲天堂免费视频| 国产成人精品一区二区在线| 日韩精品免费在线视频观看| 国产精品福利网站| 欧美日韩国产成人| 欧美成人午夜免费视在线看片| 亚洲精品久久久久| 国产日韩欧美综合| 17婷婷久久www| 日本不卡免费高清视频| 日韩va亚洲va欧洲va国产| 国产欧美日韩最新| 久久久亚洲影院| 国产一区二区三区三区在线观看| 日韩暖暖在线视频| 成人福利在线视频| 国产午夜精品一区二区三区| 91亚洲国产成人精品性色| 九九久久久久99精品| 欧美整片在线观看| 久久亚洲精品一区| 久久精品国产久精国产思思| 久热99视频在线观看| 亚洲高清一区二| 国产精品久久久久久影视| 日韩专区在线观看| 国产精品毛片a∨一区二区三区|国| 久久影院在线观看| 日韩免费看的电影电视剧大全| 国产精品成人v| 亚洲精品动漫100p| 成人乱色短篇合集| 中文字幕日韩av电影| 国产在线精品播放| 亚洲自拍av在线| 这里只有视频精品| 久久精品国产一区二区电影| 亚洲精品成a人在线观看| 国产精品av电影| 欧美亚洲视频在线观看| 91av在线精品| 日韩va亚洲va欧洲va国产| 亚洲肉体裸体xxxx137| 国产91在线播放九色快色| 奇米4444一区二区三区| 国产精品久久久久久久久借妻| 欧美亚洲国产另类| 热99精品里视频精品| 日韩欧美国产中文字幕| 日韩在线视频播放| 国产精品第2页| 久久久精品在线| 成人av在线天堂| 一个人看的www欧美| 91国在线精品国内播放| 岛国av一区二区三区| 奇米一区二区三区四区久久| 欧美专区国产专区| 精品激情国产视频| 国产成人精品免费久久久久| 色综合91久久精品中文字幕| 日韩中文字幕网| 大胆欧美人体视频| 国产盗摄xxxx视频xxx69| 国产精品免费久久久久久| 91免费人成网站在线观看18| 97超级碰碰人国产在线观看| 亚洲最大成人免费视频| 国产成人精品免高潮在线观看| 精品福利在线观看| 亚洲天堂男人的天堂| 久久久av亚洲男天堂| 91sao在线观看国产| 国产欧美精品一区二区三区介绍| 久久久久久久久久国产| 精品久久久久久国产| 亚洲男人的天堂在线播放| 亚洲精品视频中文字幕| 欧美日韩在线第一页| 亚洲欧美成人一区二区在线电影| 国产美女直播视频一区| xvideos成人免费中文版| 欧美中文在线观看| 欧美一区在线直播| 亚洲视频在线视频| 久久久久久久999| 国产精品免费久久久| 尤物yw午夜国产精品视频| 国产美女扒开尿口久久久| 国产精品视频久久久| 成人精品视频99在线观看免费| 性欧美激情精品| 国产精品自产拍在线观| 久久深夜福利免费观看| 日本欧美在线视频| 97精品视频在线播放| 日本中文字幕成人| 日韩小视频在线观看| 欧美日韩国产麻豆| 97视频在线观看免费高清完整版在线观看| 91精品国产成人www| 久久久久久国产精品久久| 国产欧美中文字幕| 久久久国产影院| 亚洲欧美成人在线| 国产剧情久久久久久| 日韩在线国产精品| 中文字幕欧美亚洲| www.久久久久久.com| 97热精品视频官网| 国产一区香蕉久久| 青青草一区二区| 日韩成人激情在线| 成人免费网站在线看| 欧美大全免费观看电视剧大泉洋| 国产精品丝袜久久久久久不卡| 久久精品视频va| 欧美亚洲另类激情另类| 中文字幕亚洲一区二区三区五十路| 亚洲激情在线视频| 日韩精品免费观看| 日韩精品视频中文在线观看| 色视频www在线播放国产成人| 丝袜亚洲另类欧美重口| 亚洲国产精品推荐| 日韩在线视频导航| 色偷偷噜噜噜亚洲男人| 日产精品99久久久久久| 日韩成人激情影院|