背景

最近给客户做优化时,有几个客户都存在.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会话导致阻塞原理(下)的更多相关文章

  1. Sleeping会话导致阻塞原理(上)

    背景 我在处理客户问题的时候,客户经常搞不懂sleeping 的由来,和他可能导致的问题.下面来详细说下 什么是sleeping 其实我们经常可以在数据库中看到“”sleeping“状态的连接,但是这 ...

  2. android MultiDex multidex原理原理下遇见的N个深坑(二)

    android MultiDex 原理下遇见的N个深坑(二) 这是在一个论坛看到的问题,其实你不知道MultiDex到底有多坑. 不了解的可以先看上篇文章:android MultiDex multi ...

  3. JEP 尝鲜系列 3 - 使用虚线程进行同步网络 IO 的不阻塞原理

    相关 JEP: JEP 353 Reimplement the Legacy Socket API JEP 373 Reimplement the Legacy DatagramSocket API ...

  4. android MultiDex multidex原理下超出方法数的限制问题(三)

    android MultiDex 原理下超出方法数的限制问题(三)    插件化?自动化?multiDex?是不是觉得已经懵逼了?请先看这篇文章的内容,在下篇文章中将会详解具体的过程- 随着应用不断迭 ...

  5. SQL Server Sleeping会话占用内存资源浅析?

      在SQL Server中,会话的状态有运行(Running).睡眠(Sleeping).休眠(Dormant).Preconnect 等状态,有时候你会在数据库中看到很多会话处于睡眠(Sleepi ...

  6. 非阻塞模式下,虽然connect出错,但是getsockopt取得的错误却是0的问题

    调试项目代码时,发现了一个奇怪问题,记录如下: 非阻塞模式下,connect发起建链,返回-1(这在非阻塞模式下是很正常的现象).然后将该socket的写事件进行监听,在写事件触发后,getsocko ...

  7. java web Session会话技术(原理图解+功能+与Cookie的区别+基本使用)

    java web Session会话技术(原理图解+功能+与Cookie的区别+基本使用) 这是我关于会话技术的第二篇文章,对 Cookie有不了解的兄弟可以点击下方的Cookie跳转 Cookie链 ...

  8. 痞子衡嵌入式:Keil在线调试时设不同复位类型可能会导致i.MXRT下调试现象不一致(J-Link/DAPLink)

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是Keil在线调试时设不同复位类型可能会导致i.MXRT下调试现象不一致. 本篇是 <IAR EWARM复位类型>.<M ...

  9. Delphi Socket 阻塞线程下为什么不触发OnRead和OnWrite事件

    //**********************************************************************************//说明: 阻塞线程下为什么不触 ...

随机推荐

  1. 利用python 实现微信公众号群发图片与文本消息功能

    在微信公众号开发中,使用api都要附加access_token内容.因此,首先需要获取access_token.如下: #获取微信access_token def get_token(): paylo ...

  2. MVC 视图-模型,动态更新

    <!DOCTYPE html> <html> <head> <title>Binding</title> <script src=&q ...

  3. 第六百二十七天 how can I 坚持

    竟然能上google了,可惜手机装twitter装上登不上呢. 浏览浏览能学学英语啊. 今天又在家待了一天,得戒游戏了,找找能让我疯狂的事情,然后坚持去干吧,加油. 洗澡睡觉.

  4. 配置Log4J(转载)

    Log4J的配置文件(Configuration File)就是用来设置记录器的级别.存放器和布局的,它可接key=value格式的设置或xml格式的设置信息.通过配置,可以创建出Log4J的运行环境 ...

  5. iconfont.cn阿里巴巴矢量图下载字体图标实战

    1.阿里巴巴矢量图网址:www.iconfont.cn 2.然后用新浪微博账号登录 3.输入要查找的图标相应的关键字,回车 4.滑过要找的图标,点击购物车,让图标存储到暂存架中 5.点击暂存架,存储为 ...

  6. angular2教程

    https://github.com/lewis617/angular2-tutorial

  7. swift 画图 Charts的基本使用

    下面的这些代码呢是在oc工程里里使用的 其实和在swift中使用没什么大的差别 属性都一样的 //创建饼状图    self.pieChartView = [[PieChartView alloc] ...

  8. Raphael的鼠标over move out事件

    Raphael的鼠标over move out事件 <%@ page language="java" contentType="text/html; charset ...

  9. android.os.NetworkOnMainThreadException 异常

    记下来以后备用 StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder() .detectDiskReads() .detectD ...

  10. vue-router跳转页面

    小结放在前:先祝大家新年快乐!鸡年大吉大利!在新的一年里大家都有跳跃般的成长!作为新年的第一篇文章,就拿他来给大家拜个年!!!文章前部份讲解了vue-router路由的配置,后半部分为去年的文章vue ...