Sleeping会话导致阻塞原理(下)

原创 2017年03月03日 10:06:38

背景

最近给客户做优化时,有几个客户都存在.SLEEPING 会话中开启了事务,导致的大量阻塞,从而产生严重的性能问题。虽然在之前的文章我分享了Sleeping会话导致阻塞原理(上) 。说明了什么是Sleeping会话,以及他可能导致的问题。但是对如何解决问题,给出的方案,还是太简单了,没有给出解决的细节。本文将对这些细节进行说明。希望大家面对类似问题时更容易下手

下面分享2个案例,分别针对针对问题来着存储过程 和 程序 中的情况。

存储过程

以下是某医药公司的案例截图:
这里写图片描述

从图中可以看到,230 处于SLEEPING 状态并且产生了大量的阻塞。查看子语句可以知道230运行的是一个存储过程。
这里写图片描述

问题就在于:在这个存储过程中,开启事务(如下图所示),并且运行到后面某个语句时出错了(可能是超时,或者其他错误)。但是开启的事务并没有回滚.如下图这里写图片描述

有的同学,可能知道,在存储过程中 加入tray catch ,出错时回滚事务。这个解决办法并不彻底。对应有些错误是无法捕捉,对应这种情况,,我们可以在存储过程中直接加上:SET XACT_ABORT ON 。当存储过程执行时发生问题时,会自动回滚所有事务,从而避免了阻塞。

程序

这是某制造行业的财务的案例截图:

这里写图片描述

查看子语句,和父语句都是单独的一个查询,说明3185 开启的事务来着 程序0

这里写图片描述

对应这种情况,只能修改程序。因为客户的代码不好分享,下面是我自己写的测试程序代码:
这里写图片描述

在修改时有几个细节需要注意:

1.在代码中加入TRY CATCH。

2.在CATHC 中必须使用close,dispose 来关闭连接,当然使用了using也是可以的
3.程序建立了新的连接,并执行了查询。此时会出现 sp_reset_connection事件,此时,事务会被回滚。注意 。两次建立连接的connectsting.就是连接字符串必须完全一致。多个;都不可以。

只有满足上面3个条件,,sleeping状态的的会话对应是事务才会被回滚。从而解除上面的阻塞。

总结

在解决实际问题时,在知道解决办法后,还有很多技术细节,这是我们必须要关注的

版权声明:本文为博主原创文章,未经博主允许不得转载。

SQL SERVER运维日记--收缩数据库

某天,小王正在和HR妹妹闲聊,正HAPPY时,,突然收到系统告警消息,数据库磁盘被剩余空间500M,OMG,不行,磁盘快满了,要是业务要停了,,那就小王只能删库到跑路了,,,...

SQL SERVER 运维日记-数据库备份

如果刚接手一个系统,我最先关注的就是备份。《炉石传说》游戏数据库发生宕机并引发数据丢失事故的新闻。刚看到时,满满的不可思议。暴雪啊,网易啊。都是很牛叉的公司。他们出的游戏我都是很喜欢的。...

SQL调优日记--sleeping进程导致的性能问题

在数据库出现的大量的问题中,阻塞占据在很大的比例。而所有的阻塞中,sleeping进程造成阻塞是非常严重但是,能够完全搞明白的人,并不多。我的很多客户对于sleeping 的由来,和他可能导致的问题都...

内核中睡眠 - Sleeping in the kernel

Kernel Korner - Sleeping in the Kernel Jul 28, 2005  By Kedar Sovani  in Linux Journal http...

Low Power ESP8266 – Sleeping at 78 micro Amps

I recently bumped into NodeMCU firmware for the ESP8266. It’s an Lua interpreter, making tinkerin...

动规之hdu3905--Sleeping

hdu3905--Sleeping Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 125536/65536 K (Java/Othe...

IDIOPEN 2011 G - Sleeping at Work

首先是题目描述看得不太懂~~~题意不大好理解~~也就是说有N个分钟..要睡M个分钟..连续的睡的话..1*a[i]+2*a[i+1]..+(k+1)*a[i+k]...但连续的不能超过r....问最大...
  • kk303
  • kk303
  • 2012年09月02日 15:04
  • 880

Unity 理解刚体(Rigidbody)和碰撞体(Collider)和触发器(Is Trigger)以及刚体休眠(Rigidbody Sleeping)

今天看到看到了 Rigidbody Sleeping这个知识点,解决了我疑惑很久的一个物理学的问题。本来笔者遇到问题会想办法去解决的,但是那是想了蛮久也没想通为什么两个物体碰撞要发生碰撞的事件前提...

操作系统实验,IPC(一):sleeping barber,睡眠理发师问题

首先说明一点,我做实验室参考了许多网上的代码,尤其是点击打开链接, 下面的代码基本来自于这个博客。没有抄袭之意,只是写一下个人的一些感受。 1.首先要理解semaphore和mutex, 前者是信号...

Unity 理解刚体(Rigidbody)和碰撞体(Collider)和触发器(Is Trigger)以及刚体休眠(Rigidbody Sleeping)

前言:      今天看到看到了 Rigidbody Sleeping这个知识点,解决了我疑惑很久的一个物理学的问题。本来笔者遇到问题会想办法去解决的,但是那是想了蛮久也没想通为什么两个物体碰撞...
  • U3D_YSJ
  • U3D_YSJ
  • 2015年08月27日 00:05
  • 1699
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Sleeping会话导致阻塞原理(下)
举报原因:
原因补充:

(最多只允许输入30个字)