首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >关于Server锁定机制

关于Server锁定机制
EN

Stack Overflow用户
提问于 2010-01-19 10:47:03
回答 2查看 1.2K关注 0票数 3

我想问几个关于Server锁定机制的问题

  1. 如果我没有在SQL语句中使用锁提示,Server默认使用PAGELOCK提示。我说得对吗?如果是,那为什么?可能是因为锁太多的原因,这是我唯一的缺点,但是如果还有其他的,请告诉我。
  2. 我正在编写一个服务器端应用程序,一个同步服务器(不使用同步框架),并且我用C#代码文件编写了数据库查询,并使用C#连接来执行它们。现在的问题是,将默认锁定从Page更改为Row的最佳方式是什么,记住缺点(例如,在查询中添加锁提示-这就是我计划的)。如果在没有事务和语句包含锁提示的情况下执行
  3. (SELECT/DML),那么将获得什么样的锁(例如共享、更新、排它)?在事务范围内,如果使用行锁提示,事务的隔离级别是否会对锁类型产生影响。最后,如果有人可以给我示例,以便我可以测试和体验上述所有场景,我自己(例如,点网代码或sql脚本)

谢谢穆巴沙尔

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-01-19 10:57:26

  1. No.它根据需要锁定(
  2. ),并根据需要将锁升级,让DB引擎管理它(
  3. )(参见第2点(
  4. ))(见第2点(

))。

我只会使用锁提示,如果你想要特定和某些行为,如queues或非阻塞(脏)读取。

更普遍地说,为什么您认为DB引擎在默认情况下不能执行您想要的操作?

票数 3
EN

Stack Overflow用户

发布于 2010-01-19 10:59:59

默认的锁定是行锁而不是页锁,尽管锁定机制的工作方式意味着您将在层次结构中的所有对象上放置锁,例如读取单个行将在表上放置一个共享锁,在页上放置一个共享锁,然后在该行上放置一个共享锁。

这使得请求表上独占锁的操作知道它可能还没有接受它,因为存在共享锁(否则它必须检查每一个页面/行是否有锁)。

但是,如果为单个查询发出过多的锁,则会执行锁升级,从而降低锁的粒度--也就是说,它可以管理较少的锁。这可以使用跟踪标志关闭,但我不会考虑它。

在您知道实际存在锁/锁升级问题之前,您可能会过早地优化一个不存在的问题。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2092846

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档