暂无图片
暂无图片
暂无图片
暂无图片
暂无图片
Oracle数据库内存小结
391
6页
3次
2020-02-27
5墨值下载
一、Oracle 预估内存:
一般情况下,在系统稳定之前,是不知道 SGA PGA 该调整为多少。在这里根据经验,在调整系统的时候有
个规则。SGA 通常情况下不能大于 memory 50%, 另外 oracle 推荐得有一个分配规则,oracle 推荐分
配给 oracle 实例的内存为物理内存的 80%。比如 8GB 的物理内存,按照 Oracle 的推荐,分配给 Oracle
实例的内存大约为 6.4G(8*80%),对于 OLAP 应用来说,分配给 SGA 的值即 sga_max_size 的值大约为
5.12G(8*80%*80%),PGA 的值即 pga_aggregate_target 的值大约为 1.28G8*80%*20%);对于
DSS 来说,分配给 SGA PGA 的值各位实例内存的 50% 3.2G。当然上面都是针对新的数据库来说的初始值,
需要在使用过程中进行调整。
下面简单用公式表示(oracle 建议)
OLTP 而言(新数据的初始参数)
SGA=memory*80%*80%
PGA=memory*80%*20%
DSS 而言(新数据的初始参数)
SGA=memory*80%*50%
PGA=memory*80%*50%
那么在使用过程中如何确定 SGA 的大小呢,我们如下展开讨论:
首先来看 SGA 是有哪些部分组成
SQL> show user
User is "sn_qudao"
SQL> select component,current_size/1024/1024 as current_size from
v$sga_dynamic_components;
COMPONENT CURRENT_SIZE
---------------------------------------------------------------- ------------
shared pool 912
large pool 16
java pool 16
streams pool 0
DEFAULT buffer cache 576
KEEP buffer cache 0
RECYCLE buffer cache 0
DEFAULT 2K buffer cache 0
DEFAULT 4K buffer cache 0
DEFAULT 8K buffer cache 0
DEFAULT 16K buffer cache 0
DEFAULT 32K buffer cache 0
ASM Buffer Cache 0
13 rows selected
SQL> show parameters shared_pool;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
shared_pool_reserved_size big integer 17616076
shared_pool_size big integer 0
SGA 实际大小 = DB_CACHE_SIZE + DB_KEEP_CACHE_SIZE + DB_RECYCLE_CACHE_SIZE +
DB_nk_CACHE_SIZE + SHARED_POOL_SIZE + LARGE_POOL_SIZE + JAVA_POOL_SIZE +
STREAMS_POOL_SIZE10g 中的新内存池) + LOG_BUFFERS+11K(Redo Log Buffer 的保护页) +
1MB + 16M(SGA 内部内存消耗,适合于 9i 及之前版本)
在上面公式中,对于 SGA 来说有两个非常重要的指标 DB_CACHE_SIZE SHARED_POOL_SIZE 下面我们分
别来讨论如何取得这两个的值。
一般来说设置 1GB 以上的 shared pool 不会给性能带来明显的提高,相反,这将给 Oracle 管理 shared
pool 以及监控 shared pool 的过程中带来较多的麻烦。而从目前的系统来说,我们没有单独分配
shared_pool 内存,而是通过内存自动管理来分配的,当前 shared_pool_size 912M。如果我们硬性
的要求设置 shared_pool 的值的话,建议在系统上线之时设置为 SGA 10%,但是不要超过 1G,然后通过
顾问来判断设置是否合理,当然必须将初始化参数 statistics_level 设置为 typical 或者 all,这样才
能产生顾问。
SQL> SELECT T.SHARED_POOL_SIZE_FOR_ESTIMATE "SP",
2 T.ESTD_LC_SIZE "EL",
3 T.ESTD_LC_MEMORY_OBJECTS "ELM",
4 T.ESTD_LC_TIME_SAVED "ELT",
5 T.ESTD_LC_TIME_SAVED_FACTOR "ELTS %",
6 T.ESTD_LC_MEMORY_OBJECT_HITS "ELMO"
7 FROM V$SHARED_POOL_ADVICE T
8 /
SP EL ELM ELT ELTS % ELMO
---------- ---------- ---------- ---------- ---------- ----------
432 98 4203 739431 0.979 175769954
528 191 7149 744591 0.9858 176184285
624 286 10082 750144 0.9932 176413511
720 381 16457 753856 0.9981 176552951
816 476 17949 754790 0.9993 176657863
912 571 20518 755308 1 176731921
1008 666 27638 755544 1.0003 176765699
1104 761 39851 755725 1.0006 176794037
1200 856 43813 755927 1.0008 176817793
1296 951 47191 756054 1.001 176837933
1392 1046 55562 756240 1.0012 176854191
1488 1141 60339 756317 1.0013 176866602
1584 1236 63715 756401 1.0014 176878638
1680 1330 64144 756455 1.0015 176889564
1776 1425 64660 756503 1.0016 176899694
1872 1520 64746 756561 1.0017 176910238
16 rows selected
ESTD_LC_SIZE:估计库高速缓存的使用数量(以兆字节为单位)
ESTD_LC_MEMORY_OBJECTS: 估算共享池中库缓存的内存对象数
ESTD_LC_TIME_SAVED: 估算将可以节省的解析时间
ESTD_LC_TIME_SAVED_FACTOR: 估算的节省的解析时间与当前节省解析时间的比
ESTD_LC_MEMORY_OBJECT_HITS: 估算可以直接从共享池中命中库缓存的内存对象的命中次数
我们主要关注 estd_lc_time_saved_factor 列的值,当该列的值为 1 时表示再增加 shared pool 的大
小对性能的提高没有意义,对于上面例子来说,当 shared pool 912MB 时达到最佳。
如何设置 buffer cache 的大小,在 oracle9i 之后开始通过设置参数 db_cache_advice 来启动顾问,
oracle 会监控各种类型的 buffer cache 的使用,oracle 会根据当前所监控到的物理读得速率,从而估
算在不同大小尺寸下的 buffer cache 产生的可能的物理读的数量,将这些信息放入到
v$db_cache_advice
SQL> show parameters db_cache_advice;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_cache_advice string ON
当然这个参数设置为 on 之后,CPU usage 会有所增加,因为会存在额外的记录,在文档中提到
When the advisory is enabled,there is a small increase in CPU usage, because
additional bookkeeping is required.
SQL>
of 6
5墨值下载
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文档的来源(墨天轮),文档链接,文档作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论

关注
最新上传
暂无内容,敬请期待...
下载排行榜
Top250 周榜 月榜