sql server订阅发布sp_MSupd_dboXXXX造成复制死锁问题数据无法查询及CPU增到到100%

这两天发布服务器SQL Server日志中总报出现死锁,

第一步:问题信息如下
         Replication-Replication Distribution Subsystem: agent xxxxxxxxxxxxxxxxx scheduled for retry. Transaction (Process ID XX) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction. 

第二步:尝试在发布服务器上开启跟踪标志1204
         DBCC TRACEON(1204,-1)


报告出现死锁的信息不断出现,但跟踪标志1204应该返回的死锁资源信息并没有记录到日志中。难道跟踪标志对复制产生的死锁不起作用?

后来到订阅服务器上检查了一下订阅代理执行记录,发现死锁信息是订阅代理作业产生的,那么就是说在发布服务器上启用跟踪标志1204本身就是不对的?

于是在订阅服务器上启用跟踪标志1204,这次死锁资源信息被记录下来了。

比较费解的是引起死锁的资源是创建订阅时系统生成的存储过程sp_MSupd_TableA 和sp_MSupd_TableB,这是更新两个不同表的存储过程,怎么会发生死锁呢?

思索了一阵,突然想到,会不会是两个表之间进行了某种关联呢?最常见的应该就是索引视图了。检查了一下数据库中的视图,发现果然有一个索引视图的基表是TableA和TableB。这就不奇怪了,索引视图连接了2个表,两个事务同时去更新,出现死锁的可能性就很大了。问了一下别的同事,原来是为了方便使用创建了索引视图。由于视图上的索引可有可无,于是删除掉视图上的索引,问题解决……

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值