使用 Microsoft 登录
登录或创建帐户。
你好,
使用其他帐户。
你有多个帐户
选择要登录的帐户。

症状

请考虑以下情况:

  • 你的数据库具有 ALLOW_SNAPSHOT_ISOLATION 的选项,并且 READ_COMMITTED_SNAPSHOT 在 Microsoft SQL Server 2008 R2 中启用。

  • 对数据库中的表运行包含TABLOCK和UPDLOCK提示的SELECT语句。

  • SELECT语句包装在显式开始事务中,但不执行提交事务。

  • 在显式事务中,与相同查询提示一起启动的两个相同的查询在显式事务中。

在此方案中,提交第一个查询时,其他查询中的一个查询将死锁。

原因

出现此问题的原因是 SQL Server 在以下情况之一中错误地报告死锁:

  • 为数据库启用 ALLOW_SNAPSHOT_ISOLATION 和 READ_COMMITTED_SNAPSHOT时,对于同一事务的多个查询在其中一个完成时可能会错误地报告为死锁。

  • 如果启用了 ALLOW_SNAPSHOT_ISOTION 且使用了提示 TABLOCK 和 UPDLOCK ,则第二个和第三个 SELECT 语句将采用 IX 锁,目的是转换为 X。当尝试转换为 X 时,IX 锁最终将 deadlocking。

  • 当 ALLOW_SNAPSHOT_ISOLATION处于禁用状态时,第二个和第三个查询将获得六个锁。 在这种情况下,当将六个锁转换为 X 时,它只是一个阻塞方案,而不是死锁。

SQL Server 的每个新的累积更新均包含以前的累积更新中包含的所有修补程序和所有安全修补程序。 查看 SQL Server 的最新累积更新:

状态

Microsoft 已确认这是在“适用范围”部分中列出的 Microsoft 产品存在的问题。

需要更多帮助?

需要更多选项?

了解订阅权益、浏览培训课程、了解如何保护设备等。

社区可帮助你提出和回答问题、提供反馈,并听取经验丰富专家的意见。

此信息是否有帮助?

你对语言质量的满意程度如何?
哪些因素影响了你的体验?
按“提交”即表示你的反馈将用于改进 Microsoft 产品和服务。 你的 IT 管理员将能够收集此数据。 隐私声明。

谢谢您的反馈!

×