首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >这组锁是否意味着表锁,如果是,它是否可以避免?

问这组锁是否意味着表锁,如果是,它是否可以避免?
EN

Database Administration用户
提问于 2018-01-09 13:56:30
回答 1查看 260关注 0票数 1

我对Server 2008有一个查询,当使用sp_whoisactive和get_locks =1时,有以下锁打开.

代码语言:javascript
复制
<Object name="my_table" schema_name="dbo">
  <Locks>
    <Lock resource_type="KEY" index_name="pk_mypk" request_mode="X" request_status="GRANT" request_count="1" />
    <Lock resource_type="OBJECT" request_mode="IX" request_status="GRANT" request_count="1" />
    <Lock resource_type="PAGE" page_type="*" index_name="pk_mypk" request_mode="IX" request_status="GRANT" request_count="1" />
  </Locks>
</Object>

我理解钥匙和佩奇锁,但不确定目标是什么。那是个桌子锁吗?如果是这样的话,它为什么还要费心地使用键锁和页锁呢?有什么方法可以解释为什么一个只接触一小部分行的特定查询会使用一个表锁,我猜它是锁升级。

EN

回答 1

Database Administration用户

回答已采纳

发布于 2018-01-09 14:04:33

参考资料:

有关更多细节,请参阅上面的参考资料。

意图=用于建立锁层次结构。意向锁的类型是:意图共享(IS)、意图排他性(IX)和意图独占共享(6)。

意图锁定数据库引擎使用意图锁来保护在锁层次结构中较低的资源上放置共享(S)锁或独占(X)锁。意图锁之所以被命名为意向锁,是因为它们是在较低级别的锁之前获得的,因此表示有意将锁放置在较低的级别。意图锁有两个目的:

  • 以防止其他事务修改较高级别的资源,从而使较低级别的锁失效。
  • 以提高数据库引擎在更高粒度级别上检测锁冲突的效率。

例如,在对表中的页或行请求共享(S)锁之前,在表级别请求共享意图锁。在表级别设置意图锁可防止另一个事务随后在包含该页的表上获取排他(X)锁。因为数据库引擎只在表级别检查意向锁,以确定事务是否能够安全地获取该表上的锁,因此意向锁提高了性能。这就消除了检查表上的每一个行或页锁以确定事务是否可以锁定整个表的要求。

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

https://dba.stackexchange.com/questions/194986

复制
相关文章

相似问题

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