共享池是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