我有15个表被规范化以包含记录,许多用户可能正在这些表中插入/更新数据(没有两个用户可以同时更新相同的记录,这受到客户端实现的限制).这15个表在存储过程中逐个更新.WITH(NOLOCK)用于select语句以避免读锁定,因为某些用户可能同时查看数据.但有时在这些过程中会锁定这些select语句.根据我过去的经验,我把这些nolock用来避免阻塞.
我不确定是否在某处丢失了WITH(NOLOCK)或者这是其他问题. Should I search for missing WITH(NOLOCK)?
or what other ways are there to avoid this locking?
NOLOCK有哪些限制?我只是在阅读数据,我不在乎我是否读取了已提交或未提交的数据.可以采取哪些其他步骤来消除此阻止?
Sudhir Panda.. 7
WITH(NOLOCK):
WITH(NOLOCK)相当于使用READ UNCOMMITED作为事务隔离级别.
基本上它给了脏读.即如果任何事务持有一些数据然后我们尝试获取数据它将给出输出而无需等待事务提交.这样我们就可以毫无等待地获得脏读.
因此,您将面临读取随后回滚的未提交行的风险,即从未进入数据库的数据.因此,虽然它可以防止读取被其他操作陷入僵局,但它带来了风险.在具有高交易率的银行应用程序中,对于您尝试使用它解决的任何问题,它可能不会是正确的解决方案.
https://social.msdn.microsoft.com/Forums/sqlserver/en-US/a3b1d05b-5479-485b-94c5-4f271adf5802/where-to-and-where-not-to-use-with-nolock?forum= TRANSACTSQL
WITH(NOLOCK):
WITH(NOLOCK)相当于使用READ UNCOMMITED作为事务隔离级别.
基本上它给了脏读.即如果任何事务持有一些数据然后我们尝试获取数据它将给出输出而无需等待事务提交.这样我们就可以毫无等待地获得脏读.
因此,您将面临读取随后回滚的未提交行的风险,即从未进入数据库的数据.因此,虽然它可以防止读取被其他操作陷入僵局,但它带来了风险.在具有高交易率的银行应用程序中,对于您尝试使用它解决的任何问题,它可能不会是正确的解决方案.
https://social.msdn.microsoft.com/Forums/sqlserver/en-US/a3b1d05b-5479-485b-94c5-4f271adf5802/where-to-and-where-not-to-use-with-nolock?forum= TRANSACTSQL