单用户批处理作业的最快锁定策略(隔离级别)

时间:2014-04-07 20:49:36

标签: sql sql-server sql-server-2005 locking isolation-level

我们有一个SQL Server 2005数据库,其中包含报告的预处理数据。

根据生产数据库中的数据,每晚都会删除所有数据并从头开始重建。

在夜间,作业是该服务器上唯一运行的内容,因此我无法同时访问我的数据。

我们目前正在使用默认的READ_COMMITTED隔离级别。

据我所知,SQL Server会在表上放置锁,用于读写。由于在我的工作正在运行时没有其他人接触我的表(我读过的表和我写的表),指定WITH (NOLOCK)或使用独占表锁(TABLOCKX)会更快吗?

感谢任何提示,

伊夫

1 个答案:

答案 0 :(得分:2)

您可能不会注意到CPU使用率方面的任何差异。 READ COMMITTED甚至不会对位于没有未提交行的页面上的行进行S锁定。对于非常常见的READ COMMITTED隔离级别,这是SQL Server中一个鲜为人知的优化。

我建议您考虑READ UNCOMMITTED(完全等同于NOLOCK)或TABLOCK,因为它允许SQL Server按分配顺序(IAM扫描)扫描表,而不是逻辑索引顺序。这对于IO模式是有好处的,并且取决于碎片的程度可以产生重大影响(或者根本没有)。

对于批量写入,请查看Microsoft提供的相关指南。确保您利用最少日志记录。 TABLOCKX可以在这里发挥作用。