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状态的的会话对应是事务才会被回滚。从而解除上面的阻塞。

总结

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

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

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

最近给客户做优化时,有几个客户都存在.SLEEPING 会话中开启了事务,导致的大量阻塞,从而产生严重的性能问题。虽然在之前的文章我分享了Sleeping会话导致阻塞原理(上) 。说明了什么是Slee...
  • z10843087
  • z10843087
  • 2017年03月03日 10:04
  • 116

Oracle引起阻塞的情况

Oracle引起阻塞的情况 一、唯一性约束引起的阻塞: 在session1执行下面的语句中: --创建一个表 create table t(x int primary key); --在表中...
  • qincidong
  • qincidong
  • 2013年06月19日 09:53
  • 1708

Oracle 阻塞会话的查看与解除

关于Oracle 阻塞会话的查看与解除,这里只讲操作步骤,不讲原理。 Session 1 更新对象单没有提交 Session 2 更新的时候由于等待session1 锁更新行的tx 锁而陷入阻...
  • haiross
  • haiross
  • 2015年02月03日 11:41
  • 5560

Oracle会话阻塞

单实例的会话阻塞 模拟232会话被1224会话阻塞的情况 select * from V$SESSION_BLOCKERS; SID SESS_SERIAL# WAIT_...
  • Michael_A
  • Michael_A
  • 2018年01月07日 21:11
  • 48

SQL Server KILL Sleeping进程

DECLARE @SPID AS INT DECLARE @COUNT AS INT=0 DECLARE curSPID CURSOR FOR SELECT A.SPID --,DB_NAME(A....
  • Burgess_Liu
  • Burgess_Liu
  • 2016年12月13日 15:50
  • 1084

如何监控和解决SQL Server的阻塞(1) (当前阻塞)

什么是"阻塞"?
  • hwu14
  • hwu14
  • 2014年04月11日 09:38
  • 2915

导致页面打开速度变慢--Session阻塞造成时的解决方案

Asp.net项目因Session阻塞导致页面打开速度变慢      前年有个Asp.net项目上线后,正常情况下大部分页面打开速度都很快,但个别页面处理速度较慢。奇怪的是一旦访问个别速度慢的页...
  • lisky119
  • lisky119
  • 2016年05月20日 17:37
  • 1444

TCP套接字--阻塞模式和粘包问题

阻塞模式 对于TCP套接字(默认情况下),当使用 write()/send() 发送数据时: 1) 首先会检查缓冲区,如果缓冲区的可用空间长度小于要发送的数据,那么 write()/send() 会被...
  • cs1462155255
  • cs1462155255
  • 2017年09月14日 20:20
  • 296

事务与锁定-查看被阻塞的会话信息

/* 通过查看DBA_WAITERS视图可以查看当前被阻塞的会话的信息 */ SELECT WAITING_SESSION, --NUMBER 等待资源的会话 H...
  • ziwen00
  • ziwen00
  • 2011年04月18日 14:13
  • 814

数据库死锁 和 阻塞

数据库死锁原因及解决办法 死锁(Deadlock) 所谓死锁:是指两个或两个以上的进程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去。 此时称...
  • firefly_2002
  • firefly_2002
  • 2012年09月22日 18:57
  • 5206
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Sleeping会话导致阻塞原理(下)
举报原因:
原因补充:

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