返回顶部
首页 > 资讯 > 数据库 >如何理解latch
  • 559
分享到

如何理解latch

2024-04-02 19:04:59 559人浏览 泡泡鱼
摘要

这期内容当中小编将会给大家带来有关如何理解latch,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。1.串行化 概述 数据

这期内容当中小编将会给大家带来有关如何理解latch,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。

1.串行化 概述 
数据库系统本身是一个多用户并发处理系统,在同一个时间点上,可能会有多个用户同时操作数据库, 多个用户同时在相同的物理位置上写数据时,不能发生互相覆盖的情况,这叫做串行化,串行化会降低系统的并发性,但这对于保护数据结构不被破坏来说则是必需的。在oracle数据库中,通过闩(latch)和锁定(lock)来解决这两个问题。
闩锁和锁定既有相同点又有不同点。相同点在于它们都是用于实现串行化的资源。而不同点则在于闩锁(Latch)是一个低级别、轻量级的锁,获得和释放的速度很快,以类似于信号灯的方式实现。而锁定(Lock)则可能持续的时间很长,通过使用队列,按照先进先出的方式实现。也可以简单地理解为闩锁是微观领域的,而锁定则是宏观领域的。
注意 :latch是用于保护SGA区中共享数据结构的一种串行化锁定机制。它不仅仅用于buffer cache, 还用于shared pool以及log buffer等。 

2.Latch 概述

Oracle数据库使用闩锁(latch)来管理SGA内存的分配和释放.Latch是用于保护SGA区中共享数据结构的一种串行化锁定机制。Latch的实现是与操作系统相关的,尤其和一个进程是否需要等待一个latch、需要等待多长时间有关。
Latch是一种能够极快地被获取和释放的锁,它通常用于保护描述buffer cache中block的数据结构。

3.SPIN与休眠

(1).SPIN 

spin 就是一个进程独占cpu time,直到运行的结束。这个期间其他进程不能获得这个cpu的运行时间。对于单CPU来说没有spin概念。
比如数据缓存中的某个块要被读取,我们会获得这个块的 latch,这个过程叫做spin,另外一个进程恰好要修改这个块,他也要spin这个块,此时他必须等待,当前一个进程释放latch后才能spin住,然后修改,如果多个进程同时请求的话,他们之间将出现竞争,没有一个入队机制,一旦前面进程释放所定,后面的进程就蜂拥而上,没有先来后到的概念,并且这一切都发生的非常快,因为Latch的特点是快而短暂。

(2).休眠
休眠意味着暂时的放弃CPU,进行上下文切换(context switch),这样CPU要保存当前进程运行时的一些状态信息,比如堆栈,信号量等数据结构,然后引入后续进程的状态信息,处理完后再切换回原来的进程状态,这个过程如果频繁的发生在一个高事务高并发进程的处理系统里面,将是个很昂贵的资源消耗,所以Oracle选择了spin,让进程继续占有CPU,运行一些空指令,之后继续请求,继续spin,直到达到_spin_count值,这时会放弃CPU,进行短暂的休眠,再继续刚才的动作。初始状态下,一个进程会睡眠0.01秒。然后醒过来,并再次尝试获得latch。 进程一旦进入睡眠状态,则会抛出一个对应的等待事件,并记录在视图v$session_wait里,说明当前该进程正在等待的latch的类型等信息。

4. Latch 的种类

(1).Willing-To-Wait

任何时候,只有一个进程可以访问内存中的某一个数据块,如果进程因为别的进程正占用块而无法获得Latch时,他会对CPU进行一次spin(旋转),时间非常的短暂,spin过后继续获取,不成功仍然spin,直到spin次数到达阀值限制(这个由隐含参数_spin_count指定),此时进程会停止spin,进行短期的休眠,休眠过后会继续刚才的动作,直到获取块上的Latch为止。

(以下字段反映了 Willing-to-wait 类型请求)
GETS:成功地以 Willing-to-wait 请求类型请求一个 latch 的次数。
MISSES:初始以 Willing-to-wait 请求类型请求一个 latch 不成功的次数。

