1

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

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

4

2 回答 2

4

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

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

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

它不会使它运行得更快,并且可能导致其他事务被阻止

于 2013-11-09T08:35:52.903 回答
0

显然,我对 NHibernate 中锁定模式的使用弄错了。它们与向查询添加 nolock 提示没有任何关系。这是做到这一点的方法。

于 2013-11-09T08:35:39.460 回答