代码之家  ›  专栏  ›  技术社区  ›  Mubashar

关于数据库锁和锁升级SQL Server 2008

  •  1
  • Mubashar  · 技术社区  · 14 年前

    我看过很多关于锁升级的文章和问题/答案,但下面的内容仍然很模糊。请回答所需的具体信息。

    1. 如果锁升级被禁用,在页面或表格等更高资源上是否会有预期的锁???

    2. 如果在页上放置了锁(IX),则另一个连接可以获取该页中某行上的锁(S)或锁(X)。

    3. 预期锁的行为是否与共享锁相同,即如果锁(IX)或锁(IS)放在表上,则不能在表中插入新行。

    请帮助我了解上述情况,我也想告诉你,在我的应用程序中,不会有超过2或3个锁在一个表从一个连接,但我的应用程序是多线程的,可能会同时获得20多个连接,所以我应该禁用锁升级???特别是如果问题1的答案是“否”。

    谢谢和问候

    1 回复  |  直到 14 年前
        1
  •  2
  •   TomTom    14 年前

    从头开始-抱歉,20个或更多的并发连接在负载方面算不了什么-您应该只在需要时禁用锁升级。也就是说,在确定一个问题后,你的问题就被这个问题解决了。就这么简单。其他的一切都是过度优化——和SQL Server中的智能作斗争,SQL Server做得很好。

    2:据我所知,没有记录在案。任何答案都可能因修补程序而改变。

    3:预定的锁基本上是准备的。他们停止分配不允许他们意愿实现的锁。也就是说-除非你的桌子很小。。。您很少使用表级锁。

    你对你的问题有具体的设想吗?基本上-这似乎是,如果这是错误的,很抱歉,就像一个初学者害怕所有的锁对他的应用程序做什么,而从来没有经历过一个sql server是如何工作的。一般来说,锁可以按您的喜好发生。有时没有锁是有意义的,通常使用riht事务隔离级别是有意义的,通常您完全忽略锁的细节,因为它们无关紧要。唯一会遇到问题的情况是死锁,通过更改访问顺序可以解决这些问题。