1. 程式人生 > >第十六章——處理鎖、阻塞和死鎖(2)——偵測阻塞和阻塞查詢

第十六章——處理鎖、阻塞和死鎖(2)——偵測阻塞和阻塞查詢

前言:

如果一個事務正在等待一些給其他事務鎖定的資源。這個事務就被成為“被阻塞的事務”。反過來,引起阻塞的事務,也就是鎖定資源並造成其他事務等待的事務叫做“正在阻塞的事務”。

長時間執行事務會阻塞其他事務和查詢,使他們等待長時間。在繁重的系統中,很多時候我們會遇到阻塞問題,如果一個事務因為阻塞未完成。會造成一些列的等待鏈。

本文將介紹如何發現並馬上解決這方面的問題。

準備工作:

本例依舊使用SQLServer2012上的AdventureWorks2012資料庫。

步驟:

1、 連到SQLServer2012的AdventureWorks2012資料庫。

2、 新建視窗並輸入:

USE AdventureWorks2012
GO
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ
GO

--開啟事務
BEGIN TRANSACTION

--獲取會話ID
SELECT  @@SPID AS Connection1_SessionID

SELECT  *
FROM    Sales.SalesOrderDetail
WHERE   SalesOrderDetailID = 121316


3、 執行完之後,截圖如下:


4、 新開另外一個視窗,輸入下面程式碼去開啟另外一個事務,留意UPDATE語句,將不會執行,因為在等待第二步中的事務:

USE AdventureWorks2012
GO

--開啟事務
BEGIN TRANSACTION

UPDATE  Sales.SalesOrderDetail
SET     OrderQty = 10
WHERE   SalesOrderDetailID = 121316

COMMIT TRANSACTION


5、 再開啟一個事務,輸入以下程式碼查詢被阻塞和正在阻塞的查詢: 

SELECT  R.session_id AS BlockedSessionID ,
        S.session_id AS BlockingSessionID ,
        Q1.text AS BlockedSession_TSQL ,
        Q2.text AS BlockingSession_TSQL ,
        C1.most_recent_sql_handle AS BlockedSession_SQLHandle ,
        C2.most_recent_sql_handle AS BlockingSession_SQLHandle ,
        S.original_login_name AS BlockingSession_LoginName ,
        S.program_name AS BlockingSession_ApplicationName ,
        S.host_name AS BlockingSession_HostName
FROM    sys.dm_exec_requests AS R
        INNER JOIN sys.dm_exec_sessions AS S ON R.blocking_session_id = S.session_id
        INNER JOIN sys.dm_exec_connections AS C1 ON R.session_id = C1.most_recent_session_id
        INNER JOIN sys.dm_exec_connections AS C2 ON S.session_id = C2.most_recent_session_id
        CROSS APPLY sys.dm_exec_sql_text(C1.most_recent_sql_handle) AS Q1
        CROSS APPLY sys.dm_exec_sql_text(C2.most_recent_sql_handle) AS Q2



6、 因為第一個連線佔用了資源,阻塞了其他事務,所以這裡要結束這個程序:

KILL 68
GO



7、 換回第二個查詢介面,發現update操作已經成功完成。上面的程序號根據不同機器而定。

分析:

在本例中,把事務隔離級別設為REPEATABLE READ,因為在這個隔離級別中,在資源上的共享鎖將持續到事務完成。所以當從表中查詢資料是,該值上會加上共享鎖。在事務提交或回滾前不會釋放。

當執行第二個連線的update語句時,不能完成,因為被第一個事務阻塞了,且在REPEATABLE READ下共享鎖不釋放。

為了標識阻塞和被阻塞的請求,需要用到下面的DMO:

1、 dm_exec_requests

2、 dm_exec_sessions

3、 dm_exec_connections

4、 dm_exec_sql_text

相關推薦

——處理阻塞2——阻塞阻塞查詢

前言: 如果一個事務正在等待一些給其他事務鎖定的資源。這個事務就被成為“被阻塞的事務”。反過來,引起阻塞的事務,也就是鎖定資源並造成其他事務等待的事務叫做“正在阻塞的事務”。 長時間執行事務會阻塞其他事務和查詢,使他們等待長時間。在繁重的系統中,很多時候我們會遇到阻塞問題,

處理阻塞2——阻塞阻塞查詢

前言: 如果一個事務正在等待一些給其他事務鎖定的資源。這個事務就被成為“被阻塞的事務”。反過來,引起阻塞的事務,也就是鎖定資源並造成其他事務等待的事務叫做“正在阻塞的事務”。 長時間執行事務會阻塞其他事務和查詢,使他們等待長時間。在繁重的系統中,很多時候我們會遇到阻塞問題,如果一個事務因為阻塞未完成。會造成

斯坦福大學-自然語言處理入門 筆記 一課 最大熵模型與判別模型2

一、最大熵模型 1、模型介紹 基本思想:我們希望資料是均勻分佈的,除非我們有其他的限制條件讓給我們相信資料不是均勻分佈的。均勻分佈代表高熵(high entropy)。所以,最大熵模型的基本思想就是我們要找的分佈是滿足我們限制條件下,同時熵最高的分佈。 熵:表示分佈的不

跟我學SpringCloud | 篇:微服務利劍之APM平臺Pinpoint

目錄 SpringCloud系列教程 | 第十六篇:微服務利劍之APM平臺(二)Pinpoint 1. Pinpoint概述 2. Pinpoint主要特性 3. Pinpoint優勢 4.

