ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 关于latch的一些整理

关于latch的一些整理

原创 Linux操作系统 作者:spring1234 时间:2008-03-28 14:25:21 0 删除 编辑

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/,如需转载,请注明出处,否则将追究法律责任。

上一篇: exp/imp的一次应用
请登录后发表评论 登录
全部评论

注册时间:2008-03-26

  • 博文量
    14
  • 访问量
    9409