当前位置:  开发笔记 > 数据库 > 正文

SELECT查询是否锁定SQL Server中的表或页面?

如何解决《SELECT查询是否锁定SQLServer中的表或页面?》经验,为你挑选了1个好方法。

我们刚刚将生产sql实例从2012升级到2016标准版.由于我们一直在努力寻找死锁以防它存在,我刚刚面对一个并且不太明白究竟发生了什么.我不理解该问题的原因是一个会话阻止了另一个会话,但阻塞会话是一个选择查询会话.它会阻止另一个会话插入表.

被阻止的会话查询是;

INSERT INTO [AUDITHISTORYLOG_BACKUP_2017_1]([TABLE_NAME],[OPERATION_TYPE],[HOST_NAME],[USER_NAME],[PRIMARY_KEY],[FIELD],[OLD_VALUE],[NEW_VALUE],[CREATE_DATE]) values(@1,@2,@3,@4,@5,@6,@7,@8,@9)

阻塞会话查询是;

SELECT * FROM AuditDB.dbo.AUDITHISTORYLOG_BACKUP_2017_1 WHERE CREATE_DATE>CAST(GETDATE()-30 AS DATE) ORDER BY CREATE_DATE DESC

这个select查询如何阻止插入事务?

Wait_Type:LCK_M_IX
Wait_Resource:PAGE:10:1:20598647
事务隔离级别:读取已提交

有人可以帮忙吗?



1> Rahul..:

这个select查询如何阻止插入事务?

是的,它可能导致锁的类型不兼容.一个SELECT查询需要SHARED的锁,而INSERT需要EXCLUSIVE锁,这两个是不兼容的.也就是说,如果共享AUDITHISTORYLOG_BACKUP_2017_1锁存在于请求独占锁的同一资源(在您的案例表中); 在取消共享锁或释放共享锁之前,不能授予独占锁.

推荐阅读
jerry613
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有