共享池是Oracle著名的SGA的一个重要组成部分,当我们尝试从共享池中分配较大的连续区域时(默认来说是4400bytes),我们可能会用到共享池中的保留区域(也叫保留池);注意Oracle总是会先尝试扫描普通共享池的空闲列表,之后才尝试扫描保留池的空闲列表,无论所需分配的内存块是否超过隐式参数_shared_pool_reserved_min_alloc所指定的值。 什么?你看到过的4031描述文档是用以下伪代码描述分配流程的:
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
large, scan reserved list
if (chunk found)
check  chunk  size  and  perhaps  truncate
if (chunk  is  not  found)
scan regular  free  list
if (chunk found)
check  chunk  size  and  perhaps  truncate
all  done
if (chunk  is  not  found)
do LRU operations  and  repeat
 
small, scan regular  free  list
if (chunk found)
check  chunk  size  and  perhaps  truncate
all  done
if (chunk  is  not  found)
do LRU operations  and  repeat
那么来看看以下测试:
?
1
2
3
4
5
6
7
8
9
10
11
SQL>  alter  system  set  "_shared_pool_reserved_pct" =5 scope=spfile;
 
System altered.
 
SQL> startup frce;
SP2-0714: invalid combination  of  STARTUP options
SQL> startup  force ;
ORACLE instance started.
 
Total System  Global  Area 3154116608 bytes
Fixed  Size