SQL Server会话KILL不掉,一直处于KILLED /ROLLBACK状态情形浅析
今天遇到一个很奇怪的情况,发现一个会话异常,这个会话只是在执行一个简单的存储过程,里面使用了链接服务器(Linked Server)查询另外一台服务器数据(存储过程里面没有任何显性事务、UPDATE、DELETE操作,只有几个简单的SELECT查询,其中有两个查询使用了链接服务器Linked Server,由于生产环境,不好贴出SQL语句),在DPA监控工具里面,发现该会话引起了非常长的OLEDB等待时间,手工执行测试,发现并不耗费很长时间,KILL该会话后, 回滚状态已完成一直是0%, 估计剩余时间也一直是0秒。如下截图所示:
KILL 129 WITH STATUSONLY;
SPID 129: 正在进行事务回滚。估计回滚已完成: 0%。估计剩余时间: 0 秒。
如下所示,这个会话的start_time(Timestamp when the request arrived. Is not nullable.)为2016-10-18 02:17:58.210,到现在2016-10-19 16:02:30.173已经有几十个小时了,我kill会话的时间点为2016-10-19 12:00:01。
可以看到它的等待类型是OLEDB等待(图一),也就是说等待链接服务器所指的服务器返回结果。另外这个事务的transaction_type为2,意味这只是一个Read-only transaction(避免别人误解,这是一个证据),transaction_state为2,表示事务处于活动状态(The transaction is active)。事务出现的这个时间点引起了我的注意,因为链接服务器所指向的这台服务器出现宕机(参考链接VmWare平台Windows Server 2012 无响应宕机),刚好是那台服务器虚拟机出现宕机时候,重启的时间点前面一点(那台服务器凌晨1点多宕机,2:22AM的时候重启的)。从DPA监控工具也能看到确实是那个点出现的。如下所示:
这种分布式查询,由于Linked Server所指的服务器出现异常(例如宕机),这边的会话进程一直在等待其返回结果,但是Linked Server所指服务器由于异常永远都无法给这个会话进程反馈任何结果,就出现了这种情况,不过有点奇怪的是,这种情况无法通过KILL会话来结束。 只能通过重启服务器来解决问题, 也不能通过Kill进程解决(因为SQL Server是单进程多线程架构,不像ORACLE那种多进程架构,可以从操作系统层面杀掉进程或线程(Windows平台,Oracle提供了一个工具ORAKILL utility 可以Kill线程)),但是重启数据库是一个很麻烦的事情。 所以这个僵尸会话就一直存在数据库里面,对于我这个有强迫症的人,看着它的存在,总想干掉它. 确实是个折磨人的事情.
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
SQL Server Replication的分发服务器的快照文件夹位置查找
原文: SQL Server Replication的分发服务器的快照文件夹位置查找 SQL Server分发服务器配置中,需要配置快照文件夹(Snapshot Folder),用于存储发布的数据和架构文件的工作目录,那么如何查找当前SQL Server数据库服务器的分发服务器的快照文件夹位置呢? 如果配置了具体发的发布和订阅,那么可以在对应的发布的属性-》快照文件里面查看,如果还没有配置具体的发布和订阅,这个需要怎么查看呢? 今天恰巧遇到了这样的问题,研究了一下,其实这些值保存在表msdb.dbo.MSdistpublishers下面,如下所示。 SELECT * FROM msdb.dbo.MSdistpublishers;
- 下一篇
带团队,要不要把员工推向前台?
一、事必躬亲,是刚转型管理的技术专家,最容易犯的错误 我还算一个有情怀的技术人,当,我只是一个工程师的时候: 我会把自己负责的模块当成自己家,干干净净,整整洁洁,不允许别人在自己负责的模块里随意写烂代码。画外音:谁又会允许外人在自己家随便拉屎。 对于架构设计,项目设计,也会尽量调研各种方案,在时间允许的情况下,尽可能选择最佳方案。 对于自己负责的项目,我会了解项目的各个细节,关注关键路径,紧盯项目风险,以确保项目按时上线。画外音:曾经负责过1000人日的项目,项目准时上线,特别有成就感。 当我带领一个团队的时候,一切都变了: “你这段代码应该这样写...”“你这个方案不合理,应该这么设计...”“你下午去和PM确认下验收结结果,然后...” 在PM和RD在沟通时,我偶尔会插话,“RD说的不详细,这里应该是这样子的...”。 在老板询问一个校招生,对业务流程掌握了多少时,我居然会“抢答”。 路过同事的工位,我会好心的窥屏,指出ta代码哪里写得不对,应该这样这样写...画外音:额,体会下coder的心情,我还以为帮助到了团队同学呢,真为自己的情商着急。 在团队同学在排查一个线上问题时,我看...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS8安装MyCat,轻松搞定数据库的读写分离、垂直分库、水平分库
- CentOS关闭SELinux安全模块
- CentOS7,CentOS8安装Elasticsearch6.8.6
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- Eclipse初始化配置,告别卡顿、闪退、编译时间过长
- Docker安装Oracle12C,快速搭建Oracle学习环境
- SpringBoot2初体验,简单认识spring boot2并且搭建基础工程
- CentOS8编译安装MySQL8.0.19
- MySQL8.0.19开启GTID主从同步CentOS8