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

时间:2010-03-11 06:44:41

标签: sql-server-2008 locking

我见过很多关于锁定升级的文章和问题/答案,但是事情仍然模糊不清。请回答具体要求的信息。

  1. 如果禁用锁定升级,则会在页面或表格等较高资源上设置预期锁定

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

  3. 预期锁定的行为与共享锁定相同,即如果将Lock(IX)或Lock(IS)放置在表格中,我们无法在表格中插入新行。

  4. 请帮助我理解上面的场景,我还想告诉你,在我的应用程序中,一个连接中一个表中的锁定不会超过2个或3个,但我的应用程序是多线程的,可能会获得超过20个连接同时我应该禁用锁升级???特别是如果问题1的答案是“否”。

    谢谢和问候

1 个答案:

答案 0 :(得分:2)

从头开始 - 抱歉,20个或更多并发连接在加载方面没有任何关系 - 如果需要,您应该只禁用锁升级。也就是说,在确定帽子之后,你所遇到的问题由此解决。那么简单。其他任何事情都是过度优化的 - 并且在SQL Server中打击智能,这做得非常好。

1:不是我知道的,在某些可能的罕见情况下。

2:我的知识没有记录。任何答案都可能随修补程序而改变。

3:预期锁定基本上是一种准备。他们停止分配不允许他们打算实现的锁。也就是说 - 除非你的桌子很小......你很少会有桌面锁定。

您是否有针对您的问题的具体方案?基本上 - 这看起来很抱歉,如果这是错误的,就像一个初学者害怕所有锁定对他的应用程序做什么而没有经历过SQL服务器如何事先工作。一般来说,锁定就像你喜欢它们一样。有时无锁是有意义的,通常使用riht事务隔离级别是有道理的,通常你完全忽略锁定事物的细节,因为它们无关紧要。您将遇到问题的唯一情况是死锁,并通过更改访问顺序来解决这些问题。

除此之外,Locks正常工作,您信任SQL Server才能正常工作。