管理工具造成的阻塞
Posted 格瑞趋势技术团队
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了管理工具造成的阻塞相关的知识,希望对你有一定的参考价值。
背景
上午10点50分左右,客户接到SQL专家云的告警短信,数据库发生了严重的阻塞,登录到SQL专家云中发现阻塞的源头是SQL Server Management Studio,KILL掉该会话后解决。但是不理解一条简单的SQL语句为什么会造成阻塞,因此找我们分析下原因。
现象
从SQL专家云的趋势分析进行回溯,从10点49分开始出现了阻塞,越来越严重,持续了10分钟。
查看当时运行的语句列表,确定此次阻塞的源头是ID为639的会话,状态为sleeping,阻塞了11091、586等大量的会话。
在会话639的完整信息中,发现了语句来源于Microsoft SQL Server Management Studio-查询(数据库管理工具),并且此会话上面还有打开的事务。
根据主机名和IP地址,找到这台机器,在数据库管理工具中发现639这个查询窗口还开着,执行的语句很简单。
在该查询窗口中执行 SELECT @@TRANCOUNT,确认有一个打开着的事务,为什么管理工具会自动创建了一个事务,而且还没有提交?这是需要分析的关键。
分析
发现管理工具开启了SET_IMPLICIT_TRANSACTIONS选项。开启该选项意味着每打开一个新的查询窗口后,管理工具先自动执行SET IMPLICIT_TRANSACTIONS ON语句开启IMPLICIT_TRANSACTIONS选项。
微软官方文档对IMPLICIT_TRANSACTIONS的详细描述如下图,原文链接:https://docs.microsoft.com/zh-cn/sql/t-sql/statements/set-implicit-transactions-transact-sql?redirectedfrom=MSDN&view=sql-server-ver15
总结
管理工具中开启了SET_IMPLICIT_TRANSACTIONS选项,导致在查询窗口执行UPDATE语句时自动开启了“隐式的”事务,执行完语句后,没有手动的去提交事务,最终导致了阻塞。
SQL Server以简单易用著称,主要体现在提供了一个功能强大的管理工具,但这也是一把双刃剑,图形化封装了实现的细节,使用人员不了解底层的机制,导致了很多问题。作为DBA,不要只依赖管理工具,还要多了解底层原理,努力做到知其然,知其所以然。
以上是关于管理工具造成的阻塞的主要内容,如果未能解决你的问题,请参考以下文章