oracle 需要你先划分一个SGA的最大限额SGA_MAX_SIZE, 这个参数可以设置,重启后生效。
10G 实现AMM自动管理SGA,11G实现ASMM管理。
SGA也会用到虚拟内存的,通常情况下4G的物理内存,配置4G和8G的虚拟内存都可以的。
内存的分配是按照颗粒的,比如颗粒是4M,那么你原来300,你把300M改成302M,那么其实是300+4=304M。
下面先介绍几个sql语句,然后进行实验来说明
show sga/show parameter sga; //查看SGA的具体大小信息。 show parameter sga_max_size //查看SGA最大值 show parameter shared_pool //查看共享内存 show parameter db_cache //查看数据缓存 alter system set sga_max_size = 500M scope=spfile;//修改SGA最大值 alter system set shared_pool_size =200M scope=spfile; //修改共享内存 alter system set db_cache_size =250M scope=spfile; //修改数据缓存 select * from V$SGA_DYNAMIC_COMPONENTS; // 查看内存颗粒
实验
1.首先查看当前数据库的内存颗粒
2.查看当前SGA的大小,
SQL> show parameter sga;
NAME TYPE
------------------------------------ --------------
VALUE
------------------------------
lock_sga boolean
FALSE
pre_page_sga boolean
FALSE
sga_max_size big integer
300M
sga_target big integer
300M
看到前的SGA是300G。
3.设置SGA值为302G
alter system set sga_max_size = 302M scope=spfile
4.然后重新启动数据库
5.再查看sga
SQL> show parameter sga;
NAME TYPE
------------------------------------ -------------
VALUE
------------------------------
lock_sga boolean
FALSE
pre_page_sga boolean
FALSE
sga_max_size big integer
304M
sga_target big integer
300M
可以看到虽然我增加了2M,但是颗粒是4M,所以就增加了4M。