设为首页 收藏本站
查看: 465|回复: 0

[经验分享] <

[复制链接]

尚未签到

发表于 2016-7-24 08:13:41 | 显示全部楼层 |阅读模式
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 参数。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-248455-1-1.html 上篇帖子: JAVA 连接 ORACLE RAC 字符串 下篇帖子: Oracle 中实现随机抽取数据
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表