关于latch的一些整理

atch是一种管理sga的锁机制,而其本身也是一种内存结构,有其addr,根据它们管理的不同结构又有各自不同的name,而负责每一种任务的latch可能不只一个,可通过v$latch_children得到每种latch的数量。

查询各种latch的数量:
select name, count(*) from v$latch_children group by name;
查询各个latch在内存中的位置
select addr, name from v$latch_children;
这两个查询没有多少实际意义,只是显示了latch的两个属性。

几种常见的latch:

shared pool latch:
当要向library cache中插入新的sql时,该latch将会被请求,用于查找存放新sql的内存空间。而该latch的数量有限,如果同时有较多的sql要写入library cache中时,将出现该latch的争用。同时,如果搜索完shared pool而并没有足够的内存,则通过lru原则清除暂时不用的sql,如果仍然没有足够的内存且其所需要的大小又小于_shared_pool_reserved_min_alloc,将会出现ora-04031错误。
分析:如果没有很好的sql的共享,如没有使用绑定变量则很可能出现该latch的争用。 出现ora-04031错误,可以适当地减小_shared_pool_reserved_min_alloc的大小,有可能也是因为shared pool过小。

library cache latch:
当执行一条sql前,先获得该latch,通过hash value查看library cache中是否有该sql。如果没有,获得shared pool latch分配空间,之后,再获得该latch将sql的执行计划放入library中。
分析:应当尽量地增强sql的共享,减少对这两种latch的争用。

cache buffer chains:
该lache用于buffer cache中数据的pined, 当访问数据时该latch被持有。显然,当出现热点块时必定会引起该latch的竞争。

cache buffer LRU chain:
当sql请求的数据没有在内存中时,需要该latch以分配内存,如果没有足够的内存,将通过lru原则清除部分数据的内存空间以满足新数据的插入。

redo copy
用于将pga向重做日志中拷贝记录。

redo allocation
负责分配重做日志缓冲区。

本文主要介绍一些我对oracle中latch的一些认识,恳请前辈们的不惜赐教。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/12742547/viewspace-219092/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/12742547/viewspace-219092/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值