oracle latch (一)

本文详细介绍了Oracle数据库中的Latch机制,包括其结构、分类及操作方式,并对比了Latch与Lock的不同之处。此外,还深入探讨了Latch的获取过程及其等待策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

介绍了oracle的普通锁,在介绍下oracle latch,也就是内存锁,先看结构:

1.pid,进程号

2.内存地址

3.内存长度

分类:

父latch,子latch,独立latch

父latch和独立latch固话在oracle内核代码中,静态结构。实例启动前就有父latch,启动后才会产生子latch

查看latch的统计信息,v$latch_parent (父latch),v$latch_children(子latch),v$latch(独立latch,父latch以及子latch)

比如librarycachelatches保护librarycache中不同组的objects,单独的cachebufferschainslatches保护每个databasebuffercachehashchains。

latch和lock的区别是,它是管理内存的,而且没有lock那么多的模式,仅有的就是一个内存位置,获取了latch,就获取了latch相应的资源。

latch的一般动作:TEST,SET,LOAD,CLEAR,COMPARE和SWAP。

simple get:字面意思就可以看出,简单的获取,这种是最顺利的情况,运气好,一次性成功。就像你开车过红绿灯一样,碰到了绿灯。

如果无法获取相应的资源,那么肯定就要等,等多久呢?这个就需要一个人来看着,再通知你,就可以通行了,大家知道系统中进程是很忙碌的,没时间去看红绿灯,只能交给别人,这个别人就是CPU,CPU帮看着,那CPU也很忙的,总不能一直帮你看着,所以也规定CPU看一会,如果还没变绿灯,就休息一下,这就是latch free。休息多久再干活呢,这里就是叫timeout,比如休息一分钟,CPU又的干活了,又的去看红绿灯,比如看100次,那么看了100次,就叫spin,如果发现在50次的时候变绿灯了,那么就要先设置状态spin get+1,就是在spin的时候,如果看了两个轮回,还没变绿,那么就又sleep了,这时sleep+1,就是说休息的时间是上一次的N的平方。

这里到了9I以后就又增加了一种唤醒策略,就是如果持有latch的人,释放了以后,通知cpu,我释放资源了,你可以给别的人用了,上面说的那种是CPU主动去看的,这个时候CPU就通知排队的进程可以获取资源了,叫latch wait list,这里是latch的一种模式willing-to-wait。

还有一种模式,就是很灵活的,比如碰到红灯了,就不等待了,走别的路了,叫no wait,开始都一样,如果是绿灯,就立即get,如果是红灯,就失败,不会等CPU去帮他看红绿灯

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值