在选择死锁 - SQL Server期间截断

时间:2014-02-04 18:01:46

标签: sql-server-2005 data-warehouse truncate

我们使用SQL Server 2005数据库。一些数据仓库表是TRUNCATEd并且每天都重新加载。当用户针对同一个表运行SELECT语句时,我们会遇到死锁问题。

方案

  1. 用户运行报告(SELECT语句)。
  2. 对上面SELECT中使用的表执行TRUNCATE。
  3. TRUNCATE从SELECT语句接收硬块。 SELECT语句立即被暂停。这造成了无限的僵局。
  4. 有没有人对SQL Server机制有详细的解释?还有,有工作吗?

2 个答案:

答案 0 :(得分:0)

您可以使用事务隔离级别。

Set transactin isolation level read uncommitted

<query>|

答案 1 :(得分:0)

如果没有更多信息,很难提供具体建议。您需要查看确切的查询以及它们采取的锁定。

以下是一些一般性建议:使用TRUNCATE运行DEADLOCK_PRIORITY LOW不会影响报告查询。只需稍微延迟重试该声明即可。

您还可以选择DEADLOCK_PRIORITY HIGH来终止报告查询并确定截断的优先级。

您还可以使用LOW重试10次,然后使用HIGH强制执行此操作。

请注意,TRUNCATE已完全处理并可以回滚。重试是安全的。