是否可以在数据库级别设置无锁定或TRANSACTION ISOLATION LEVEL READ UNCOMMITTED?

时间:2014-11-21 11:16:15

标签: sql sql-server sql-server-2008

在我们的应用程序中,根据DBA的建议,我们正在为每个使用的选择查询添加无锁提示。

因此,它需要修改每个选择查询以设置表提示,并且是时候手动完成了。

由于我们想在数据库中的所有表中使用提示,是否可以在无锁提示(或 TRANSACTION ISOLATION LEVEL READ UNCOMMITTED ) >数据库级以便不需要修改每个查询并将表提示应用于所有查询?

1 个答案:

答案 0 :(得分:4)

简短的回答是" no"。 SQL Server中的默认隔离级别为READ COMMITTED,无法将此更改为UNCOMMITTED,无论是全局还是每个数据库。这也是一件非常好的事情。

WITH (NOLOCK)在从数据库中获取准确结果方面遇到麻烦,在不良情况下,它甚至可能导致因数据移动而导致永久运行的查询超时(NOLOCK无法防范)。有关更多讨论,请参阅Is the NOLOCK (Sql Server hint) bad practice?,以及有关替代方案的一些好建议。

特别是,许多读取器很重且想要不受阻塞地继续运行的应用程序可以从快照隔离中受益。与UNCOMMITTED不同,可以使用READ_COMMITTED_SNAPSHOT选项将快照隔离设置为默认值。在您执行此操作之前,请务必阅读快照隔离的优缺点 - 或者更好的是,请让您的DBA执行此操作,因为任何建议全球使用WITH (NOLOCK)的DBA都有一些阅读权限要做。查询提示应仅用作最后的手段。