今天遇到一个很奇怪的情况,发现一个会话异常,这个会话只是在执行一个简单的存储过程,里面使用了链接服务器(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线程)),但是重启数据库是一个很麻烦的事情。 所以这个僵尸会话就一直存在数据库里面,对于我这个有强迫症的人,看着它的存在,总想干掉它. 确实是个折磨人的事情.

mysql会话杀不掉_SQL Server会话KILL不掉,一直处于KILLED /ROLLBACK状态情形浅析相关推荐

  1. SQL Server会话KILL不掉,一直处于KILLED /ROLLBACK状态情形浅析

    SQL Server会话KILL不掉,一直处于KILLED /ROLLBACK状态情形浅析 原文:SQL Server会话KILL不掉,一直处于KILLED /ROLLBACK状态情形浅析 今天遇到一 ...

  2. KILL Linked Server异常中断会话后一直处于KILLED/ROLLBACK状态

    一. 问题背景 开发反馈有一个job下午一直没执行,登上数据库检查发现job之前只执行几分钟,但这一次执行了5个小时还在跑.查看SqlServer中当前在执行的语句,发现有一个用到了Linked Se ...

  3. mysql 杀存储过程进程_SQL SERVER 杀死锁进程存储过程

    use master        --必须在master数据库中创建 go if exists (select * from dbo.sysobjects where id = object_id( ...

  4. mysql查看索引创建进度_SQL Server查看索引重建、重组索引进度

    相信很多SQL Server DBA或开发人员在重建或重组大表索引时,都会相当郁闷,不知道索引重建的进度,这个对于DBA完全是一个黑盒子,对于系统负载非常大的系统或维护窗口较短的系统,你会遇到一些挑战 ...

  5. mysql的事件探查器_SQL Server 2008 事件探查器(SQL SERVER Profiler)

    进入事件探查器:开始---程序---SQL Server 2008---性能工具---SQL SERVER PROFILEr,进入,点击新建事件跟踪,输入sa用户与密码. 如果你输入的用户与密码没有权 ...

  6. mysql配置管理器在哪_SQL Server 2008配置管理器在哪下载

    1 在打开[SQL Server Managemenet Studio]窗口,在[对象资源管理器]窗口依次站看[数据库]--[新建的数据库]节点 2 鼠标右键单击[视图]节点,在弹出的快捷菜单中选择[ ...

  7. mysql的纵向扩展方案_SQL Server横向扩展方案-SODA

    SQL Server横向扩展方案-SODA 每次在提到SQL Server扩展性问题的时候,似乎很多的SQL Server DBA或者使用微软技术开发的朋友心里总是一整痛:SQL Server只能纵向 ...

  8. mysql查询加伪列_SQL Server数据库中伪列及伪列的含义详解

    SQL Server中的伪列 下午看QQ群有人在讨论(非聚集)索引的存储,说,对于聚集索引表,非聚集索引存储的是索引键值+聚集索引键值:对于非聚集索引表,索引存储的是索引键值+RowId,这应该是一个 ...

  9. mysql 约束1 100分_SQL SERVER CHECK语句,使用check约束限定成绩只能为0~100分

    mysql> create table f1 (r1 int constraint tb_f1_r1_chk1 check (mod(r1,3)=0)); Query OK, 0 rows af ...

  10. mysql数据库sa默认密码_SQL Server数据库sa密码相关问题的解决方法

    1.如何查找sqlserver的sa密码? 查询分析器,连接时,身份验证使用"使用windows身份验证" 然后,执行: EXEC sp_password NULL, 'NewPa ...

最新文章

  1. 160630、五句话搞定JavaScript作用域
  2. Modesim 仿真 ERRO VSIM-19
  3. c++ requests网络请求库
  4. Java程序员必须要掌握这10种工具,缺一不可!
  5. c语言交通违章编程代码,C语言程序设计之交通处罚单管理系统 报告(内含代码).doc...
  6. C#算法设计排序篇之07-希尔排序(附带动画演示程序)
  7. Doc2vec在推荐系统中的应用(含算法原理、代码实现)
  8. [洛谷P4234]最小差值生成树
  9. SQL:postgresql中拼接字符串
  10. Machine Learning——Homework 7
  11. 100阶乘c语言如何实现,求10000的阶乘(c语言代码实现)
  12. 苹果笔记本安装windows系统
  13. java jemalloc_jemalloc 快速上手攻略
  14. 七大江河水系--黄河(一)
  15. 如何读取csv文件并将其转化为tsv文件
  16. 如何给运行中的docker容器增加映射端口
  17. 在docker容器里的Linux环境下,执行netstat命令显示 command not found
  18. 头腾大战再升级 字节跳动做游戏的胜算有多少?
  19. 单机版Fate安装教程(含虚拟机搭建)
  20. 01组团队项目-中期总结

热门文章

  1. Java_Arrays.fill() 初始化二维数组一个指定值
  2. LIO-SAM探秘第三章之代码解析(五) --- imuPreintegration.cpp
  3. 检测提取图像中的直线(基于霍夫变换)
  4. 3D人脸重建算法汇总
  5. 提交表单的时候会出现提交两次的问题
  6. 20、淘宝技术这十年
  7. Codeforces 482B Interesting Array(线段树)
  8. 公司周刊-非常6+1—营销平台小组
  9. 边缘计算与嵌入式系统
  10. 课程设计哈夫曼编/译码系统