资源描述:
《oracle latch优化》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、oraclelatch优化oraclelatch优化个人分类:ORACLESTATPACTLatch产生的原因,诊断以及对策Latch争用通常意味这某个进程持有latch的时间过长。如果latch争用明显,系统性能将显著下降。在高并发的环境中,latch争用经常发生,并且你无法完全消除latch争用。在v$system_event中总会出现latchfree等待事件。只有当time_waited相对实例启动以来的总时间比较明显时,你才需要关注latch争用。当latch在系统范围内的等待时间比较显
2、著时,你可以通过v$latch中的sleeps列来发现争用显著的latch:Selectname,gets,misses,immediate_gets,immediate_misses,sleepsfromv$latchorderbysleeps;immediateimmediatenamegetsmissesgetsmissessleeps----------------------------------------------------------------------enqueueha
3、shchains427709504279001964sharedpool91066505400002632rowcacheobjects690598872793840907517enqueues804433143301670013761librarycache6944717210334946582719044328cachebufferschains16910402521166249615326895909127478...对不同的latch,其产生的原因以及可采取的对策都有所不同。详细的说明所有
4、的latch可以写成一本书了。这里我们只选择最常见的五个latch加以说明:sharedpool,librarycache,cachebufferschains,cachebufferslruchain和rowcacheobjects。Sharedpool和librarycachelatchOracle的共享池由不同的结构组成。主要包括:数据字典缓存,sql区和库缓存。通过v$sgastat你可以查看其他一些结构。Sharedpoollatch主要用来保护共享池的内存结构,当分配或者释放共享池内存
5、时需要先获得该latch。例如,为一个新的sql语句或pl/sql过程、函数、包,触发器等分配空间(硬解析)时,或者为换出、清除某些内存块,以便为新的对象腾出足够的空间时,都需要获取sharedpoollatch。在oracle9i之前,共享池内存结构由一个独立sharedpoollatch保护,从9i开始,则有最多7个子latch可以用于共享池的保护。这也是为什么oracle9i可以将共享池分成多个子共享池的原因(服务器至少需要4颗cpu,并且shared_pool_size大于250m才能使用
6、多个子共享池的特性)。子共享池的个数可以通过隐含参数_kghdsidx_count手动调节,该参数同时会指定合适的sharedpool子latch的个数。如果你手动增加子共享池的个数,你应该同时增加shared_pool_size的值,因为每个子共享池都有自己的结构,lru列表和sharedpoollatch。否则,实例启动时可能会遇到以下错误:Ora-04031:unabletoallocate32bytesofsharedmemory("sharedpool","unknownobject",
7、"sgaheap(5,0)","fixedallocationcallback").下面的统计信息是从一个16颗cpu,shared_pool_size为256m的oracle9i数据库中读取的。由_kghdsidx_count参数可知共享池被分成2个子池,通过x$kghlu(kernelgenericheaplru)可以知道lru列表也有2个。v$latch_children视图显示了7个子latch中的2个已经被使用。Selecta.ksppinm,b.ksppstvlfromx$ksppia
8、,x$ksppsvbwherea.indx=b.indxanda.ksppinm=’_kghdsidx_count’;ksppinmksppstvl----------------------------_kghdsidx_count2selectaddr,kghluidx,kghlufsh,kghluops,kghlurcr,kghlutrn,kghlumxafromx$kghlu;addrkghluidxkghlufshkghluopskghlurcrkghlutrnkghlu