SLEEPS:初始以 Willing-to-wait 请求类型请求一个 latch 不成功后,进程等待获取 latch的次数。

(2).Immediate

这种类型的latch比较少,对于这种类型的latch来说,都会有很多个可用的latch。当一个进程请求其中的一个latch时,会以no-wait模式开始请求。如果所请求的latch不可用,则进程不会等待,而是立刻请求另外一个latch。只有当所有的latch都不能获得时,才会进入等待。

(以下字段反映了 Immediate 类型请求)
IMMEDIATE_GETS:以 Immediate 请求类型成功地获得一个 latch 的次数。

IMMEDIATE_MISSES:以 Immediate 请求类型请求一个 latch 不成功的次数。

5.Latch 获取过程

如何理解latch

6.Latch 和 Lock的区别

- Latch 的访问,包括查询也是互斥的,任何时候,只能有一个进程能pin住内存的某一块

- latch只作用于内存,只能被当前实例访问,而Lock作用于数据库对象

- Latch是瞬间的占用,释放,Lock的释放需要等到事务正确的结束,他占用的时间长短由事务大小决定

- Latch是非入队的,而Lock是入队的
- Latch不存在死锁,而Lock中存在。 

7. Latch的cleanup

因异常而长时间不能释放latch的session,pmon每隔3秒会进行清理。

8. Latch的级别

分为0~14 级别 , 当进程占用一个latch时,只能再请求比它级别高的latch,如果要请求低级别的latch,则需要释放当前latch。

9. Latch的资源争用

(1).SQL语句

 如果没有使用绑定变量,很容易造成频繁读写shared pool里的内存块,如果存在大量的sql被反复分析,就会造成很大的Latch争用和长时间的等待, 从而导致与解析SQL相关的共享池中的Latch争用 。与 shared pool共享池相关的latch有Library Cache Latch 和Shared Pool Latch。如果数据库出现了上述latch的争用,则有必要检查下是否有正确使用绑定变量

(2).cache buffer chain

当一个会话需要去访问一个内存块时,它首先要去一个像链表一样的结构中去搜索这个数据块是否在内存中,当会话访问这个链表的时候需要获得一个Latch,如果获取失败,将会产生Latch cache buffer chain 等待,导致这个等待的原因是访问相同的数据块的会话太多或者这个列表太长(如果读到内存中的数据太多,需要管理数据块的hash列表就会很长,这样会话扫描列表的时间就会增加,持有chache buffer chain latch的时间就会变长,其他会话获得这个Latch的机会就会降低,等待就会增加)。

(3).Buffer busy waits

当一个会话需要访问一个数据块,而这个数据块正在被另一个用户从磁盘读取到内存中或者这个数据块正在被另一个会话修改时,当前的会话就需要等待,就会产生一个buffer busy waits等待。
产生这些Latch争用的直接原因是太多的会话去访问相同的数据块导致热快问题,造成热快的原因可能是数据库设置导致或者重复执行的SQL 频繁访问一些相同的数据块导致。热块产生的原因不尽相同,按照数据块的类型,可以分成以下几种热块类型,不同热块类型处理的方式都是不同的:表数据块、索引数据块、索引根数据块和文件头数据块。

上述就是小编为大家分享的如何理解latch了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注编程网数据库频道。

您可能感兴趣的文档:

--结束END--

本文标题: 如何理解latch

