oracle 9i pga使用控制

原创 2004年07月25日 13:38:00

oracle 9i pga使用控制

我们知道从9i开始oracle提供了自动管理pga的功能,从此我们可以不管sort_area_size,hash_area_size等等烦人的设置,也不用再去计算繁琐的pga大小。但是怎么控制每个session使用pga的大小呢,会不会出现一个session用完所有pga,而其他session得不到空间的状况吗?
带着这个疑问我们可以来做一个实验。

实验的步骤很简单,初始pga_aggregate_target设定为100m,我们做一个排序的大查询,然后查看pga的使用空间。然后修改pga_aggregate_target为1g,在做一个大查询,查看pga使用空间。


SQL> startup pfile=/test/inittest.ora
ORACLE instance started.

Total System Global Area 2710294504 bytes
Fixed Size                   454632 bytes
Variable Size             805306368 bytes
Database Buffers         1903992832 bytes
Redo Buffers                 540672 bytes
Database mounted.
Database opened.

SQL> show parameter pga
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
pga_aggregate_target                 big integer 100000000
 

SQL> conn test/test
Connected.
SQL> select name,value from v$statname a,v$mystat b where a.statistic#=b.statistic# and a.name like '%pga%';

NAME                                                                  VALUE
---------------------------------------------------------------- ----------
session pga memory                                                   243208
session pga memory max                                            243208
这里可以看到初始连接时pga使用了240k左右


SQL> set autotrace trace;

SQL> select title from test order by starts,ends,title,zoo,city;
2997531 rows selected.

Execution Plan
----------------------------------------------------------
   0      SELECT STATEMENT Optimizer=CHOOSE (Cost=129273 Card=2932520 Bytes=173018680)
   1    0   SORT (ORDER BY) (Cost=129273 Card=2932520 Bytes=173018680)
   2    1     PARTITION RANGE (ALL)
   3    2       TABLE ACCESS (FULL) OF 'TEST' (Cost=84738 Card=2932520 Bytes=173018680)

Statistics
----------------------------------------------------------
        475  recursive calls
         75  db block gets
     930726  consistent gets
     962505  physical reads
         60  redo size
  113681365  bytes sent via SQL*Net to client
    2198688  bytes received via SQL*Net from client
     199837  SQL*Net roundtrips to/from client
         37  sorts (memory)
          1  sorts (disk)
    2997531  rows processed

SQL> set autotrace off;
SQL> select name,value from v$statname a,v$mystat b where a.statistic#=b.statistic# and a.name like '%pga%';
NAME                                                                  VALUE
---------------------------------------------------------------- ----------
session pga memory                                                   457496
session pga memory max                                            6355736

做完一个大查询,pga的使用峰值是达到了6m左右,这其中可能包含了一部分pga自己的开销
关闭数据库,修改pga_aggregate_target为1g,再重启数据库
SQL> conn / as sysdba
Connected.
SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> exit

$ sqlplus "/as sysdba"

SQL*Plus: Release 9.2.0.4.0 - Production on Sun Jul 18 11:46:53 2004

Copyright (c) 1982, 2002, Oracle Corporation.  All rights reserved.

Connected to an idle instance.

SQL> startup pfile=/test/inittest.ora
ORACLE instance started.

Total System Global Area 2710294504 bytes
Fixed Size                   454632 bytes
Variable Size             805306368 bytes
Database Buffers         1903992832 bytes
Redo Buffers                 540672 bytes
Database mounted.
Database opened.
SQL> conn test/test
Connected.
SQL> select name,value from v$statname a,v$mystat b where a.statistic#=b.statistic# and a.name like '%pga%';

NAME                                                                  VALUE
---------------------------------------------------------------- ----------
session pga memory                                                   250792
session pga memory max                                            381864

SQL> show parameter pga
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
pga_aggregate_target                 big integer 1000000000
SQL> set autotrace trace;
SQL> select title from test order by starts,ends,title,zoo,city;
2997531 rows selected.

Execution Plan
----------------------------------------------------------
   0      SELECT STATEMENT Optimizer=CHOOSE (Cost=112995 Card=2932520 Bytes=173018680)
   1    0   SORT (ORDER BY) (Cost=112995 Card=2932520 Bytes=173018680)
   2    1     PARTITION RANGE (ALL)
   3    2       TABLE ACCESS (FULL) OF 'TEST' (Cost=84738Card=2932520 Bytes=173018680)

Statistics
----------------------------------------------------------
       3740  recursive calls
         28  db block gets
     931577  consistent gets
     955856  physical reads
         60  redo size
  113681365  bytes sent via SQL*Net to client
    2198688  bytes received via SQL*Net from client
     199837  SQL*Net roundtrips to/from client
         77  sorts (memory)
          1  sorts (disk)
    2997531  rows processed

