我想问几个问题,就SQL服务器锁定机构

  1. 如果我不用锁定的暗示SQL Statement,SQL服务器使用PAGELOCK暗示的默认。我???如果是的话,那么为什么?可它由于因管理过多的锁这是我唯一把的缺点,但请让我知道如果还有其他的。并且还告诉我,如果我们可以改变这种默认行为,如果其合理要做。

  2. 我写的一个服务器的端应用程序,同步服务器(不使用同步框架)和我有书面数据库中的查询C#码文件和使用ODBC连接,以执行它们。现在的问题是什么是最好的方式改变的默认锁定从页行保持存在的缺陷心(例如添加锁定的暗示在查询这是什么我计划)。

  3. 如果有什么sql query(选择/仔)正在执行,而无范围的事务和发言包含锁的提示那么什么样的锁定将获取(例如共享、更新独家)?虽然在交易的范围并隔离级别的交易具有影响锁的类型,如果ROWLOCK提示是在使用。

  4. 最后,如果一些可以给我的样本,所以我可以试验和经验,所有上述情况我自己的(例如点网的代码或sql脚本)

感谢 Mubashar

有帮助吗?

解决方案

  1. 没有。它锁,因为它认为合适的和升级锁,因为需要

  2. 我们的数据库引擎的管理它

  3. 参见第2点

  4. 参见第2点

我只用锁定的暗示,如果你想的具体和特定行为,例如: 的队列 或非阻挡(肮脏)读取。

更一般地说,为什么你认为的数据库引擎不可能做你想要什么,默认情况下?

其他提示

默认锁定行锁不页锁,尽管这种方式在其中的锁定机构工作意味着你将把门锁上的所有对象内的层次结构例如读一个单一的排将共享锁在桌子上,一个共享锁在网页上再上一个共享锁行。

这使得一个行动请求的一个独特锁在桌知道它不可能采取它,因为有一个共同锁定本(否则将必须检查每一页进行锁。)

如果你问题太多的锁定个人查询,但是,它执行锁升级,这减少了颗粒度的锁-这就是它的管理小锁。这可以被关闭,使用微量的标志,但我不会考虑它。

直到你知道你确实有一个锁/锁升级的问题你的风险,过早地最优化的一个不存在的问题。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top