Shared Pool的一点理解

来源:互联网 发布:mac ai如何剪切图片 编辑:程序博客网 时间:2024/04/30 02:58

Shared Pool的Free list管理

Shared Pool通过Free list管理free内存块(Free chunk),根据Free chunk的大小,被划分到不同的Bucket中进行管理。关于Shared Pool中有多少个Bucket和每个Bucket中管理多大的Free chunk可以通过设置event来查看。
alter session set events 'immediate trace name heapdump level 2'
9i之前和9i及以后的Bucket管理的free chunk的大小范围有较大改变,所以9i及以后设置较大的Shared Pool,会增加更多的Bucket来管理大量的free chunk,使每个Bucket管理的free chunk数量变少,提高了查找效率,这样就减少了查找free chunk是持有Shared Pool Latch的时间。同时在9i之前,只有一个Shared Pool Latch,到9i及以后,最多可以有7个Shared Pool Latch。如果机器至少有4个cpu和Shared Pool大于250m,可以把Shared Pool划分为多个subpool,每个subpool都有自己的结构,LRU和Shared Pool Latch.

subpool的数量由参数_kghdsidx_count控制。
查找当前拥有的Shared Pool Latch的数量:
select addr, name, gets, misses, waiters_wokenfrom v$latch_children where name = 'shared pool';
ADDR NAME GETS MISSES WAITERS_WOKEN
---------------- ------------- ----------- ---------- -------------
C00000004C5B06B0 shared pool 0 0 0
C00000004C5B0590 shared pool 0 0 0
C00000004C5B0470 shared pool 0 0 0
C00000004C5B0350 shared pool 0 0 0
C00000004C5B0230 shared pool 0 0 0
C00000004C5B0110 shared pool 1385021389 90748637 12734879
C00000004C5AFFF0 shared pool 2138031345 413319249 44738488

Shared Pool的空间分配和使用情况,可以通过查询x$ksmsp(Kernal Storage Memory Management SGA Heap),每一行代表一个chunk.
SQL> desc x$ksmsp;
Name Null? Type
----------------------------------------- -------- ----------------------------

ADDR RAW(4)
INDX NUMBER
INST_ID NUMBER
KSMCHIDX NUMBER
KSMCHDUR NUMBER
KSMCHCOM VARCHAR2(16)
KSMCHPTR RAW(4)
KSMCHSIZ NUMBER
KSMCHCLS VARCHAR2(8)
KSMCHTYP NUMBER
KSMCHPAR RAW(4)

主要字段的解释:
KSMCHCOM--注释字段,每个chunk被分配,注释会添加在这个字段。
KSMCHSIZ--chunk的大小。
KSMCHCLS--代表类型,主要有4类:
1.free--空闲chunk,可以被分配。
2.recr--Recreatable Chunks,包含可以被临时移出内存的对象,在需要时这个对象可以被重建。例如,许多存储共享sql代码的内存都可以重建。
3.freeabl--Freeable Chunks,包含session周期或调用的对象,随后可以被释放,这部分内存有时候可以全部或部分提前释放,但是注意,由于某些对象是中间过程产生的,这些对象不能临时被移出内存(因为不可重建)。
4.perm--Permanent Memory Chunks,包含永久对象,通常不能独立释放。

shared_pool_reserved_size和shared_pool_reserved_min_alloc参数
shared_pool_reserved_size用于指定保留的shared pool空间,用于满足大的连续的空间请求。
shared_pool_reserved_min_alloc用于指定当大的连续的空间请求的大小大于等于参数值时但又在shared pool中找不到合适的空间,就在shared_pool_reserved_size中分配。

 
原创粉丝点击