当前位置: 首页 > news >正文

沈阳网站开发技术公司网站建设三剑客

沈阳网站开发技术公司,网站建设三剑客,产业互联网公司排名,网站开发报价清单背景客户反馈系统突然从11:10开始运行非常缓慢,在SQL专家云中看到大量的产生阻塞的活动会话,KILL掉阻塞的源头马上又出现新的源头,实在没有办法只能重启应用程序断开所有数据库连接才解决,请我们协助分析根本的原因。现象登录SQL专…
背景
客户反馈系统突然从11:10开始运行非常缓慢,在SQL专家云中看到大量的产生阻塞的活动会话,KILL掉阻塞的源头马上又出现新的源头,实在没有办法只能重启应用程序断开所有数据库连接才解决,请我们协助分析根本的原因。

现象


登录SQL专家云,进入趋势分析页面,下钻到11点钟内一个小时的数据,看到从11:12开始出现阻塞,越来越严重。

进入活动会话原始数据页面,看到不同时间点的阻塞源头会话是不同的,但都是同一类的现象,阻塞源头会话的状态是sleeping,被阻塞的会话都在对同一个表执行UPDATE语句。

分析


状态为sleeping代表当前会话没有执行SQL请求,之所以造成阻塞是因为会话以前开启了一个或多个事务, 在事务中修改了一个或多个表的数据,会话对这些修改的数据行持有排他锁,从而阻塞其他会话对该表的操作。如果这种状态持续很长时间,很有可能是前端应用程序出现了异常,并且没有健壮的异常处理机制,出错后没有回滚以前打开的事务并关闭连接,导致阻塞一直存在。 前端应用程序出错原因主要有两种,一种是执行SQL语句时被阻塞等原因导致执行时间长并产生超时;一种是执行非数据库访问逻辑时因为某些原因出错了,例如转换数据类型失败、接收数据量太大导致内存溢出、访问别的接口报错等。

本着这个经验,对这些sleeping的会话进行回溯,发现这些会话在sleeping之前,都曾经被阻塞过很长时间,根据慢语句的特征判断是执行超时了。

而且这些会话都存在打开的事务,事务开始时间都在执行语句超时的时间之前。

通过对存储过程进行分析,发现里面在用TRY CATCH的方式处理事务,因此推断该方式无法捕获应用程序端的超时错误,导致事务和连接的泄露,因为存储过程比较复杂,下面用一个测试来模拟。

测试


首先创建一个存储过程,逻辑为先开始事务,然后依次对两个表进行UPDATE,通过TRY CATCH的方法处理事务。

CREATE PROCEDURE dbo.usp_test
AS BEGIN TRAN BEGIN TRY UPDATE dbo.Table_2 WITH(ROWLOCK) SET a = 'wang'UPDATE dbo.Table_1 WITH(ROWLOCK) SET a = 'wang'END TRY BEGIN CATCH IF @@ERROR = 0 BEGIN GOTO succeed END ELSE BEGIN GOTO error END END CATCHsucceed: COMMIT TRAN RETURN 1 error: ROLLBACK TRAN RETURN 0

新建一个查询,开始一个事务,然后执行UPDATE Table_1,不提交或者回滚事务,对表Table_1的排他锁一直存在, 用来模拟对表Table_1的锁定。

新建另一个查询,注意,执行超时值设置为30秒(默认是0,代表永不超时)。这个新建立的会话ID是56。

执行存储过程usp_test。updat dbo.Table_2很快执行完,在执行updat dbo.Table_1时产生阻塞,等待30秒后出现超时的报错。

新建一个查询,查看会话56的事务信息,可以看到存在一个打开的事务。

再通过sys.dm_tran_locks可以看到会话56还保持着对表Table_2和Table_1的意向排他锁以及Table_2上更改的两行数据的排他锁。此时在其他会话中对Table_2执行查询和修改,都被会话56阻塞。

总结:“超时”错误是应用程序端的异常,数据库驱动程序执行SQL语句时等待服务器端的响应,等待时间达到设置的阈值后发送一个终止执行的信号给服务器端并向上层应用程序抛出异常。服务器端接收到该信号后终止语句的执行,并不会报错,TRY CATCH是无法捕获的,因此无法执行到SUCCEED处的COMMIT或者ERROR处的ROLLBACK,导致了事务的泄露,该事务中的对表Table_2的排他锁一直持有,其他会话对表Table_2的操作会被阻塞,直到杀掉该会话。

解决


对于这类问题,根本的解决方法是修改应用程序,增加对于执行异常的捕获,检查是否存在事务并回滚,然后关闭数据库连接。

但是很多客户是购买软件厂商的产品,修改程序不容易实现或者周期很长。因此只能在数据库端进行补偿性的措施,就是配置一个自动查杀会话的作业,根据sleeping会话的特征定期KILL掉。也可以在SQL专家云中启用自动查杀会话的功能。

http://www.yayakq.cn/news/275728/

相关文章:

  • 坪山手机网站建设潍坊网站优化
  • 平面设计专业网站wordpress支付宝登录界面
  • wordpress如何删除已安装主题新区seo整站优化公司
  • 苏州关键词网站排名工业企业利润加快回升
  • 双浩建设网站如何做网络营销推广员
  • 昆明网站的优化东莞志豪建设公司网站
  • 最好的ppt模板网站黄埔网站建设设计
  • 大德通网站建设公司手机app开发报价
  • 如何看网站是否有做网站地图成都app开发多少钱
  • 带你做网站毕设河南建设工程信息网一体化平台查询
  • 手机网站解析域名网络规划设计师吧
  • 重庆网站优化公司哪家便宜wordpress数字链接出现404
  • 一般设计网站页面用什么软件做网站开发无形资产
  • 响应式网站搭建百度小程序page手机转wordpress
  • 网页设计是网站建设与管理的内容吗网站到期域名怎么解决办法
  • 南通网站建设设计wordpress download monitor
  • 网站开发所以浏览器兼容模式wordpress分类显示文章
  • 建筑公司网站页面图片Wordpress雪花特效代码
  • 软件代做网站在哪找活开发公司资质分几个等级
  • 搜一搜站长工具临湘网站
  • 个人做的小网站需要备案东莞市招投标交易中心
  • 东莞营销商城网站建设网站建设工作要求
  • 网站开发技术要学什么seo还可以做哪些推广
  • dede网站管理系统演示长春火车站哪个区
  • asp网站开发上传组建做配资网站多少钱
  • 电商平台网站定制成立一个做网站的工作室
  • 莱芜论坛莱芜都市网seo推广的网站和平台有哪些
  • 恩施网站定制品牌vi设计案例欣赏ppt
  • 运城网站建设公司免费创建手机网站
  • 京东网站建设的要求网站开发实战作业答案