PGA内存实验

来源:互联网 发布:淘宝捉猫猫干什么的 编辑:程序博客网 时间:2024/05/18 01:07

1、观察没实验前的PGA使用情况

SQL> selectspid,PGA_USED_MEM,PGA_ALLOC_MEM,PGA_FREEABLE_MEM,PGA_MAX_MEM  from v$process a,v$session b,v$mystat c wherea.addr=b.paddr and b.sid=c.sid and rownum=1;

 

SPID PGA_USED_MEM PGA_ALLOC_MEM PGA_FREEABLE_MEM PGA_MAX_MEM

---------- ------------        -------------         ----------------          -----------

5752  1432820          2818368           327680               6995616

PGA_USED_MEM:PGA可用空间

PGA_ALLOC_MEM:PGA分配的空间

PGA_FREEABLE_MEM:可释放空间

PGA_MAX_MEM:PGA最大空间

 

2、创建新用户和表空间

为了更加方便的做实验,我们来创新新的表空间及新用户并分配新的表空间为默认表空间:

create tablesapce name datafile ‘/../..dbf’size 500M;

create user name identified by pwd defaulttablespace name

grant dba to name

 

3、实验的准备

在新用户创建一个表

create table t1(id int,name varchar(20))

 

写一个循环过程:

begin

for a in 1 … 1000000

loop

insert into t1 values(a,’abc’||a);

end loop;

commit;

end;

/

 

4、开始实验观察PGA

运行循环过程,会被锁住运行直至结束,打开另一个会话窗口,不断运行下面的sql语句观察PGA运行情况:

SQL> selectPGA_USED_MEM,PGA_ALLOC_MEM,PGA_FREEABLE_MEM,PGA_MAX_MEM  from v$process where spid=5752;

 

PGA_USED_MEM  PGA_ALLOC_MEM  PGA_FREEABLE_MEM  PGA_MAX_MEM

------------                   --------------                  ---------------                      -----------

  5817552                     6995616           589824                        6995616

 

我们可以观察到:

1、  PGA_USED_MEM不断的增大

2、  PGA_ALLOC_MEM与PGA_MAX_MEM相等

3、  PGA_FREEABLE_MEM可释放的PGA增大

4、  直到循环运行结束,PGA不再变动,也就是说不会下降

 

结论:

       每当出现一个会话时都会产生PGA内存的占用,当执行sql语句的时候,PGA内存的使用情况会增大,当SQL语句执行完毕时只要会话不关闭PGA的内存占用就不会被释放,如果说有成千上万个用户每个人都占用着一个会话而不断开,那么PGA内存就一直被分配且占用着,而这仅仅只是工作区的内存占用,非工作区(存放会话信息)的内存占用是隐形的,如果这样下去将会造成性能的问题,这就要求DBA根据不同的需要来调整PGA的大小以及会话空闲等待时间!

0 0