是什么让SQL Server决定使用什么锁级别(行,页或表锁?)

时间:2016-02-29 14:24:22

标签: php sql-server locking

SQL Server有很多方法locking resource。我试图了解是什么让SQL Server选择它将选择的锁级别。我想知道它何时会使用Page或表锁定在行锁上?

问题

我有一个PHP应用程序,它使用每个http请求的事务来确保在提交之前执行所有查询。令我困惑的一个问题是当许多(5+)人使用应用程序时,应用程序似乎挂起(旋转很长一段时间)!除了数据库锁之外,我能想到的任何东西都不会导致这样的行为!我认为它发生的情况是SQL Server选择由于某种原因选择Page lock或Table lock over rowlock。我试图确保SQL Server正在执行行锁而不是页锁或表锁。我正在使用ORM,所以我不能在查询中使用ROWLOCK提示。

我有办法运行查询解释计划以查看将使用的锁级别吗?

1 个答案:

答案 0 :(得分:0)

正如您所见,here在锁定模式下没有默认粒度。

通常,优化器会选择最佳的操作方法来处理这个问题。

由于长时间运行的事务会导致资源匮乏,这可能是活锁的情况吗?

您还可以查看herehere以获取有关锁定升级的信息,但我建议不要为任何表格禁用它。