oracle library cache 啥作用
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了oracle library cache 啥作用相关的知识,希望对你有一定的参考价值。
您好,我来为您解答:Shared Pool Latch和Library Cache Latch竞争,这两个Latch是Shared Pool管理中最重要也是最常见的Latch竞争。Shared Pool Latch用于共享池中内存空间的分配和回收,如果SQL没有充分共享,反复解析,那么将会不断请求Shared Pool Latch在共享池中分配空间,由此可能造成非常严重的CPU消耗。
而Library Cache Latch用于保护Cache在内存中的SQL以及执行计划等,当需要向Library Cache中增加新的SQL时,Library Cache Latch必须被获得。在解析SQL过程中,Oracle需要搜索library Cache查找匹配的SQL,如果没有可共享的SQL代码,Oracle将全新解析SQL,获得Library Cache Latch向Library Cache中插入新的SQL代码。转载,仅供参考。
如果我的回答没能帮助您,请继续追问。 参考技术A Library Cache是Oracle SGA 中Shared pool 的组成部分。
作用如下:
1. Library cache中的并发控制:
Oracle利用Library cache lock和Library cache pin来实现并发控制,Library cache lock是在handle上获取的,而Library cache pin则是在data heap上获取。访问对象时,首先必须获取handle上的lock,然后将访问的数据pin在内存中。lock的作用是控制进程间的并发访问,而pin的作用是保证数据一致性,防止数据在访问时被交换出去。
lock和pin的实现类似于enqueue,在每个handle上都有lock和pin的holder list和waiter list,用来保存持有该资源和等待该资源的队列。
2. 阻塞分析:
现实情况中,我们有一个数据库中存在被应用大量频繁访问的procedure,当依赖的表发生变更时,导致该procedure失效,这时会出现大量的library cache lock和library cache pin的等待,堵塞应用访问,造成了重大故障。出现这个问题的原因是:当procedure失效后,所有访问该对象的进程都尝试去编译,大量进程尝试获取exclusive类型的lock和pin,出现了大量的等待。后续的Oracle版本作出了改进,当出现这种情况时,只允许第一个进程尝试去编译该对象,编译通过后,所有的进程就可以并发访问,避免了大量进程同时尝试编译的情况出现。
oracle xdb表空间已用99%,xdb表空间有啥作用,空间使用如果已满会怎样
表空间满了就不能做数据插入操作了。你可以把表空间理解为一块提前划分,存储表数据,索引信息的磁盘空间。xdb表空间不是系统表空间。应该是你自建的表空间。你可以扩展一下表空间的大小。 参考技术A 插入不了记录,不能创建任何对象
以上是关于oracle library cache 啥作用的主要内容,如果未能解决你的问题,请参考以下文章
library cache pin与library cache lock是啥地方的等待事件,一般说明啥问题
oracle 基础知识----Library Cache *
Oracle单实例情况下的library cache pin的问题模拟与问题分析
Oracle数据库大量library cache: mutex X及latch: shared pool问题排查一例