症状
请考虑 Microsoft SQL Server Compact 3.5 中的以下情形:
-
你有两个可串行隔离的事务。
-
两个事务都尝试在包含 TABLOCK 锁定提示或 XLOCK 锁定提示的同一表上执行 DML 操作(查询/DML)。
在这种情况下,你会遇到死锁。
原因
出现此问题的原因是两个事务都等待另一个事务处理 XLOCK。 在编译查询时,两个事务都将获取表上的共享锁,然后保留对可串行隔离的锁。 当两个事务都尝试执行一个执行时,对包含 XLOCK 锁定提示的同一表的查询,这两个事务都等待 XLOCK 的另一个。 因此,会发生死锁。注意当两个事务对包含一个 TABLOCK 锁定提示的同一表执行 DML 操作时,也会发生此问题。
解决方案
SQL Server Compact 3.5 Service Pack 2
此问题的修补程序首次在累积更新2中发布。 有关如何为 SQL Server 2008 R2 获取此累积更新包的详细信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
2289547 SQL Server Compact 3.5 Service Pack 2 的累积更新2
状态
Microsoft 已确认这是在“适用范围”部分中列出的 Microsoft 产品存在的问题。
更多信息
有关死锁的详细信息,请访问以下 Microsoft 开发人员网络(MSDN)网站:
发生有关 DML 的详细信息,请访问以下 MSDN 网站:
DML有关软件更新术语的更多信息,请单击下面的文章编号以查看 Microsoft 知识库中的相应文章:
824684 用于描述 Microsoft 软件更新的标准术语的说明