Shared Pool与processes参数的关系
2008-02-19 12:40:29 来源:WEB开发网BACKGROUND VARCHAR2(1)
LATCHWAIT VARCHAR2(8)
LATCHSPIN VARCHAR2(8)
PGA_USED_MEM NUMBER
PGA_ALLOC_MEM NUMBER
PGA_FREEABLE_MEM NUMBER
PGA_MAX_MEM NUMBER
SQL> select addr from v$process;
ADDR
--------
21528900
21528EF0
215294E0
21529AD0
2152A0C0
2152A6B0
2152ACA0
2152B290
2152B880
2152BE70
2152C460
2152CA50
2152D040
2152D630
2152DC20
2152E210
2152E800
2152EDF0
已选择18行。
字段ADDR字段刚好为4字节 ,在共享池中保存process进程的信息很有可能就是其地址信息,知道了其地址,也就知道了PGA在哪里,从PGA里的数据结构就可以知道系统进程号等等之类的东西。PMON进程也是利用此信息,在pmon timer到来之际,通过地址信息,检查各数据库服务器进程的状态;此地址信息也是执行alter system kill session命令的重要纽带。怎样从Shared Pool到PGA,或者说怎样从PGA到Shared Pool?共享池中保存process进程的信息成了关键性的作用
顺便提一句,在ORACLE 9i之上,共享池划分了很多的subpool,在实例启动时,oracle根据processes参数的值,只会挑选其中一个子池来保留此信息。
为什么processes参数是一个静态参数?这跟ORACLE关于此参数的内存申请很有关系,个人猜想,此控制结构的信息是以数组的方式保存的,ORACLE申请了一片连续的空间来保存此数组,大家都知道数组结构是不能动态扩大的,不像队列或者线性链表。
赞助商链接