暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

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

DB宝 2019-10-21
812


题目部分

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


     

答案部分


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

具体而言,LatchLock有如下几点不同:

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

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

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

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

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

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

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

& 说明:

有关LockLatchPin的区别更多内容可以参考我的BLOGhttp://blog.itpub.net/26736162/viewspace-2142070/

 


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



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

详细内容可以添加麦老师微信或QQ私聊。



About Me:小麦苗

 本文作者:小麦苗,只专注于数据库的技术,更注重技术的运用

● 作者博客地址:http://blog.itpub.net/26736162/abstract/1/

 本系列题目来源于作者的学习笔记,部分整理自网络,若有侵权或不当之处还请谅解

 版权所有,欢迎分享本文,转载请保留出处

 QQ:646634621  QQ群:618766405

 提供OCP、OCM和高可用部分最实用的技能培训

● 题目解答若有不当之处,还望各位朋友批评指正,共同进步

DBA宝典

长按下图识别二维码或微信扫描下图二维码来关注小麦苗的微信公众号:xiaomaimiaolhr,学习最实用的数据库技术。


最后修改时间:2020-01-10 17:49:12
文章转载自DB宝,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论