SQL> set autotrace off;
SQL> select name,value from v$statname a,v$mystat b where a.statistic#=b.statistic# and a.name like '%pga%';

NAME                                                                  VALUE
---------------------------------------------------------------- ----------
session pga memory                                                   456568
session pga memory max                                            50263928

可以看到这次大查询使用了近50m的pga空间,为什么第一次只使用了6m呢,这是因为oracle会限制每个session使用pga的最大空间,
每个session可以使用到最大至5%pga的总空间,所以第一次可以使用到5m左右的空间,加上pga自己的开销,使用了一共6m。第二次
由于总pga大小扩大了,所以session使用的pga大小也差不多是5%的总pga大小.oracle很好的控制了pga的使用,避免了一个session
占用大部分pga的情况。
不过,还存在一种特例,在并行操作的情况下session pga可以使用到30%总pga空间。

PGA与SGA的区别,PGA的功能介绍

当用户进程连接到数据库并创建一个对应的会话时,Oracle服务进程会为这个用户专门设置一个PGA区,用来存储这个用户会话的相关内容。当 这个用户会话终止时,数据库系统会自动释放这个PAG区所占用的内...
  • u012298337
  • u012298337
  • 2013年10月22日 11:13
  • 1849

oracle学习笔记 PGA内存作用和构成

oracle学习笔记 PGA内存作用和构成 从这节课开始讲oracle非常重要的一个内存结构PGA 一)pga也非常重要 oracle的内存分两大块 一块是SGA, 里面有六个池子 Shared p...
  • xinzhan0
  • xinzhan0
  • 2017年01月09日 16:18
  • 2317

oracle9i中test下所有数据迁移到oracle11G中

前两天客户要求换数据库,有原来的oracle9i换成11G,整个过程也比较简单,但是也碰到一些小问题,记录下来便于以后参考: 整个的思路如下,首先在本地服务器的数据库中test用户的数据导出到本地,然...
  • jimmy609
  • jimmy609
  • 2014年01月22日 17:27
  • 6775

oracle 9i,10G,11G,各版本下载资源(使用迅雷),收集好久,分享上来!

现在11,10,9i的介质在官网都无法现在了,但是我们有神奇的迅雷,用下面这些地址,直接用迅雷下载,可以从别人那里获取资源 所以,也是可以下载的哈。公司有oracle服务号的可以忽略。这里包括了...
  • xiaoxing1521025
  • xiaoxing1521025
  • 2013年10月16日 17:36
  • 3320

oracle 9i,10G,11G,各版本下载资源(使用迅雷),网上搜的收藏备用!

安装介质 Oracle9i Database Release 2 Enterprise/Standard/Personal Edition for Windows NT/2000/XP h...
  • coemail
  • coemail
  • 2014年04月30日 09:48
  • 776

oracle 9i使用闪回查询恢复数据库误删问题

oracle 9i使用闪回查询恢复数据库误删问题 投稿:mrr 字体:[增加 减小] 类型:转载 时间:2015-10-21 我要评论 本篇文章给大家介绍在oracle 9i中使用闪回查询...
  • csnewdn
  • csnewdn
  • 2016年11月18日 16:39
  • 296

使用 ADO.NET 访问 Oracle 9i 存储过程

使用 ADO.NET 访问 Oracle 9i 存储过程 227(共 229)对本文的评价是有帮助 - 评价此主题 发布日期 : 5/28/2004 | 更新日期 : 5/...
  • haohaizijhz
  • haohaizijhz
  • 2012年05月06日 01:24
  • 510

使用 ADO.NET 访问 Oracle 9i 存储过程

本文讨论了如何使用 ADO.NET 访问 Oracle 存储过程(称为 SQL 编程块)和函数(返回单个值的编程块)。您可以使用以下托管数据提供程序连接到 Oracle 数据库:Microsoft ....
  • qiupuge
  • qiupuge
  • 2011年05月26日 10:00
  • 216

oracle 9i,10G,11G,各版本下载资源(使用迅雷),收集好久,分享上来!

现在11,10,9i的介质在官网都无法现在了,但是我们有神奇的迅雷,用下面这些地址,直接用迅雷下载,可以从别人那里获取资源 所以,也是可以下载的哈。公司有oracle服务号的可以忽略。这里包括了...
  • stillit
  • stillit
  • 2014年05月26日 22:01
  • 1530

Oracle:PL/SQL--流程控制(二)——case语句(注意:在Oracle 9i 后引入)

——流程控制(二)—–case语句(注意:在Oracle 9i 后引入)语法:case variable when value1 then statements1; when valu...
  • u014455929
  • u014455929
  • 2016年08月31日 21:42
  • 357
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:oracle 9i pga使用控制
举报原因:
原因补充:

(最多只允许输入30个字)