1 查看内存组件情况
当为SGA_TARGET指定非零值而不为SGA自动调优的SGA组件指定值时,Vparameter视图中自动调优的SGA组件参数的值为0,ISDEFAULT列的值为TRUE。
如果已经为任何自动调优的SGA组件参数指定了一个值,那么在查询VPARAMETER时显示的值就是为该参数指定的值。
SELECT name, value, isdefault
FROM v$parameter
WHERE name LIKE ‘%size’;
2 PGA的管理及内容

程序全局区域(PGA)是一个存储区域,它包含服务器进程的数据和控制信息。它是在服务器进程启动时由Oracle服务器创建的非共享内存。该服务器进程对它的访问是独占的。附加到一个Oracle实例的所有服务器进程分配的总PGA内存也称为该实例分配的聚合PGA内存。
当使用共享服务器时,PGA的一部分可以位于SGA中。
2.1 PGA的内容
PGA通常包含以下内容:
Private SQL Area
私有SQL区域也称为用户全局区域(UGA),它包含绑定信息和运行时内存结构等数据。该信息特定于每个会话对SQL语句的调用;绑定变量持有不同的值,游标的状态也不同,等等。发出SQL语句的每个会话都有一个私有SQL区域。提交相同SQL语句的每个用户都有自己的私有SQL区域,该私有SQL区域使用单个共享SQL区域。因此,许多私有SQL区域可以与相同的共享SQL区域相关联。私有SQL区域的位置取决于为会话建立的连接类型。如果会话通过专用服务器连接,私有SQL区域位于服务器进程的PGA中。但是,如果会话通过共享服务器连接,私有SQL区域的一部分将保存在SGA中。
Cursor and SQL Areas
Oracle Pro*C程序或Oracle Call Interface (OCI)程序的应用程序开发人员可以显式地打开特定私有SQL区域的游标或句柄,并在整个程序执行过程中将它们作为命名资源使用。数据库为某些SQL语句隐式发出的递归游标也使用SQL区域。
Work Area
对于复杂的查询(例如,决策支持查询),PGA的很大一部分专门用于内存密集型操作符分配的工作区域,例如:
Sort-based operators, such as ORDER BY, GROUP BY, ROLLUP, and window functions
Hash-join
Bitmap merge
Bitmap create
Write buffers used by bulk load operations
排序操作符使用工作区域(排序区域)在内存中对一组行执行排序。类似地,散列连接操作符使用工作区域(散列区域)从其左侧输入构建散列表。
工作区域的大小可以控制和调优。通常,较大的工作区可以显著提高特定操作符的性能,但代价是较高的内存消耗。
Session Memory
会话内存是分配给保存会话变量(登录信息)和与会话相关的其他信息的内存。对于共享服务器,会话内存是共享的,而不是私有的。
2.2 PGA的管理
Automatic PGA Memory Management
默认情况下,Oracle数据库自动全局地管理专用于实例PGA的内存总量。可以通过设置初始化参数PGA_AGGREGATE_TARGET来控制这个数量。然后,Oracle数据库尝试确保跨所有数据库服务器进程和后台进程分配的PGA内存总量永远不会超过这个目标。但这是目标值,而不是硬性限制。PGA_AGGREGATE_LIMIT设置了可以使用的PGA数量的硬限制。最小值为1024 MB,最大值为物理内存的120%减去总SGA,并且它必须至少与PGA_AGGREGATE目标一样大。如果没有设置PGA_AGGREGATE_LIMIT,在相同的最小值和最大值内,它默认为PGA_AGGREGATE_TARGET的200%,当超过PGA_AGGREGATE_LIMIT时,使用最多内存的会话的调用将被中止。并行查询将被视为一个单元。如果总的PGA内存使用仍然超过限制,使用最多内存的会话将被终止。SYS进程和关键的后台进程不受此限制。




