概述
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的大小以及会话空闲等待时间!
最后
以上就是狂野小鸽子为你收集整理的PGA内存实验的全部内容,希望文章能够帮你解决PGA内存实验所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复