oracle11g自动内存管理

Oracle一直不停的在为Orace数据库的自动化管理努力着,11G中的自动内存管理是Oracle数据库中又一新的里程碑,通过新参数MEMORY_TARGET

来代替PGA和SGA的配置,ORACLE在运行过程中会自动调节PGA和SGA的大小,跟10G中SGA自动管理的方法基本一直。MEMORY_TARGET参数

可支持动态修改,同样的MEMORY_TARGET也有一个限制最大内存分配的参数:MEMORY_MAX_TARGET,这个跟SGA_TARGET和

SGA_MAX_TARGET的关系一样。

启用内存自动管理

  • DBCA创建数据库的过程中可直接设置MEMORY_TARGET参数
  • 数据库创建完成后,可通过以下方式手动配置MEMORY_TARGET
      ALTER SYSTEM SET MEMORY_TARGET = 256M;
      ALTER SYSTEM SET SGA_TARGET = 0;
      ALTER SYSTEM SET PGA_AGGREGATE_TARGET = 0;

后两步是禁用SGA和PGA的自动管理. 让ORACLE对内存实行自动调节. 还可以设置MEMORY_MAX_TARGET参数限制Oracle可自动分配的最大

内存.该参数不能动态调整,调整后需要重新启动数据库.正确设置MEMORY_MAX_TARGET参数的方法:

      ALTER SYSTEM SET MEMROY_MAX_TARGET=256M SCOPE=SPFILE;

查看MEMORY_TARGET内存的设置情况:

SQL> show parameter target

  NAME                                 TYPE        VALUE
    ------------------------------------ ----------- ------------------------------
  archive_lag_target                   integer     0
  db_flashback_retention_target        integer     1440
  fast_start_io_target                 integer     0
  fast_start_mttr_target               integer     0
  memory_max_target                    big integer 256M
  memory_target                        big integer 256M
  pga_aggregate_target                 big integer 0
  sga_target                           big integer 0

--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

如果不使用MEMORY_TARGET管理内存,SGA和PGA要手动修改。

 修改sga大小

SQL> show parameter sga
SQL> alter system set sga_max_size=24G scope=spfile;
SQL> alter system set sga_target=24G scope=spfile;
SQL> shutdown immediate
SQL> startup

修改PGA大小(不需要重启)

SQL> show parameter pga
SQL> alter system set workarea_size_policy=auto scope=both;
SQL> show parameter workarea
SQL> alter system set pga_aggregate_target=8G scope=both;
SQL> show parameter pga
-- 3-1查看实际pga分配情况
SQL> SELECT * FROM V$PGASTAT;

查看sga和pga的使用情况

SQL> select name,total,round(total-free,2) used, round(free,2) free,round((total-free)/total*100,2) pctused from
(select 'SGA' name,(select sum(value/1024/1024) from v$sga) total,
(select sum(bytes/1024/1024) from v$sgastat where name='free memory')free from dual)
union
select name,total,round(used,2)used,round(total-used,2)free,round(used/total*100,2)pctused from (
select 'PGA' name,(select value/1024/1024 total from v$pgastat where name='aggregate PGA target parameter')total,
(select value/1024/1024 used from v$pgastat where name='total PGA allocated')used from dual);

猜你喜欢

转载自blog.csdn.net/xianjuke008/article/details/109645947