Sat*_*jit 1 sql sql-server sql-server-2008
根据 DBA 的建议,在我们的应用程序中,我们没有为使用的每个选择查询添加锁定提示。
因此,它需要修改每个选择查询以设置表提示,并且需要手动执行。
由于我们想在数据库中的所有表中使用提示,是否可以在数据库级别设置无锁提示(或TRANSACTION ISOLATION LEVEL READ UNCOMMITTED),以便不需要修改每个查询并将表提示应用于所有查询?
最简洁的答案是不”。SQL Server 中的默认隔离级别是,无论是全局还是每个数据库,都READ COMMITTED无法将其更改为UNCOMMITTED。这也是一件非常好的事情。
WITH (NOLOCK)在从数据库中获取准确结果时,这是一个麻烦的秘诀,在糟糕的情况下,它甚至可能导致由于数据移动(NOLOCK无法防止)而永远运行的查询超时。请参阅NOLOCK(Sql Server 提示)是不好的做法吗?进行更多讨论,以及一些关于替代方案的好技巧。
特别是,许多读取器密集且希望在不阻塞的情况下继续运行的应用程序可以从快照隔离中受益。与 不同UNCOMMITTED,您可以使用该READ_COMMITTED_SNAPSHOT选项将快照隔离设为默认值。在您执行此操作之前,请务必阅读快照隔离的优缺点——或者更好的是,请您的 DBA 执行此操作,因为任何建议全局使用 的 DBA 都需要WITH (NOLOCK)阅读一些内容。查询提示只能作为最后的手段。