ITPub博客

首页 > 自动化运维 > 大规模网络运维 > 管理工具造成的阻塞

管理工具造成的阻塞

原创 大规模网络运维 作者:z_cloud_for_SQL 时间:2023-03-09 11:27:06 0 删除 编辑
背景
上午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  @ @ T RANCO UN T,确认 有一个打开着 的事务,为什么管理工具会自动创建了一个事务,而且还没有提交?这是需要分析的关键。


分析 2

发现管理工具开启了 SET_IMPLICIT_TRANSACTIONS选项 。开启该选项意味着每 打开一个新的查询窗口后,管理工具先自动执行SET  IMPLICIT_TRANSACTIONS ON语句开启 IMPLICIT_TRANSACTIONS选项。

微软官方文档对 IMPLI CIT_ TRANSAC TIONS的详细描述如下图,原文链接:https://docs.microsoft.com/zh-cn/sql/t-sql/statements/set-implicit-transactions-transact-sql?redirectedfrom=MSDN&view=sql-server-ver15


总结 3

管理工具中开启了 SET_IMPLICIT_TRANSACTIONS选项,导致在查询窗口执行UPDATE语句时自动开启了“隐式的”事务,执行完语句后,没有手动的去提交事务,最终导致了阻塞。
SQL Server以简单易用著称,主要体现在提供了一个功能强大的管理工具,但这也是一把双刃剑,图形化封装了实现的细节,使用人员不了解底层的机制,导致了很多问题。作为DBA,不要只依赖管理工具, 还要多了解底层原理,努力做到 知其然,知其所以然。



来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70023658/viewspace-2938799/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
数据库技术运营,多年IT行业从业经验。

注册时间:2022-11-02

  • 博文量
    55
  • 访问量
    61927