1 SGA_MAX_SIZE的设置参考
1G内存 500MB
2G 1G
4 2500MB
8 5GB
16gb 10gb
2 10G的时候,产生了sga_target参数,设置该参数后,就不用另外再设置其他参数了,大小会自动调节,
比如alter system set sga_target=1024M,重新启动数据库起效果
3 LOCK_SGA
为保证SGA都被锁在物理内存中,不用page in/page out,可以设置lock_sga,默认为false,设定为true时,可以
全部锁在物理内存中
alter system set lock_sga=true scope=spfile;
有些操作系统不支持内存锁
4 pre_page_sga
oracle实例启动时,不会将所有sga设置的内存大小加载到操作系统中去,只是预约内存,如果要实例一开始就加载到物理内存中去,
但启动时间长点,能达到性能好的状态
alter system set pre_page_sga=true scope=spfile;
5 利用USE_INDIRECT_DATA_BUFFERS突破32位的2G内存限制
但副作用大,参考:
http://yangtingkun.itpub.net/post/468/492617
http://yangtingkun.itpub.net/post/468/492653
需要注意,使用USE_INDIRECT_DATA_BUFFERS参数,不能在使用其他9i以后新增的内存控制参数了,比如SGA_TARGET、DB_CACHE_SIZE等等
,必须通过DB_BLOCK_BUFFERS参数来指定内存的容量。
6 v$sgainfo
10g才引入的,可以查询SGA中的信息
select name,round(bytes/1024/1024)||'MB' "size",resizeable from v$sgainfo;
7 v$sgastat
SGA的统计信息
查看内存快还剩下多少
select pool,name,bytes/1024/1024MB from v$sgastat where name='free memory'
8 v$sga_target_advice
当设置了sga_target后,oracle会收集SGA相关的统计信息,通过v$sga_target_advice展现
还要确保statsistics_level参数不能为basic
show parameter statistics_level;
SQL> desc v$sga_target_advice
Name Null? Type
----------------------------------------- -------- ----------------------------
SGA_SIZE NUMBER --sga大小,就是sga的期望值
SGA_SIZE_FACTOR NUMBER --sga大小因子,也就是与实际sga大小的百分比
ESTD_DB_TIME NUMBER --设置到sga_size后dbtime消耗的期望变化
ESTD_DB_TIME_FACTOR NUMBER --dbtime消耗的变化因子,也就是体现出改变sga大小后性能的变化
百分比
ESTD_PHYSICAL_READS NUMBER --物理读的百分比
--SGA_SIZE_FACTOR为1代表的是当前实际sga大小。
SQL> select * from v$sga_target_advice order by sga_size;
9 数据缓冲区
1. 数据库高速缓冲区的大小设置
数据库高速缓冲区大小的设置有两种方式:
第一种方式是直接在参数文件内设置DB_CACHE_SIZE,DB_CACHE_SIZE参数是9i之后的版本才有的参数,其默认值为48 MB。
第二种方式是利用DB_BLOCK_BUFFERS和DB_BLOCK_SIZE这两个参数,DB_BLOCK_BUFFERS指定了数据库高速缓冲区中块的数量,DB_BLOCK_SIZE
则指定了每个块的大小。因此,数据库高速缓冲区的大小就等于DB_BLOCK_ BUFFERS×DB_BLOCK_SIZE。9i之后的版本,块的大小的默认值是
8 KB。
提示
DB_CACHE_SIZE和DB_BLOCK_BUFFERS是不能同时设置的,否则当实例启动时会有错误信息。
DB_CACHE_SIZE是可以动态修改的参数,修改后实例不需要重启。
按照一般经验,联机事务处理系统(On-line Transaction Processing,OLTP)中DB_CACHE_SIZE的大小可设置为SGA_MAX_SIZE/2到
SGA_MAX_SIZE×2/3之间,但还是需要根据实际的情况进行调整。
2. 清除数据库高速缓冲区
之前提到过,Dirty Buffer是指存放已修改,但尚未写入数据库的数据。如果数据库高速缓冲区中存在大量的Dirty Buffer,那么,就可能
导致整体性能下降,此时可以使用人工的方式将Dirty Buffer整批地写回到数据文件内。
在Oracle 9i版本中,可以使用以下的语句。
alter system set events = 'immediate trace name flush_cache';
另外,9i版本设置事件的方式可以是针对系统全部的,也可以是针对会话的(即,将该会话造成的Dirty Buffer写回)。
10g之后的版本(包含10g),可以使用以下方式。
alter system flush buffer_cache;
提示
Oracle 9i版本的方式可以针对整个系统进行Flush,也可以针对会话进行,将会话内的Dirty Buffer写回到数据文件内。
Oracle 9i版本的方式在Oracle 10g之后依然可以使用。
3 数据库高速缓冲区的分区管理
回收池(Recycle Pool)中:放到回收池中的数据,只要空间不够用,它们马上就会被释放出来。被放在回收池中的数据块不会被反复使
用。也就是说,这些数据块只在事务(Transaction)还存在时才会被用到,一旦事务结束,就会被释放出来。回收池的大小最好是默认池的
1/2。
保留池(Keep Pool):当数据只要放到保留池里时,就代表这个数据是需要常常被重复使用的,数据如果已经被放在保留池里,则数据会尽
可能地被放在里面。保留池的大小应该是默认池的10%
默认池(Default Pool):当没有指定时,数据就会放在默认池中,也就是说,放在默认池的数据利用的是LRU机制。
10 数据缓冲区的重要参数
1)DB_CACHE_ADVICE
从Oracle 9i版本开始,Oracle提供了一些自动检测性能的工具,用于提高系统性能。DB_CACHE_ADVICE就是其中一种,设置
DB_CACHE_ADVICE的作用就是在系统运行的过程中,通过监控相关的统计数据,为DBA提供数据库高速缓冲区的相关信息,以做最佳的调整。
DB_CACHE_ADVICE的设置有三种方式:
DB_CACHE_ADVICE=OFF
DB_CACHE_ADVICE=ON
DB_CACHE_ADVICE=READY
OFF代表不打开DB_CACHE_ADVICE。
DB_CACHE_ADVICE=ON表示开启DB_CACHE_ADVICE,但要注意,一旦开启(即为ON)时,Oracle会从共享池中获取一些内存空间,所以有可能会
影响性能。
DB_CACHE_ADVICE=READY表示在下次打开实例时,会预先分配足够的内存,通常建议使用此方式。
DB_CACHE_ADVICE可以动态设置,也就是使用ALTER SYSTEM SET…来修改,并且当DB_CACHE_ADVICE开启后,会将统计数据存储到V
$DB_CACHE_ADVICE内。
2) 2. DB_nK_CACHE_SIZE
Oracle 9i以后的版本可以同时支持不同大小的数据块(2 KB、4 KB、8 KB、16 KB及32 KB等5种),除了DB_BLOCK_SIZE之外,还可以设
置其他的大小,并且可以为不同尺寸的数据块指定不同大小的数据库高速缓冲区。而DB_BLOCK_SIZE的参数设置,称为标准数据块(Standard
Block),区间在2 KB至32 KB之间。在9i以后,除了系统表空间(System Tablespace)和临时表空间(Temporary Tablespace)必须使用标准数
据块外,所有其他表空间最多可以指定4种不同的标准数据块大小。
当设置好DB_nK_CACHE_SIZE之后,在配置表空间中可通过BLOCKSIZE参数来指定数据块大小,如以下示例所示。
在参数文件内设置DB_nK_CACHE_SIZE的方法如下:
db_16k_cache_size=16M
此参数也可以动态设置,语句示例如下
ALTER SYSTEM SET db_16k_cache_size = 16 SCOPE=MEMORY;
ALTER SYSTEM SET db_32k_cache_size = 32 SCOPE=MEMORY;
ALTER SYSTEM SET db_4k_cache_size = 4 SCOPE=MEMORY;
ALTER SYSTEM SET db_8k_cache_size = 8 SCOPE=MEMORY;
提示
不同大小的数据块不能相互混合存储。一个16 K的表空间必须通过DB_16K_CACHE_ SIZE来指定数据库高速缓冲区,不可以用4 K去存储。
如果DB_BLOCK_SIZE设置为8 K,就不可以再设置DB_8K_CACHE_SIZE 参数。