专栏首页小麦苗的DB宝专栏【DB笔试面试665】在Oracle中,Lock、Latch和Pin的区别有哪些?

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

题目部分

在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程序员面试笔试宝典》,作者:小麦苗

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

本文分享自微信公众号 - DB宝(xiaomaimiaolhr)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-10-21

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • ​SYSTEM和SYSAUX表空间存储的内容有哪些区别?若SYSAUX表空间占用过大则应该如何处理?

    今天小麦苗给大家分享的是SYSTEM和SYSAUX表空间存储的内容有哪些区别?若SYSAUX表空间占用过大则应该如何处理?。

    小麦苗DBA宝典
  • 【DB笔试面试611】在Oracle中,什么是结果集缓存?

    结果集缓存(Result Cache)是Oracle 11g的新特性,用于存储经常使用的SQL语句和函数的查询结果。当相同语句再次执行的时候,Oracle就不用...

    小麦苗DBA宝典
  • B/S架构与C/S架构(略讲)

    B/S是Browser/Server,即浏览器/服务器架构。Browser指的是Web浏览器,极少数事务逻辑在前端实现,但主要事务逻辑在服务器端实现。

    阮键
  • 【DB笔试面试435】SYSTEM和SYSAUX表空间存储的内容有哪些区别?若SYSAUX表空间占用过大则应该如何处理?

    题目 SYSTEM和SYSAUX表空间存储的内容有哪些区别?若SYSAUX表空间占用过大则应该如何处理?

    小麦苗DBA宝典
  • 【DB笔试面试622】在Oracle中,说说COUNT(*)计算行数有哪些优化手段?

    位图索引可以按很高密度存储数据,因此往往比B树索引小很多,前提是在基数比较小(列重复度比较高)的情况下。位图索引是保存空值的,因此可以在COUNT中利用。位图索...

    小麦苗DBA宝典
  • 【DB笔试面试600】在Oracle中,如何获取SQL历史执行计划?

    历史执行计划只能从AWR中获取,如果AWR没有记录的话,那么就无法获取历史执行计划了,获取历史执行计划的命令如下所示:

    小麦苗DBA宝典
  • 在Oracle中,如何定时清理INACTIVE状态的会话?

    今天小麦苗给大家分享的是在Oracle中,如何定时清理INACTIVE状态的会话?

    小麦苗DBA宝典
  • MYSQL约束

    select * from std_old order by age asc;#对表std_old进行age字段升序排列

    嘘、小点声
  • oracle--序列&视图&索引&视图&可视化操作&分页&数据库备份

    --oracle学习内容 --oracle的管理系统学习 --oracle的数据管理学习 --oracle的用户管理 --oracle二维表管理 --oracl...

    eadela
  • 【DB笔试面试595】在Oracle中,I/O Calibration和DOP有什么关系?

    从Oracle 11.2.0.2开始,只有当I/O Calibration(I/O 校准、I/O统计信息)被收集才能使用自动并行度(DOP,Automatic ...

    小麦苗DBA宝典

扫码关注云+社区

领取腾讯云代金券