计算机系统应用教程网站

网站首页 > 技术文章 正文

详解Oracle锁机制--latch(闩锁) oracle数据库中的锁

btikc 2024-10-08 01:16:19 技术文章 13 ℃ 0 评论

概述

前面介绍的是enquence方面的内容,也就是lock,今天主要介绍一下latch方面。


Latch的定义和作用

Oracle数据库使用闩锁(latch)来管理SGA内存的分配和释放,Latch是用于保护SGA中共享数据结构的一种串行化锁定机制。Latch的实现是与操作系统相关的,尤其和一个进程是否需要等待一个latch、需要等待多长时间有关。

Latch是一种能够极快地被获取和释放的锁,它通常用于保护描述buffer cache中block的数据结构。

比如数据缓存中的某个块要被读取,我们会获得这个块的latch,这个过程叫做pin;另外一个进程恰好要修改这个块,他也要pin这个块,此时他必须等待。当前一个进程释放latch后才能pin住,然后修改。如果多个进程同时请求的话,他们之间将出现竞争,没有一个入队机制,一旦前面进程释放latch,后面的进程就蜂拥而上,没有先来后到的概念,这个和Lock是有本质区别的。这一切都发生的非常快,因为Latch的特点是快而短暂,当然这个只是大致过程。


Latch的目的

1、保证资源的串行访问:

– 保护SGA的资源访问

– 保护内存的分配

2、保证执行的串行化:

– 保护关键资源的串行执行

– 防止内存结构损坏


Latch VS enqueue


Latch在哪里?---SGA

latch主要是资源的请求和分配,

1、共享池

– sql 解析,sql重用....

2、数据缓冲池

– 数据访问,数据写入磁盘,数据读入内存...

– 修改数据块

– 数据段扩展


Oracle有哪些Latch

select name from v$latchname;


Latch的机制

比如数据缓存中的某个块要被读取,我们会获得这个块的 latch,这个过程叫做spin,另外一个进程恰好要修改这个块,他也要spin这个块,此时他必须等待,当前一个进程释放latch后才能spin 住,然后修改,如果多个进程同时请求的话,他们之间将出现竞争,没有一个入队机制, 一旦前面进程释放所定,后面的进程就蜂拥而上,没有先来后到的概念,并且这一切都发生的非常快。


Latch的的获取

1、wait方式--如果无法获取请求的latch,则:

– spin

? 当一个会话无法获得需要的latch时,会继续使用CPU(CPU 空转),达到一个间隔后,

再次尝试申请latch,直到达到最大的重试次数。

– sleep

? 当一个会话无法获得需要的latch时,会等待一段时间(sleep),达到一个间隔后,再次

尝试申请latch,如此反复,直到达到最大的重试次数。

2、No wait方式--如果无法获取请求的latch,则:

– 不会发生sleep或者spin.

– 转而去获取其它可用的Latch


篇幅有限,latch方面的内容就介绍到这了,感兴趣的朋友也可以深入研究下。后面会分享更多devops和DBA方面内容,感兴趣的朋友可以关注下!

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表