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);