zoukankan      html  css  js  c++  java
  • 如何估算PGA,SGA的大小,配置数据库服务器的内存

    ORACLE给的建议是: OLTP系统  PGA=(Total Memory)*80%*20%。DSS系统PGA=(Total Memory)*80%*50%。

    ORACLE建议一个数据库服务器,分80%的内存给数据库,20%的内存给操作系统,那怎么给一个数据库服务器配内存呢?

    SQL> select * from v$pgastat;

    NAME                                                                  VALUE UNIT
    ---------------------------------------------------------------- ---------- ------------
    aggregate PGA target parameter                                    104857600 bytes 

    -----这个值等于参数PGA_AGGREGATE_TARGET的值,如果此值为0,表示禁用了PGA自动管理。
    aggregate PGA auto target                                          75220992 bytes     

    -----表示PGA还能提供多少内存给自动运行模式,通常这个值接近pga_aggregate_target-total pga inuse.
    global memory bound                                                20971520 bytes

    -----工作区执行的最大值,如果这个值小于1M,马上增加PGA大小
    total PGA inuse                                                    30167040 bytes

    -----当前分配PGA的总大小,这个值有可能大于PGA,如果PGA设置太小.这个值接近select sum(pga_used_mem) from v$process.
    total PGA allocated                                                52124672 bytes

    -----工作区花费的总大小
    maximum PGA allocated                                              67066880 bytes
    total freeable PGA memory                                                 0 bytes         ----没有了空闲的PGA
    process count                                                            23                    ----当前一个有23个process
    max processes count                                                      25
    PGA memory freed back to OS                                               0 bytes
    total PGA used for auto workareas                                   8891392 bytes
    maximum PGA used for auto workareas                                22263808 bytes
    total PGA used for manual workareas                                       0 bytes                  ---为0自动管理
    maximum PGA used for manual workareas                                     0 bytes            ---为0自动管理
    over allocation count                                                     0        

    如果PGA设置太小,导致PGA有时大于PGA_AGGREGATE_TARGET的值,此处为0,说明PGA没有扩展大于TARGET的值,如果此值出现过,那么增加PGA大小。
    bytes processed                                                   124434432 bytes
    extra bytes read/written                                                  0 bytes
    cache hit percentage                                                    100 percent  ---命中率为100%,如果太小增加PGA

    recompute count (total)                                                6651

    19 rows selected

    SQL> select max(pga_used_mem)/1024/1024 M from v$process;   ----当前一个process消耗最大的内存

             M
    ----------
    9.12815189

    SQL> select min(pga_used_mem)/1024/1024 M from v$process where pga_used_mem>0; ---process消耗最少内存

             M
    ----------
    0.19186878

    SQL> select max(pga_used_mem)/1024/1024 M from v$process ;    ----process曾经消耗的最大内存

             M
    ----------
    9.12815189

    SQL> select sum(pga_used_mem)/1024/1024 from v$process;   ----当前process一共消耗的PGA

    SUM(PGA_USED_MEM)/1024/1024
    ---------------------------
               28.8192501068115

    如何设置PGA呢?我们可以在压力测试阶段,模拟一下系统的运行,然后运行

    select (select sum(pga_used_mem)/1024/1024 from v$process) /(select count(*) from v$process) from dual;得到一个process大约占用了多少的内存,然后估算系统一共会有多少连接,比如一共有500个连接,

    那么Sessions=1.1*process +5=500,那么processes=450,再乘以一个process需要消耗的内存,就能大约估算出PGA需要设置多大。

    最好将PGA设置的值比计算出的值大一点,PGA值设定好后,就可以根据系统的性质,如果系统为OLTOP,那么总的内存可以设置为PGA/0.16,最后也能估算出SGA的大小,建议还是多配点内存,反正便宜。

    下面摘抄eygle的关于一个process能够分配的最大内存(串行操作)的规则:

    10gR1之前,对于串行操作(非并行)一个process能够分配的最大的内存为min(5%pga_aggregate_target,100m)

    10gR2之后,对于串行操作(非并行)一个process能够分配的最大内存有如下规则:

    如果pga_aggregate_target<=500m,那么最大的内存为20%*pga_aggregate_target.

    如果500m<pga_aggregate_target<=1000m,那么最大内存为100m.

    如果1000m<pga_aggregate_target<=2.5G,那么最大内存为10%*pga_aggregate_target.
    如果pga_aggregate_target>2.5G,那么最大内存为2.5G.
    SQL> SELECT x.ksppinm NAME, y.ksppstvl VALUE, x.ksppdesc describ
      2  FROM SYS.x$ksppi x, SYS.x$ksppcv y
      3  WHERE x.inst_id = USERENV ('Instance')
      4  AND y.inst_id = USERENV ('Instance')
      5  AND x.indx = y.indx
      6  AND x.ksppinm LIKE '%&par%'
      7  /
    NAME                                                                             VALUE                                                                            DESCRIB
    -------------------------------------------------------------------------------- -------------------------------------------------------------------------------- --------------------------------------------------------------------------------
    _smm_max_size                                                                    20480                                                                            maximum work area size in auto mode (serial)
    SQL> show parameter pga
    NAME                                 TYPE        VALUE
    ------------------------------------ ----------- ------------------------------
    pga_aggregate_target                 big integer 100M
    此处我的一个process能够分配的最大内存为20M,因为我的PGA=100M,符合上面的规则。
    隐含参数_smm_max_size表示一个process能够分配最大的memory.
  • 相关阅读:
    合并vector里的内容,输出一个string
    免费矢量图标下载【转载】
    NX二次开发-UFUN打开选择文件夹对话框UF_UI_create_filebox
    Windows路径操作API函数学习【转载】
    NX二次开发-UFUN设置对象线型UF_OBJ_set_font
    NX二次开发CreateDialog函数在UI.hxx文件和WinUser.h中的冲突【转载】
    NX二次开发-UFUN将工程图中的点坐标映射到建模绝对坐标UF_VIEW_map_drawing_to_model
    NX二次开发-UFUN将建模绝对空间中的点映射到工程图坐标UF_VIEW_map_model_to_drawing
    NX二次开发-UFUN CSYS坐标系转换UF_CSYS_map_point
    VC操作Excel之基本操作(颜色等)【转载】
  • 原文地址:https://www.cnblogs.com/hehe520/p/6330633.html
Copyright © 2011-2022 走看看