本文共 9226 字,大约阅读时间需要 30 分钟。
今天碰到了 Intra-Query Parallel Thread Deadlocks 简单的说就是并发查询把自己给锁住了。
原理:
在并发查询运行是,有一个生产者和一个消费者,生产者等待消费者产生数据,而消费者等待生产者处理完数据。本来是不应该出现死锁的情况的。出现死锁就是因为sql server 有bug,但是修补这个bug可能风险太高所以一直没有修补。
实例:
贴上我今天抓到的intra-Query Parallel 死锁
select * from vw_package_length Proc [Database Id = 7 Object Id = 240055941] select * from (select p.ID, p.title, p.classID, p.smallPic, p.author, p.announcer, p.series, p.brief, p.feeChanID, (select count(1) from ProductAudio where status = 1 and productID = p.ID) as C, row_number() over(order by p.orderCount desc) as
处理方法:
1.调整索引让执行计划更加有效
2.加查询提示设置maxdop,当然可以设置全局的dop,但是我是不建议
关于这类型的死锁在书《Troubleshooting SQL Server》有提到
更加详细的可以看这里: