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线程)),但是重启数据库是一个很麻烦的事情。 所以这个僵尸会话就一直存在数据库里面,对于我这个有强迫症的人,看着它的存在,总想干掉它. 确实是个折磨人的事情.
转载于:https://www.cnblogs.com/lonelyxmas/p/9411451.html
SQL Server会话KILL不掉,一直处于KILLED /ROLLBACK状态情形浅析相关推荐
- KILL Linked Server异常中断会话后一直处于KILLED/ROLLBACK状态
一. 问题背景 开发反馈有一个job下午一直没执行,登上数据库检查发现job之前只执行几分钟,但这一次执行了5个小时还在跑.查看SqlServer中当前在执行的语句,发现有一个用到了Linked Se ...
- sql server 监视_使用动态管理对象监视SQL Server –会话和连接
sql server 监视 A fundamental task of Database Administrators is monitoring SQL Server performance. Wh ...
- SQL Server - 数据库恢复的时候停在 Restoring 状态
http://stackoverflow.com/questions/520967/sql-server-database-stuck-in-restoring-state 执行以下语句,可恢复数据库 ...
- SQL Server中的KILL SPID命令
This article gives an overview of the KILL SPID command and how to monitor the rollback progress. 本文 ...
- 生产mysql遇到kill不掉的sql的解决方法
一.问题描述 今天上线,生产mysql有个2700万数据的大表lt_integral_detail_info,准备给这个表加字段.加索引: 执行加字段加索引的命令比较费时,结果这时有人对这个表执行了多 ...
- SQL Server 的锁定和阻塞
本帖提供两种做法,可避免在 SQL Server 事务锁定时产生的不正常或长时间阻塞,让用户和程序也无限期等待,甚至引起 connection pooling 连接数超过容量. 所谓的「阻塞」,是指当 ...
- 需要我们了解的SQL Server阻塞原因与解决方法 - sym_cn
2019独角兽企业重金招聘Python工程师标准>>> 这里通过连接在sysprocesses里字段值的组合来分析阻塞源头,可以把阻塞分为以下5种常见的类型(见表).waittype ...
- 快速搞懂 SQL Server 的锁定和阻塞
本帖提供两种做法,可避免在 SQL Server 事务锁定时产生的不正常或长时间阻塞,让用户和程序也无限期等待,甚至引起 connection pooling 连接数超过容量. 所谓的「阻塞」,是指当 ...
- SQL Server 阻塞原因分析
这里通过连接在sysprocesses里字段值的组合来分析阻塞源头,可以把阻塞分为以下5种常见的类型(见表).waittype,open_tran,status,都是sysprocesses里的值,& ...
最新文章
- 浏览器tab关闭事件_Python--使用Pyqt5实现简易浏览器(最新版本测试过)
- “全能”选手—Django 1.10文档中文版Part2
- boost::statechart模块实现无效结果复制测试
- OpenOffice java api UNO 设置属性总结
- msmq 发送到远程专用队列不存在_不知道消息中间件是什么?RabbitMQ从头到尾详解介绍...
- JupyterLab显示pyecharts图像
- ASP中FSO的神奇功能(1)
- 区块链音乐流媒体平台ROCKI版税收入权NFT售价达40 ETH
- Android学习之路-----倒计时欢迎界面(更有条理)
- java输入验证码代码,JavaWeb 实现验证码功能(demo)
- tp模式 生命周期 命名空间 路由
- html5有哪些优点,HTML5真正的优势优点有什么?
- (4) IFC属性及属性集 (Industry Foundation Class)
- java模拟器gba模拟器,CAPRunner-JavaCard字节码仿真器-Benoît Allard
- 持久内存服务器大多数数据库管理系统,内存数据库VS传统数据库:如何在多个任务之间共享内存中的数据?...
- linux操作系统安装教程图解【图文教程】
- 图解C/C++底层:函数栈帧的创建和销毁(下篇)
- 用计算机做电子贺卡送祝福,全国信息技术优质课一等奖电子贺卡送祝福教案.doc...
- 重磅 | 谱尼测试圆满承办化妆品生产企业研学班
- 职教mooc计算机组装与维护课程网课答案,2020-网课答案-高职心理辅导与教育-中国大学mooc...