--预备知识
PGA(Process Global Area),是server process一段私有内存区,它包含有全局变量,数据结构和一些控制信息。在Oracle8i 中,PGA调整非常复杂,要调整SORT_AREA_SIZE、HASH_AREA_SIZE、BITMAP_MERGE_AREA_SIZE、 CREATE_BITMAP_AREA_SIZE等参数。在ORACLE9I中,只需要调整 PGA_AGGREGATE_TARGET。
--PGA_AGGREGATE_TARGET初始化设置
PGA_AGGREGATE_TARGET的值应该基于Oracle实例可利用内存的总量来设置,这个参数可以被动态的修改。假设Oracle实例可分配4GB的物理内存,剩下的内存分配给操作系统和其它应用程序。你也许会分配80%的可用内存给Oracle实例,即3.2G。现在必须在内存中划分SGA和PGA区域。
在OLTP系统中,典型PGA内存设置应该是总内存的较小部分(例如20%),剩下80%分配给SGA。
OLTP:PGA_AGGREGATE_TARGET = (total_mem * 80%) * 20%
在DSS系统中,由于会运行一些很大的查询,典型的PGA内存最多分配70%的内存。
DSS:PGA_AGGREGATE_TARGET = (total_mem * 80%) * 50%
在这个例子中,总内存4GB,DSS系统,你可以设置PGA_AGGREGATE_TARGET为1600MB,OLTP则为655MB。
--配置PGA自动管理
不用重启DB,直接在线修改。
SQL> alter system set workarea_size_policy=auto scope=both;
System altered.
SQL> alter system set pga_aggregate_target=512m scope=both;
System altered.
SQL> show parameter workarea
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
workarea_size_policy string AUTO --这个设置成AUTO
SQL> show parameter pga
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
pga_aggregate_target big integer 536870912
SQL>
--监控自动PGA内存管理的性能
V$PGASTAT:这个视图给出了一个实例级别的PGA内存使用和自动分配的统计。
SQL> set lines 256
SQL> set pages 42
SQL> SELECT * FROM V$PGASTAT;
NAME VALUE UNIT
---------------------------------------------------------------- ---------- ------------
aggregate PGA target parameter 536870912 bytes --当前PGA_AGGREGATE_TARGET的值
aggregate PGA auto target 477379584 bytes --当前可用于自动分配了的PGA大小,不应该比PGA_AGGREGATE_TARGET 小
global memory bound 26843136 bytes --自动模式下工作区域的最大大小,Oracle根据工作负载自动调整。
total PGA inuse 6448128 bytes
total PGA allocated 11598848 bytes --PGA的最大分配
maximum PGA allocated 166175744 bytes
total freeable PGA memory 393216 bytes --PGA的最大空闲大小
PGA memory freed back to OS 69074944 bytes
total PGA used for auto workareas 0 bytes --PGA分配给auto workareas的大小
maximum PGA used for auto workareas 1049600 bytes
total PGA used for manual workareas 0 bytes
maximum PGA used for manual workareas 530432 bytes
over allocation count 1118 --实例启动后,发生的分配次数,如果这个值大于0,就要考虑增加pga的值
bytes processed 114895872 bytes
extra bytes read/written 4608000 bytes
cache hit percentage 96.14 percent --命中率
16 rows selected.
--V$PGA_TARGET_ADVICE
SQL> SELECT round(PGA_TARGET_FOR_ESTIMATE/1024/1024) target_mb,
ESTD_PGA_CACHE_HIT_PERCENTAGE cache_hit_perc,
ESTD_OVERALLOC_COUNT
FROM v$pga_target_advice;
The output of this query might look like the following:
TARGET_MB CACHE_HIT_PERC ESTD_OVERALLOC_COUNT
---------- -------------- --------------------
63 23 367
125 24 30
250 30 3
375 39 0
500 58 0
600 59 0
700 59 0
800 60 0
900 60 0
1000 61 0
1500 67 0
2000 76 0
3000 83 0
4000 85 0
可以看出当TARGET_MB 为375M是ESTD_OVERALLOC_COUNT=0,所以我们可以将PGA_AGGREGATE_TARGET设置成375M。
--End--
分享到:
相关推荐
SGA+PGA最好不要超过总内存的70%,内存详细调整方案,供学习。
总之,优化Oracle实例的内存配置是一个持续的过程,需要定期监控数据库性能指标,分析查询模式,并根据业务需求灵活调整SGA和PGA的配置。通过精细化管理和调整,可以显著提高Oracle数据库的响应速度和吞吐量,从而更...
ORACLE 自动内存管理和存储调整是 ORACLE 数据库中的一种重要配置,它可以根据系统的实际情况自动调整内存和存储的使用,以提高数据库的性能和效率。本文将详细介绍 ORACLE 自动内存管理和存储调整的相关知识点。 ...
1. **自动PGA管理**:自Oracle 10g开始,引入了自动PGA内存管理功能,允许数据库自动调整PGA大小,以适应工作负载的变化,减少了手动调优的需求。 2. **PGA参数配置**:`pga_aggregate_target`是用于设置PGA总目标...
1. **初始化参数调整**:Oracle的内存配置主要通过初始化参数进行。例如,`SGA_MAX_SIZE`用于设定SGA的最大大小,`DB_CACHE_SIZE`控制数据缓冲区的大小,`SHARED_POOL_SIZE`设定共享池的大小。需要根据系统负载、表...
2. **默认配置不当**:Oracle 10g默认情况下可能分配较大的内存给SGA和PGA,尤其是SGA。 3. **多实例共存**:如果在同一台机器上同时运行了Oracle和其他应用程序(如WebLogic),则需要合理分配内存资源,避免相互...
在优化Oracle数据库的内存配置时,重要的是理解这些区域如何协同工作,以及它们如何影响数据库性能。通过合理的参数设置,可以显著提升数据库的响应速度和整体效率。同时,监控和调整内存使用情况是持续优化数据库...
此外,工具如Oracle Memory Advisor可以帮助分析SGA和PGA的使用情况,提供内存调整建议。了解源码层面的知识则有助于更深入地理解这些内存区域的工作原理,从而更好地进行问题诊断和性能优化。 总之,Oracle的SGA和...
- 开启Automatic Shared Memory Management (ASMM)模式后,Oracle会根据工作负载动态分配SGA和PGA内存空间,进一步提高了内存利用率。 #### 四、案例分析 假设某企业使用Oracle数据库支持其核心业务系统,由于...
不合理的内存配置可能导致性能下降甚至系统故障。冯春培作为一位经验丰富的Oracle专家,他的这篇文章清晰而深入地介绍了Oracle内存管理的关键方面,特别是系统全局区(SGA)和进程全局区(PGA)的配置与优化。 #### 二...
优化Oracle内存配置是一个持续的过程,需要结合性能监控、SQL优化和系统资源的综合分析。通过深入理解Oracle内存架构和工作原理,可以有效地调整内存设置,提高数据库的运行效率。同时,与数据库社区的交流和学习也...
因此,必须根据系统的硬件配置、数据库的特性和预期的工作负载,通过性能监控和调整,找到最佳的内存配置。 总之,扩展Oracle数据库内存是一项技术性较强的任务,需要深入理解操作系统与Oracle数据库之间的交互,...
Oracle数据库是全球广泛使用的大型企业级关系型数据库管理系统,其性能和稳定性在很大程度上取决于内存管理的效率。...在实践中,需要结合具体环境和应用特点,持续监控和调整内存配置,以实现最佳的性能表现。
总的来说,Oracle内存管理涉及到多个层面,包括进程私有内存(PGA)和全局共享内存(SGA)的配置、使用和优化。深入理解这些概念并掌握相应的监控和调整技巧,是确保Oracle数据库高效稳定运行的基础。通过持续的学习...
- 对于大量数据处理,考虑使用临时表空间以减少PGA内存消耗。 5. 注意内存碎片:过多的内存碎片会影响性能,定期进行SGA和PGA的清理和整理。 6. 监控和调整:使用动态性能视图(如V$PGA_TARGET_ADVICE和V$SGA_...
Oracle数据库的内存管理主要分为两大区域:系统全局区(SGA)和程序全局区(PGA)。其中,SGA是所有数据库进程共享的内存区域,而PGA则为每个服务器进程分配私有内存。SGA又细分为多个子区域,包括共享池(Shared Pool)、...