本文链接: https://lsjlt.com/news/65980.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 如何理解latch
    这期内容当中小编将会给大家带来有关如何理解latch,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。1.串行化 概述 数据...
    99+
    2024-04-02
  • 深入理解latch: cache buffers chains
    事件背景:    一个客户的数据库发生了宕机事件,查看了数据库的awr报告,原来是由于出现大量的latch: cache buffers chains等待事件导致系统消耗量大量的CP...
    99+
    2024-04-02
  • 怎么理解Oracle的lock和latch
    这篇文章主要介绍“怎么理解Oracle的lock和latch”,在日常操作中,相信很多人在怎么理解Oracle的lock和latch问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解...
    99+
    2024-04-02
  • 如何进行Oracle Latch 说明
    这篇文章给大家介绍如何进行Oracle Latch 说明,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。Oracle Latch 说明一. Latch说明 1  &nbs...
    99+
    2023-06-06
  • 怎么理解DB BUFFER LRU列表的latch等待
    这篇文章主要介绍“怎么理解DB BUFFER LRU列表的latch等待”,在日常操作中,相信很多人在怎么理解DB BUFFER LRU列表的latch等待问题上存在疑惑,小编查阅了各式资料,整理出简单好用...
    99+
    2024-04-02
  • Oracle中如何获取v$latch数据源实验
    这篇文章主要介绍了Oracle中如何获取v$latch数据源实验,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。 实验环境:Oracle R...
    99+
    2024-04-02
  • latch中undo global data问题的处理方法
    latch中undo global data问题的处理方法,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。五一假期期间接到运维同学的微信,说应用...
    99+
    2024-04-02
  • latch cache buffers chains的解决步骤是什么
    今天就跟大家聊聊有关latch cache buffers chains的解决步骤是什么,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。 latch...
    99+
    2024-04-02
  • ORA-09310: sclgt: error freeing latch ORACLE 报错 故障修复 远程处理
    文档解释 ORA-09310: sclgt: error freeing latch Cause: Internal error Action: See OSD error accompanying this message ORA-09...
    99+
    2023-11-05
    报错 故障 sclgt
  • ORA-09703: sem_release: cannot release latch semaphore ORACLE 报错 故障修复 远程处理
    文档解释 ORA-09703: sem_release: cannot release latch semaphore Cause: The semaphore used for accessing latches could not be...
    99+
    2023-11-05
    报错 故障 sem_release
  • ORA-09705: spcre: cannot initialize latch semaphore ORACLE 报错 故障修复 远程处理
    文档解释 ORA-09705: spcre: cannot initialize latch semaphore Cause: The semaphore used for accessing latches could not be in...
    99+
    2023-11-05
    报错 故障 spcre
  • ORA-09826: SCLIN: cannot initialize atomic latch. ORACLE 报错 故障修复 远程处理
    文档解释 ORA-09826: SCLIN: cannot initialize atomic latch. Cause: System call atomic_op() return error. Action: Check additi...
    99+
    2023-11-05
    报错 故障 SCLIN
  • ORA-09828: SCLFR: atomic latch return error. ORACLE 报错 故障修复 远程处理
    文档解释 ORA-09828: SCLFR: atomic latch return error. Cause: System call atomic_op() return unexpected error. Action: Check ...
    99+
    2023-11-05
    报错 故障 SCLFR
  • ORA-09702: sem_acquire: cannot acquire latch semaphore ORACLE 报错 故障修复 远程处理
    文档解释 ORA-09702: sem_acquire: cannot acquire latch semaphore Cause: The semaphore used for accessing latches could not be...
    99+
    2023-11-05
    报错 故障 sem_acquire
  • 如何理解代理ip
    这篇文章将为大家详细讲解有关如何理解代理ip,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。何谓代理IP,实际上是一种网络代理,使用户可以通过代理人访问想要浏览的网站。总的来说,代理服务是保护...
    99+
    2023-06-25
  • 如何理解innodb
    本篇文章为大家展示了如何理解innodb,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。 plugin innodbinnodb作为my...
    99+
    2024-04-02
  • 如何理解ajax
    这篇文章将为大家详细讲解有关如何理解ajax,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。什么是AjaxAjax是Asynchronous JavaScri...
    99+
    2024-04-02
  • 如何理解JSON
    这篇文章主要讲解了“如何理解JSON”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何理解JSON”吧!这几个字母是什么意思JavaScript Objec...
    99+
    2024-04-02
  • 如何理解SpringMVC
    目录一、SpringMVC简介二、SpringMVC核心组件2.1、DispatcherServlet2.2、HandlerMapping2.3、HandlerInterceptor...
    99+
    2024-04-02
  • 如何理解TypeScript
    今天就跟大家聊聊有关如何理解TypeScript,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。前言TypeScript是强类型语言,所以相比于Jav...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作