这里简单发表下对库告诉缓存的认识,大家知道共享池是有librarycache和datadictionarycache和控制部分组成,首先sql执行的过程显示语法分析阶段,然后是语意分析阶段,也就是验证下对象权限等一些列的东西,再下面就是SQL进行hash运算,运算后匹配library cache里的hash桶,再匹配hash桶上面的handle,也就是句柄,如果匹配成功,那么去找子游标,如果不成功,那么就生成一个handle,这里也就是硬解析,挂载hash桶上。
这里如果是不同用户或者,期间对象权限更改,就算是SQL文本一样,也是无法共享子游标的,生成handle,其实就是要想共享池申请空闲的内存,期间获得shared pool latch ,那么很容易产生冲突。handle其实就是存放的父游标,真正的执行计划是存放在子游标上的,也就是heap6上,一个父游标可能对应多个子游标,比如,不同用户下的相同SQL,就会造成1个父对多个子游标,这种父游标存在,而要重新生成子游标,就是relaod,需要耗硬件资源,数据库性能也就十分低下,所以我们要避免硬解析和reload,解析过程中很消耗资源,而且容易造成
latch的冲突,父游标里主要包含SQL文本,父游标打开时,是被锁住的,也就是不能交换出library cache ,子游标主要包含执行计划和绑定变量,这个就很重要。这里再介绍下软解析,其实只要在hash桶里可以匹配对应的SQL文本,那么就是软解析,说明之前运行过该sql,其实sql执行期间只要步骤可以跳过,那么我们就可以定位为软解析。这里还有软软解析,这个是最好性能,session_cached_cursors,当会话相同的CURSOR第三次访问是,那么会话会在PGA里做个标记,就算会话结束,cursor也不会从library
cache交换出去,这里不需要访问library cache,只和PGA有关联,共享的东西这里我们没去访问,也就是不争用资源,性能得到提升。
分享到:
相关推荐
当出现上述情况的时候,我们可以通过v$session_wait查询等待事件,当然,这种情况下,该session的等待事件一定是'Library cache lock'。 让我们来解释一下, 第一种情况,当会话1(session 1)在对一个表执行DML ...
针对oracle性能问题中的library cache pin lock,给出解决方案。
确定系统慢的原因: select * from v$session_wait where event != 'client message' and event not like '%NET%' and wait_time = 0 and sid > 5;
Navicat 远程连接 Oracle 时提示oracle library is not loaded 所需文件
library cache lock等待事件分析处理
Navicat Premium 15 连接Oracle时提示oracle library is not loaded的问题解决,直接替换新文件就可以了
Oracle RAC Cache Fusion介绍.pdf
关于oracle share pool 中library cache的详解
你也在为LatchFree、Librarycache争用那些事头疼吗,快来看看本文作者是怎么解决的。
使用Oracle 10gAS进行webcache的安装配置文档。 Web Cache是Oracle应用服务器的一个组件,起着HTTP高速缓存和负载均衡的作用。利用其HTTP高速缓存的功能,可以在HTTP层面上实现网站的异地镜像缓存。虽然它实现的镜像...
详解library cache 自己手工整理 有latch pin cursor leap 等的论述
library cache pin 事件是用来管理library cache的并发访问的, pin一个object会引起相应的heap被载入内存中,如果客户端需要修改或检测这个object它就必须在锁住后取得一个pin.library cache pin的等待时间为3秒钟,...
Oracle Buffer和Cache的区别 buffer与cache操作的对象就不一样。 buffer(缓冲)是为了提高内存和硬盘(或其他I/0设备)之间的数据交换的速度而设计的。 cache(缓存)是为了提高cpu和内存之间的数据交换速度而设计...
Oracle利用Library cache lock和Library cache pin来实现并发控制,Library cache lock是在handle上获取的,而Library cache pin则是在data heap上获取。访问对象时,首先必须获取handle上的lock,然后将访问的数据...
详解Oracle数据库的db_cache_size和granule_size 摘取了官方文档的描述,用中文进行了分析
Oracle Cache Fusion 原理介绍
用Navicat连接Oracle数据库时报错:Oracle library is not loaded 是oci.dll版本不对。因为Navicat是通过Oracle客户端连接Oracle服务器的,Oracle的客户端分为两种,一种是标准版,一种是简洁版,即Oracle Install ...
Navicat 连接 oracle library is not loaded的解决方法
oracle library oci.dll could not be loaded-附件资源
oracle 连接环境所需要的 OCI ,版本 11.2