今天整理一下oracle内存知识,如果oracle内存分配不到位则会非常影像性能,oracle有自动内存管理,但是我们在自己管理运维的时候,还是应该知道内存的原则。我们oracle都是运行在操作系统之上的,所以我们需要流出一部分给操作系统使用,我们一般操作系统留20%即可,其余的都留给数据库使用,而数据库内存又分为了sg和pga,今天我们就来分别说说,我们举例来说,加入我们的服务器内存是100GB,那么我们分给操作系统的就是80GB,而pga占用20%左右即可,这样我们分给sga就是60G。sga我们分配的主要是sga_target和sga_max_target,其中注意sga_target小于等于sga_max_target。以下是实际分配情况,留作备用。
SQL> show parameter spfile
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
spfile string package/orcl/spfileorcl.ora
SQL> show parameter pfile
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
spfile string package/orcl/spfileorcl.ora
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 0
memory_target big integer 0
parallel_servers_target integer 1280
pga_aggregate_target big integer 19468M
sga_target big integer 58496M
SQL> show parameter sga
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
lock_sga boolean FALSE
pre_page_sga boolean FALSE
sga_max_size big integer 58496M
sga_target big integer 58496M
SQL> show parameter pga
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
pga_aggregate_target big integer 19468M
SQL> show parameter memory
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
hi_shared_memory_address integer 0
memory_max_target big integer 0
memory_target big integer 0
shared_memory_address integer 0
SQL>
Oracle 10g中实现了SGA的自动分配(服务器内存10G)
show parameter sga_target;
show parameter pga_aggregate_target;
show parameter sga_max_size;--SGA的最大分配
alter system set sga_target=6G scope=spfile;
alter system set pga_aggregate_target=2G scope=spfile;
Oracle内存最最一般点服务器的80%,SGA与PGA比例为8:2
Oracle 11g中实现了SGA、PGA的自动分配(服务器内存10G)
show parameter memory_target;
show parameter memory_max_target;
alter system set memory_target=8G scope=spfile;
alter system set memory_max_target=8G scope=spfile;
sga_target:默认设置为0
pga_aggregate_target:默认设置为0
注意,以上两种方式都能实现内存的修改,但是我们修改之后要注意一下scope,主要有三种范围,分别是spfile,memory,both
第一种是需要重启服务器后生效,第二种重启服务器后失效,第三种是同时生效。我们一般都是使用第三种。