Sleeping会话导致阻塞原理(下)
背景
最近给客户做优化时,有几个客户都存在.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状态的的会话对应是事务才会被回滚。从而解除上面的阻塞。
总结
在解决实际问题时,在知道解决办法后,还有很多技术细节,这是我们必须要关注的
Sleeping会话导致阻塞原理(下)的更多相关文章
- Sleeping会话导致阻塞原理(上)
背景 我在处理客户问题的时候,客户经常搞不懂sleeping 的由来,和他可能导致的问题.下面来详细说下 什么是sleeping 其实我们经常可以在数据库中看到“”sleeping“状态的连接,但是这 ...
- android MultiDex multidex原理原理下遇见的N个深坑(二)
android MultiDex 原理下遇见的N个深坑(二) 这是在一个论坛看到的问题,其实你不知道MultiDex到底有多坑. 不了解的可以先看上篇文章:android MultiDex multi ...
- JEP 尝鲜系列 3 - 使用虚线程进行同步网络 IO 的不阻塞原理
相关 JEP: JEP 353 Reimplement the Legacy Socket API JEP 373 Reimplement the Legacy DatagramSocket API ...
- android MultiDex multidex原理下超出方法数的限制问题(三)
android MultiDex 原理下超出方法数的限制问题(三) 插件化?自动化?multiDex?是不是觉得已经懵逼了?请先看这篇文章的内容,在下篇文章中将会详解具体的过程- 随着应用不断迭 ...
- SQL Server Sleeping会话占用内存资源浅析?
在SQL Server中,会话的状态有运行(Running).睡眠(Sleeping).休眠(Dormant).Preconnect 等状态,有时候你会在数据库中看到很多会话处于睡眠(Sleepi ...
- 非阻塞模式下,虽然connect出错,但是getsockopt取得的错误却是0的问题
调试项目代码时,发现了一个奇怪问题,记录如下: 非阻塞模式下,connect发起建链,返回-1(这在非阻塞模式下是很正常的现象).然后将该socket的写事件进行监听,在写事件触发后,getsocko ...
- java web Session会话技术(原理图解+功能+与Cookie的区别+基本使用)
java web Session会话技术(原理图解+功能+与Cookie的区别+基本使用) 这是我关于会话技术的第二篇文章,对 Cookie有不了解的兄弟可以点击下方的Cookie跳转 Cookie链 ...
- 痞子衡嵌入式:Keil在线调试时设不同复位类型可能会导致i.MXRT下调试现象不一致(J-Link/DAPLink)
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是Keil在线调试时设不同复位类型可能会导致i.MXRT下调试现象不一致. 本篇是 <IAR EWARM复位类型>.<M ...
- Delphi Socket 阻塞线程下为什么不触发OnRead和OnWrite事件
//**********************************************************************************//说明: 阻塞线程下为什么不触 ...
随机推荐
- 全局文件 pch
在 bulding setting 里面 搜 prefix header 然后添加自己的pch 路径, 类似 $(SRCROOT)/... 还要把 precompile prefix header 设 ...
- PHP使用GD2库画图,图像无法输出解决方法
在CS6编辑环境下,使用php的GD2库绘制图像,在浏览器上输出可能会出现图像无法输出的情况,目前发现两个解决方法:方法1:用记事本写,再另存为utf-8 no bom的格式. 方法2:在代码中添加o ...
- Linux下配置Apache最大连接数
最近有博友发现我的博客经常http 503,博客负载不大,应该不会出现负载问题,很有可能就是Apache最大连接数原因,Apache默认支持150个连接.1.先要修改最大连接数,必须了解Apache的 ...
- --@angularJS--自定义服务与后台数据交互小实例
1.myService.html: <!DOCTYPE HTML><html ng-app="app"><head> <title& ...
- HDU-1754-I Hate It(线段树,简单,不过好像有点问题)
题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=1754 题目不难,不过开始我犯了一个低级错误,输入n,m,m代表操作的数目,我没有写了,写代码的时候,就 ...
- JavaWeb三层结构---课设02
收获总结 1三层架构模式 区分层次的目的即为了“高内聚,低耦合”的思想 分层介绍: Javaweb设计分为三层:数据访问层,业务逻辑层和表示层. 数据访问层:只提供对基本数据的访问,不涉及任何的业务逻 ...
- Select与Epoll比较
一.问题引出 联系区别 问题的引出,当需要读两个以上的I/O的时候,如果使用阻塞式的I/O,那么可能长时间的阻塞在一个描述符上面,另外的描述符虽然有数据但是不能读出来,这样实时性不能满足要求,大概的解 ...
- UWP必备知识:App File Explorer
由来 应用在手机端出问题时如果查看LocalState文件夹的数据库文件与日志文件 如何查看应用在手机端占用带宽与占用CPU内存情况 介绍 [UWP开发之Mvvmlight实践七:如何查找设备(Mob ...
- editormd使用教程
对于现在的程序员来说,都需要一个快速写文章的语言,那么无非就是markdown了,市面上markdown编辑器并不多,而且也不怎么好用,现在推荐国内的比较牛逼的. 入门 建议先到官方看下如何使用,避免 ...
- .Net Core 之 MSBuild 介绍
前言 关于 .NET Core 旧版本的 sdk 介绍可以参看我以前的 这篇 文章. 8 个小时前,.NET Core 项目组释放了 .NET Core 新一轮的 sdk 工具更新,即 RC4 版本 ...