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。

posted on 2012-04-06 22:00  无尽的缥缈  阅读(1556)  评论(0编辑  收藏  举报