PGA内存实验

本文通过一个实验详细记录了在Oracle数据库中PGA内存的使用情况。从观察实验前的PGA状态开始,创建新用户和表空间,接着进行实验,包括插入大量数据并观察PGA各个指标的变化。实验结果显示,PGA_USED_MEM随SQL执行增加,PGA_FREEABLE_MEM在SQL执行后增大,而PGA内存不会自动释放,除非会话结束。这提示DBA需要合理调整PGA大小和会话管理以避免性能问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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的大小以及会话空闲等待时间!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值