【问题标题】:Understanding effects of with (updlock, rowlock) on a query in SQL Server了解 with (updlock, rowlock) 对 SQL Server 查询的影响
【发布时间】:2013-11-21 08:06:36
【问题描述】:

我正在使用 NHibernate 从报告数据库中查询数据,并希望优化 READ 性能。 “脏读”根本不是问题。 NHibernate 提供锁定模式。如果我使用 LockMode.UpgradeNoWait 模式,我可以看到在生成的 SQL 中出现“with (updlock, rowlock)”。我一直在阅读这方面的内容,但不幸的是,我的 SQL 不够复杂,无法真正理解其后果。我相信我真正想要的是出现“with (nolock)”语句,但 NHibernate 并没有提供任何这样做的方法。

然后我的问题是:假设我的表正在其他事务中写入。针对该表的查询中的“with (updlock, rowlock)”提示是否会导致它更快地返回?会影响性能吗?该查询是针对单个表的非常简单的选择。没有加入。覆盖查询的表上有一个非聚集索引。

【问题讨论】:

    标签: sql-server nhibernate


    【解决方案1】:

    updlock更新锁 放置在被触摸(选择)的每一行 - 所以这意味着直到事务结束(显式或隐式),被触摸的行SELECT 将对它们有一个更新锁,允许其他事务读取,但不能更新或删除该行。

    rowlock 只是表示您想要行级锁,而不是页或表锁。

    如果您需要先选择,然后在同一个显式事务中更新一行,则该锁是有意义的。

    它不会让它运行得更快,并且会导致其他事务被阻塞

    【讨论】:

      【解决方案2】:

      显然我对 NHibernate 中锁定模式的使用弄错了。它们与向查询添加 nolock 提示没有任何关系。 This is the way to do it.

      【讨论】:

        猜你喜欢
        • 2011-09-17
        • 2011-04-25
        • 2021-04-23
        • 1970-01-01
        • 2016-04-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多