<

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 参数。

你可能感兴趣的:(oracle)