前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【DB笔试面试665】在Oracle中,Lock、Latch和Pin的区别有哪些?

【DB笔试面试665】在Oracle中,Lock、Latch和Pin的区别有哪些?

作者头像
AiDBA宝典
发布2019-10-23 17:09:04
8680
发布2019-10-23 17:09:04
举报
文章被收录于专栏:小麦苗的DB宝专栏

题目部分

在Oracle中,Lock、Latch和Pin的区别有哪些?

答案部分

Latch是Oracle提供的轻量级锁,它用于快速,短时间的锁定资源,可防止多个并发进程同时修改内存中的某个共享资源,它只工作在内存中。内存中资源的锁叫Latch(闩),而数据库对象(表,索引等)的锁叫Lock,也被称为队列锁(Enqueue Lock)。如果要读取数据缓存中的某个块,那么Oracle会获得这个块的Latch,这个过程叫做Pin。此时,若另外一个进程恰好要修改这个块,则它也要Pin这个块,此时它必须等待。当前一个进程释放Latch后才能Pin住,然后修改。如果多个进程同时请求的话,那么它们之间将会出现竞争。Latch没有一个入队机制,一旦前面进程释放Latch,后面的进程就蜂拥而上,没有先来后到的概念,这个和Lock是有本质区别的,这一切都发生的非常快,因为Latch的特点是快而短暂。

具体而言,Latch和Lock有如下几点不同:

① Latch是针对内存中的数据结构提供的一种互斥访问的机制,大多情况下只有X(独占排它模式),而Lock是以不同的模式来共享资源对象,各个模式间存在着兼容(共享模式,S)或互斥模式(独占排它模式,S)。

② Latch只作用于内存中,它只能被当前实例访问,而Lock作用于数据库对象,在RAC体系中实例间允许Lock检测与访问。

③ Latch是瞬间的占用,释放(CPU处理完成后立即释放),时间极短,Lock的释放需要等到事务正确的结束,它占用的时间长短由事务大小决定。

④ Latch是非入队的,随机且无规律的,而Lock是入队的,即先请求先获取。

⑤ Latch不存在死锁,而Lock中存在。

⑥ Latch是十分轻量级的,而Lock是复杂的结构。

⑦ Latch锁定的是较小的内存对象,易于被CPU快速处理,一般为底层内存结构体,例如Buffer Cache或Shared Pool中的对象。Lock锁定的是较大的数据库对象,不易被CPU快速处理,一般为应用结构体,例如表、索引等。

& 说明:

有关Lock、Latch和Pin的区别的更多内容可以参考我的BLOG:http://blog.itpub.net/26736162/viewspace-2142070/

本文选自《Oracle程序员面试笔试宝典》,作者:小麦苗

---------------优质麦课-----------

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-10-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 DB宝 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • ---------------优质麦课-----------
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档