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事件
//**********************************************************************************//说明: 阻塞线程下为什么不触 ...
随机推荐
- UVa 10137 & ZOJ 1874 The Trip
题目大意:n个学生去旅行,旅行中每个学生先垫付,最后平摊所有费用,多退少补,并且支出差距控制在1分钱以内,求最小的交易金额. @2013-8-16 以前在zoj做过,把原来的代码直接提交了,虽然AC了 ...
- QGis(三)查询矢量图层的要素属性字段值(转载)
QGis(三)查询矢量图层的要素属性字段值 https://github.com/gwaldron/osgearth/issues/489 当加载一个矢量图层后,如果要查看要素的属性字段值,则需要实现 ...
- Android与Linux以及GNU的关系
转帖自 http://www.eefocus.com/Kevin/blog/09-11/179409_1dc9a.html 作者: Kevin 本文转贴自 http://mmdays.com/2008 ...
- iOS 操作系统整体架构层次讲解
iOS的系统架构分为四个层次:核心操作系统层(Core OS layer).核心服务层(Core Services layer).媒体层(Media layer)和可触摸层(Cocoa Touch l ...
- Linux环境下的GCC编译器与GDB调试工具介绍
假如现在我们有如下代码需要编译运行和调试.文件名为:test.c #include <stdio.h> int main() { int day, month, year, sum, le ...
- Web开发者的最爱 5个超实用的HTML5 API
摘要:毫无疑问,HTML5已经成为当今最流行的一门技术,尤其是Web开发者们对HTML5的兴趣是日趋渐浓.HTML5的许多功能也都能在现代浏览器中得以实现.然而,作为开发者,除了关注HTML5的功能和 ...
- 国民身份证号码校验之“C#/Winform方法实现+案例分析”
根据[中华人民共和国国家标准 GB 11643-1999]中有关公民身份号码的规定,公民身份号码是特征组合码,由十七位数字本体码和一位数字校验码组成.排列顺序从左至右依次为:六位数字地址码,八位数字出 ...
- cookie记忆换肤功能实战Demo
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8&qu ...
- 天兔(Lepus)监控邮件推送安装配置
好吧,我承认官网的邮件配置教程我又没看懂,这里记录下我的配置方法 [root@HE3]# vi /usr/local/lepus/test_send_mail.py #!/usr/bin/envpyt ...
- 分布式环境中三种Session管理方法的使用场景及优缺点
在分布式环境,管理Session通常使用下面三种方式: 一.Session Replication 方式管理 (即session复制) 简介:将一台机器上的Session数据广播复制到 ...