Oracle OCP之硬解析在共享池中获取内存锁的过程,oracleocp
转载请注明出处:http://blog.csdn.net/guoyjoe/article/details/38684819
1、获得library cache Latch
(1)在父游标的名柄没有找到SQL语句的文本:select * from gyj_t1 where id=1;
2、释放library cache Latch
3、获得shared pool Latch
(1)搜索FreeList 空闲Chunk
(2)搜索LRU上可覆盖的chunk
(3)搜索R-FreeList 空闲Chunk
(4)如果没空间了,直接ORA-04031错误
4、释放shared pool Latch
5、 重新获取library cache Latch (oracle 11g:library cache mutex)
6、获取library cache lock Latch (oracle 11g:library cache mutex)
7、 释放library cache Latch(oracle 11g:library cache mutex)
8、获取library cache lock ----》保护父游标的名柄(SQL语句文本,父游标H0的地址)
9、释放library cache lock Latch
10、获取library cache Pin Latch
11、获取library cache Pin --》保护父游标的H0(父游标的H0里面主要记录了子游标的名柄)
12、释放library cache Pin Latch (oracle 11g:cursor mutex)
13、获取library cache lock Latch
14、获取library cache lock ----》保护子游标的名柄(子游标H0的地址)
15、释放library cache lock Latch
16、获取library cache Pin Latch
17、获取library cache Pin --》保护子游标的H0(子游标的H0里面主要记录了环境,统计信息,绑定变量)
18、释放library cache Pin Latch
19、获取library cache Pin Latch
20、获取library cache Pin --》保护子游标的H6(子游标的H6里面主要记录了执行计划)
21、释放library cache Pin Latch
同志,这些数值的大小设置是一个比较复杂的问题,特别是在低版本的ORACLE。
建议今后提问题时加上oracle的版本信息和操作系统信息。
回过头来说说这些内存大小的分配。
我们考虑一般性的场景。
首先要考虑的是你的主机有多大内存,
再考虑你的主机是否专用于数据库。
如果你的主机专用于数据库,
则一般 共享池+缓冲区+JAVA池+大型池合起来不要超过主机内存的55%。
此时要注意你的操作系统是64位还是32位,这两种情况ORACLE能够使用的内存上限也完全不同。
往下咱们再来细说共享池 缓冲区 JAVA池 大型池 的分配。
这些池的分配要根据你这个数据库的应用场景来配置。
如果是数据仓库类数据库,则缓冲区要设到尽量大。
如果是交易类数据库,则共享池可匀量多分配一些。
具体数值大小还请多到网上参阅大量相关资料后自己再做定夺。
如果实在没空深入学习,可先按典型配置,并将百分比调高至80%为宜(专用数据库服务器)。
平常运行过程中还得再根据数据库监控报告 (如statspack和awr)做调整优化。
非一时一日之功。
与A4纸差不多,比A4纸略短大约1厘米