管理工具造成的阻塞

z_cloud_for_SQL發表於2023-03-09
背景
上午10點50分左右,客戶接到SQL專家雲的告警簡訊,資料庫發生了嚴重的阻塞,登入到SQL專家雲中發現阻塞的源頭是SQL Server Management Studio,KILL掉該會話後解決。但是不理解一條簡單的SQL語句為什麼會造成阻塞,因此找我們分析下原因。

現象 1

從SQL專家雲的趨勢分析進行回溯,從10點49分開始出現了阻塞,越來越嚴重,持續了10分鐘。

檢視當時執行的語句列表,確定此次阻塞的源頭是ID為639的會話,狀態為sleeping,阻塞了11091、586等大量的會話。


在會話639的完整資訊中,發現了語句來源於Microsoft SQL Server Management Studio-查詢(資料庫管理工具),並且此會話上面還有開啟的事務。


根據主機名和IP地址,找到這臺機器,在資料庫管理工具中發現639這個查詢視窗還開著,執行的語句很簡單。


該查 詢視窗中執   SEL EC @ @ T RANCO UN T,確認 有一個開啟著 的事務,為什麼管理工具會自動建立了一個事務,而且還沒有提交?這是需要分析的關鍵。


分析 2

發現管理工具開啟了 SET_IMPLICIT_TRANSACTIONS選項 。開啟該選項意味著每 開啟一個新的查詢視窗後,管理工具先自動執行SET  IMPLICIT_TRANSACTIONS ON語句開啟 IMPLICIT_TRANSACTIONS選項。

微軟官方文件對 IMPLI CIT_ TRANSAC TIONS的詳細描述如下圖,原文連結:


總結 3

管理工具中開啟了 SET_IMPLICIT_TRANSACTIONS選項,導致在查詢視窗執行UPDATE語句時自動開啟了“隱式的”事務,執行完語句後,沒有手動的去提交事務,最終導致了阻塞。
SQL Server以簡單易用著稱,主要體現在提供了一個功能強大的管理工具,但這也是一把雙刃劍,圖形化封裝了實現的細節,使用人員不瞭解底層的機制,導致了很多問題。作為DBA,不要只依賴管理工具, 還要多瞭解底層原理,努力做到 知其然,知其所以然。



來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70023658/viewspace-2938799/,如需轉載,請註明出處,否則將追究法律責任。

相關文章