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