• PGA介绍


    PGA参数:
    1、查看workarea_size_policy参数设置
    show parameter workarea_size_policy
    workarea_size_policy为auto表明PGA为自动管理

    2、v$pgastat视图:
    --查看pga命中率
    select * from v$pgastat where name='cache hit percentage';
    --v$pgastat各记录含义
    select name,value from v$pgastat;
    aggregate PGA target parameter --这个值等于参数PGA_AGGREGATE_TARGET的值,如果此值为0,表示禁用了PGA自动管理。
    aggregate PGA auto target  --表示PGA还能提供多少内存给自动运行模式,通常这个值接近pga_aggregate_target-total pga inuse.
    global memory bound  --工作区执行的最大内存,如果这个值小于1M,马上增加PGA大小
    total PGA inuse --正被耗用的pga,可以从v$process的SUM(pga_used_mem)字段中获取
    total PGA allocated --当前实例已分配的PGA内存总量,可能超过PGA_AGGREGATE_TARGET的限定值
    maximum PGA allocated  --pga曾经扩张到的最大值
    total freeable PGA memory --可释放的pga
    process count --当前有几个process
    max processes count  --允许的最大进程数
    PGA memory freed back to OS
    total PGA used for auto workareas  --auto模式下占用的workara size 大小
    maximum PGA used for auto workareas --auto模式下占用的workara size最大 大小
    total PGA used for manual workareas --manual模式下占用的workara size 大小
    maximum PGA used for manual workareas --manual模式下占用的workara size最大 大小
    over allocation count  --使用量超过pga大小的次数
    bytes processed --pga使用的字节
    extra bytes read/written  --向临时段写的字节
    cache hit percentage --命中率为100%,如果太小增加PGA
    recompute count (total)

    3、v$pga_target_advice视图
    SQL> show parameter pga_aggregate_target;
    NAME                                 TYPE        VALUE
    ------------------------------------ ----------- ------------------------------
    pga_aggregate_target                 big integer 191M

    --假如我们需要调整pga_aggregate_target时,到底我们应该设置多大呢?oracle为了帮助我们确定这个参数的值,引入了一个新的视图:
    --v$pga_target_advice。 为了使用该视图,需要将初始化参数statistics_level设置为typical(缺省值)或all。
    SELECT a.pga_target_for_estimate / 1024 / 1024, --调整后的pga大小
           a.pga_target_factor,--当前pga大小
           a.estd_pga_cache_hit_percentage,--pga中cache命中的百分比
           a.estd_overalloc_count --PGA的过载量,最好为0
      FROM v$pga_target_advice a;
    A.PGA_TARGET_FOR_ESTIMATE/1024 PGA_TARGET_FACTOR ESTD_PGA_CACHE_HIT_PERCENTAGE ESTD_OVERALLOC_COUNT
    ------------------------------ ----------------- ----------------------------- --------------------
                            23.875             0.125                            62                 1000
                             47.75              0.25                            83                  141
                              95.5               0.5                            89                   55
                            143.25              0.75                            89                   44
                               191                 1                            92                    1
                      229.19921875               1.2                            92                    0
                    267.3994140625               1.4                            92                    0
                     305.599609375               1.6                            92                    0
                    343.7998046875               1.8                            92                    0
                               382                 2                            93                    0
                               573                 3                            93                    0
                               764                 4                            93                    0
                              1146                 6                            93                    0
                              1528                 8                            93                    0
    pga_target_factor为1表示当前的pga大小,1其他都是以这个进行相比的比值。

    /*
    同时,我们知道v$tempstat里记录了读写临时表空间的数据块数量以及所花费的时间。这样,我们就可以结合v$pga_target_advice和v$tempstat
    这两个视图。可以得到每一种估计PGA值下的响应时间大致是多少,从而可以换一个角度来显示PGA的建议值:
    */
    SELECT 'PGA Aggregate Target' component,
           ROUND(pga_target_for_estimate / 1024 / 1024) target_size,
           estd_pga_cache_hit_percentage cache_hit_ratio,
           ROUND(((estd_extra_bytes_rw /
                 DECODE((b.blocksize * i.avg_blocks_per_io),
                          0,
                          1,
                          (b.blocksize * i.avg_blocks_per_io))) * i.iotime) / 100) "response_time(sec)"
      FROM v$pga_target_advice,
           (SELECT AVG((readtim + writetim) /
                       DECODE((phyrds + phywrts), 0, 1, (phyrds + phywrts))) iotime,
                   AVG((phyblkrd + phyblkwrt) /
                       DECODE((phyrds + phywrts), 0, 1, (phyrds + phywrts))) avg_blocks_per_io
              FROM v$tempstat) i,
           (SELECT value blocksize FROM v$parameter WHERE NAME = 'db_block_size') b; --b表示查询数据库当前块大小

    4、v$sql_workarea_histogram视图:
    完全在内存中排序的为最佳排序(optimal_executions);若内存不够,直接将部分数据写出到磁盘的称为一遍排序(onepass_executions)

    SELECT a.low_optimal_size,--最佳执行的pga最小大小
           a.high_optimal_size,--最佳执行的pga最大大小
           a.optimal_executions,--最佳执行的次数
           a.onepass_executions,--遍历一次的次数
           a.multipasses_executions,--遍历多次的次数
           a.total_executions --总的执行次数
      FROM v$sql_workarea_histogram a
     WHERE total_executions <> 0
     ORDER BY low_optimal_size;

    /*optimal、onepass、multipass执行次数的百分比,optimal所占的百分比越高越好,如果onepass和 multipass占的百分比很高,
    就不需要增加pga_aggregate_target的值了,或者调整SQL语句以使用更少的PGA区*/
    SELECT optimal_count,
           ROUND(optimal_count / total_count * 100, 2) "optimal_count%",
           onepass_count,
           ROUND(onepass_count / total_count * 100, 2) "onepass_count%",
           multipass_count,
           ROUND(multipass_count / total_count * 100, 2) "multipass_count%"
      FROM (SELECT SUM(a.total_executions) total_count,
                   SUM(a.optimal_executions) optimal_count,
                   SUM(a.onepass_executions) onepass_count,
                   SUM(a.multipasses_executions) multipass_count
              FROM v$sql_workarea_histogram a
             WHERE a.total_executions <> 0)

    5、v$process_memory和v$process视图:         
    --查看每个进程每种类型(SQL、PL/SQL、OLAP和JAVA)分配的pga大小
    SELECT * FROM v$process_memory;
    --查看每个进程pga的具体分配情况(已使用的,分配值,空闲值,最大值)
    SELECT p.program,--进程
           p.pga_used_mem,--使用的内存
           p.pga_alloc_mem,--分配的内存
           p.pga_freeable_mem,--空闲的内存
           p.pga_max_mem   --最大可有的内存
      FROM v$process p;

    SELECT SUM(pga_used_mem),SUM(pga_alloc_mem),SUM(pga_max_mem) FROM v$process;

    --查看工作区执行排序情况
    SELECT name,
           cnt,
           DECODE(total, 0, 0, ROUND(cnt / total * 100, 2)) percentage
      FROM (SELECT name, value cnt, SUM(value) OVER() total
              FROM v$sysstat
             WHERE name like 'workarea exec%');

    6、v$sql_workarea_active视图:显示当前工作区的活动情况
    SELECT to_number(decode(SID, 65535, NULL, SID)) sid,
           operation_type operation,
           trunc(expected_size/1024) esize,--PGA管理器估计的本次操作需要的总内存数量
           trunc(actual_mem_used/1024) mem,--目前正在使用的内存数量
           trunc(max_mem_used/1024) "max mem",--该SESSION曾经使用的最大PGA内存数量
           number_passes pass,--0代表内存排序,1代表1-pass排序,M代表M-PASS排序
           trunc(tempseg_size/1024) tsize --转储到临时表空间的大小
      FROM v$sql_workarea_active
     ORDER BY 1,2;

    7、查看分配给各个会话的内存量
    SELECT s.value,s.sid,a.username FROM v$sesstat s, v$statname n, v$session a
     WHERE s.statistic# = n.statistic#
       AND n.name = 'session pga memory'
       AND s.sid = a.sid

    8、pga大致分配规则
    For OLTP 系统
     PGA_AGGREGATE_TARGET = (<Total Physical Memory > * 80%) * 20%
    For DSS 系统
     PGA_AGGREGATE_TARGET = (<Total Physical Memory > * 80%) * 50%
     
    --查看OLAP
    cmd 用sqlplus "/ as sysdba"登陆
    Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
    With the Partitioning, OLAP and Data Mining options

  • 相关阅读:
    个人对BFC的见解
    事件简单示例
    visual studio .net 2003
    C# Dictionary 的几种遍历方法
    C# 监听文件夹
    调用SAP dll 出现 试图加载格式不正确的程序
    SAP Connector 类概述
    Sapnco3.0 RFC Server Programs Receive Idocs
    微软工具下载地址
    Sapnco3.0 RFC Client Programs
  • 原文地址:https://www.cnblogs.com/lanzi/p/2134260.html
Copyright © 2020-2023  润新知