二週專案3 - 圖遍歷演算法實現2

/*Copyright (c) 2015, 煙臺大學計算機與控制工程學院 * All rights reserved. * 檔名稱:H1.cpp * 作者:辛志勐 * 完成日期:2015年11月23日 * 版本號:VC6.0 * 問題描述:廣度優先遍歷——BFS * 輸入描述:無 * 程式輸出:圖的

一週 專案1 二叉樹構造演算法2

問題描述及程式碼: /* copyright (t) 2016,煙臺大學計算機學院 *All rights reserved. *檔名稱:00.cpp *作者:白曉娟 *完成日期:2016年11月17日 *版本號;v1.0 *問題描述:由先序序列和中序

“全棧2019”Java:二進位制八進位制進位制

難度 初級 學習時間 10分鐘 適合人群 零基礎 開發語言 Java 開發環境 JDK v11 IntelliJ IDEA v2018.3 文章原文連結 “全棧2019”Java第十四章:二進位制、八進位制、十六進位制 下一章 “全棧2019”Java第十五章:Unic

“全棧2019”Java:靜態非靜態內部類訪問權限

inf 內部類 靜態 alt intel com 詳解 int 文章 難度 初級 學習時間 10分鐘 適合人群 零基礎 開發語言 Java 開發環境 JDK v11 IntelliJ IDEA v2018.3 文章原文鏈接 “全棧2019”Java第七十六章:靜態、非靜

“全棧2019”Java:靜態非靜態內部類訪問許可權

難度 初級 學習時間 10分鐘 適合人群 零基礎 開發語言 Java 開發環境 JDK v11 IntelliJ IDEA v2018.3 文章原文連結 “全棧2019”Java第七十六章:靜態、非靜態內部類訪問許可權 下一章 “全棧2019”Java第七十七章:抽象內

Java語言程式設計 16.616.716.816.9

程式小白,希望和大家多交流,共同學習 16.6 //文字域的設定方法 import javafx.application.Application; import javafx.stage.Stage; import javafx.scene.Sc

鳥哥的Linux私房菜(伺服器)- 檔案伺服器之二: SAMBA 伺服器

時至今日,印表機的網路功能已經很強悍了!甚至也有支援無線網路的印表機,因此每臺印表機都可以獨立作為各個 PC 的獨自的印表機,老實說也沒有必要進行 Samba 的網路印表機伺服器啦!但畢竟還是有些比較舊型的機種, 或者買不起有內建網路的印表機時,那麼 Samba 的印表機伺服器還是有存在的價值囉。 在

快學scala習題——XML處理

本章主要講解對XML的處理,要處理xml需要引入scala-xml-x.x.x.x.jar包,建立普通scala 類不會自動新增此jar包,需要手動引入之後就可以使用了 1.(0)得到什麼,(0)(0)又得到什麼,為什麼? 仍然為<fred/>

《HTTP 權威指南》筆記:& 國際化內容協商與轉碼

二進制 首部 指南 生成文檔 緩存 -type nat lang 緩存代理 《HTTP 權威指南》筆記:第十六章 國際化 客戶端通過在請求報文中的 Accept-Language 首部和 Accept-Charset 首部來告知服務器:“我理解這些語言.&rd

【MySQL必知必會】 創建高級聯結

類型 where子句 contact items order by 其他 mysq custom 必知必會 1、使用表別名   好處:   a、縮短SQL語句。   b、允許在單條SELECT語句中多次使用相同的表。   輸入:   SELECT  cust_name,cu

-進程線程

lan 進程 命名 永遠 大小 無法使用 inux wait 沒有 對於操作系統來說, 一個任務就是一個進程(Process) 進程內的這些“子任務”稱為線程(Thread) 真正的並行執行多任務只能在多核CPU上實現 多任務的實現有3種方式:

算法導論筆記—— 貪心算法

一個 出現 預處理 優化 節點 求解 多選 數據結構 集中 通常用於最優化問題,我們做出一組選擇來達到最優解。每步都追求局部最優。對很多問題都能求得最優解,而且速度比動態規劃方法快得多。 16.1 活動選擇問題 按結束時間排序,然後選擇兼容活動。 定理16.1 考慮任意

沒有銀彈 ---軟件工程中的根本次要問題

測試 未來 接收 增長 ada tail 進行 tro 困難 http://blog.csdn.net/zuochao_2013/article/details/73614151 在未來的十年內,無論是在技術還是管理方法上,都看不出有任何突破性的進步,能夠保證在十年內大幅度

進擊的Python【】:Web前端基礎之jQuery

name cat 隱藏 function wid get val 綁定 des 進擊的Python【第十六章】:Web前端基礎之jQuery 一、什麽是 jQuery ? jQuery是一個JavaScript函數庫。 jQuery是一個輕量級的"寫的少,做的多"的Java

從零開始的linux

rm -rf /* glob通配符的用法詳解從零開始的linux 第十六章路人乙:“啊,小編你越來越過分了,這次居然推遲了一天才來!!”(嬉皮笑臉)嘻嘻~~抱歉啦同學們,小編昨天因為做LNMP以及負載均衡的DR工作模式的時候出了點小問題,原理部分與小編理解的有點誤差~~不過小編這麽厲害肯定是已經解決

算法導論

LG ted sum 不能 復雜度 selector else n-1 greedy 16.1 16.1-1 int c[n+1][n+1]; int b[n+1][n+1]; for (int i = 0; i <= n; i++) { for (int j =