关于shared pool的深入探讨(一)
http://www.eygle.com/internal/shared_pool-1.htm 【程序编程相关:Herb Sutter又有新作《C++ 】
link: 【推荐阅读:Eclipse3.0+lomboz3.0】
很多文章上说,shared pool设置过大会带来额外的管理上的负担,从而在某些条件下会导致性能的下降. 【扩展信息:[原创]一个关于软件开发的超级简单的但超】关于shared pool的设置一直是一个争议较多的内容.
那么这个管理上的负担指的是什么内容呢?
本文对这个内容作一定的深入探讨.本文只涉及一个方面,后续的文章将从其他方面继续讨论.基础知识:
我们可以通过如下命令转储shared pool共享内存的内容:
sql> alter session set events ´immediate trace name heapdump level 2´;
session altered.
本测试中引用的两个trace文件:
9i:
sql> @gettrcname
trace_file_name
--------------------------------------------------------------------------------/opt/oracle/admin/hsjf/udump/hsjf_ora_24983.trc8i:
sql> @gettrcname
trace_file_name
--------------------------------------------------------------------------------/usr/oracle8/admin/guess/udump/guess_ora_22038.trcshared pool通过free list管理free块,free list按不同size划分bucket
在oracle8i中,不同bucket的size范围如下所示(size显示的是下边界):oracle:/usr/oracle8/admin/guess/udump>cat guess_ora_22038.trc|grep bucket
bucket 0 size=44 bucket 1 size=76 bucket 2 size=140 bucket 3 size=268 bucket 4 size=524 bucket 5 size=1036 bucket 6 size=2060 bucket 7 size=4108 bucket 8 size=8204 bucket 9 size=16396 bucket 10 size=32780 我们注意,在这里,小于76的块都位于bucket 0上;大于32780的块,都在bucket 10上初始的,数据库启动以后,shared pool多数是连续内存块当空间分配使用以后,内存块开始被分割,碎片开始出现,bucket列表开始变长... 下一页