app开发者平台在数字化时代的重要性与发展趋势解析
638
2022-11-30
Oracle Latch
Latch在数据库层里面业务层面是看不到的,不像锁是可以感知到的,比如一个会话被谁锁定了被谁阻塞住了。
�LOCK – enqueue:队列,其实就是锁,也就是业务层面的阻塞。enqueue实际上就是队列,要求进程排队使用资源的会话排队 –latch
Latch的目的
�保证资源的串行访问: – 保护SGA的资源访问 – 保护内存的分配 �保证执行的串行化: – 保护关键资源的串行执行 – 防止内存结构损坏
Latch是保护数据库本身的内存结构,不是业务层面的保护
Latch V.S. enqueue
Latch不具有队列性,是大家争先恐后的去申请资源,混乱的。enqueue是队列性的,只能等到资源释放了才可以拿到资源,如果没有释放那么只能等着,等释放之后才能拿到锁。
Latch在哪里?---SGA
资源的请求和分配 �共享池 – sql 解析,sql重用.... �数据缓冲池 – 数据访问,数据写入磁盘,数据读入内存... – 修改数据块 – 数据段扩展
Latch不在PGA里面,PGA不是共享的资源,SGA主要分为两块共享池和数据缓冲池。
Oracle有哪些Latch
Latch的机制
在SGA区里面有一个Latch,这个时候process A获得了一个Latch,获得了Latch就开始干活消耗cpu了,这个时候process B也去尝试获得这个Latch,但是未成功,因为进程A以及持有这个Latch了,这个时候就出现等待了,这个等待就是Latch的获取
Latch的的获取
� wait方式--如果无法获取请求的latch,则: – spin • 当一个会话无法获得需要的latch时,会继续使用CPU(CPU 空转),达到一个间隔后, 再次尝试申请latch,直到达到最大的重试次数。 – sleep • 当一个会话无法获得需要的latch时,会等待一段时间(sleep),达到一个间隔后,再次 尝试申请latch,如此反复,直到达到最大的重试次数。 � No wait方式--如果无法获取请求的latch,则: – 不会发生sleep或者spin. – 转而去获取其它可用的Latch
Latch持有的时间是非常短的,当一个会话去申请Latch的时候恰好有别人在用的时候,当第二次去申请的时候几乎就会成功了,因为获得cpu首先就要去申请cpu,频繁的申请cpu还不如一直持有cpu让cpu空转。
shared pool里的latch争用--绑定变量(share pool里面是对SQL方面进行争用,buffer cache里面的是对数据块的争用)
绑定变量和没有绑定变量对latch的争用。
p1存储过程是没有使用绑定变量的。P2存储过程是做了绑定变量
两个存储过程执行完毕后的对比,run1是没有使用绑定变量的存储过程,run2是使用了绑定变量的存储过程。可以看到run2消耗的资源远小于run1消耗的资源。可以看出绑定变量相对于不绑定变量对share pool消耗大大减小了。
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~