PGA统计信息相关

来源:互联网 发布:windows.old还原win10 编辑:程序博客网 时间:2024/05/22 04:24

1)V$PGASTAT

提供了PGA内存使用情况的相关信息,以及目前自动PGA内存管理的统计信息。

select name,
       to_char(decode(unit, 'bytes', value / 1024 / 1024, value), '999,999,999.9') value,
       decode(unit, 'bytes', 'mbytes', unit) unit
from   V$PGASTAT;

NAME                                                             VALUE          UNIT
---------------------------------------------------------------- -------------- ------------
aggregate PGA target parameter             20,480.0 mbytes  --目前PGA_AGGREGATE_TARGET参数的值。如果为0,就表示PGA内存自动管理机制是关闭的状态。
aggregate PGA auto target                         18,370.5 mbytes  --在PGA内存自动管理模式下,代表在PGA内存中的SQL工作区的数量
global memory bound                                   1,024.0 mbytes  
total PGA inuse                                               572.0 mbytes
total PGA allocated                                       2,570.1 mbytes    --目前实例分配的PGA内存空间总数
maximum PGA allocated                            12,192.4 mbytes  --曾分配的最大PGA空间是多少
total freeable PGA memory                       1,986.4 mbytes     --PGA的最大可使用空间是多少。
process count                                               76.0
max processes count                                  96.0
PGA memory freed back to OS                  39,700.3 mbytes
total PGA used for auto workareas           503.4 mbytes
maximum PGA used for auto workareas                    9,895.6 mbytes
total PGA used for manual workareas                         .0 mbytes   --在PGA内存手动管理模式下,目前多少PGA内存被分配给SQL工作区使用。
maximum PGA used for manual workareas              .5 mbytes
over allocation count                                                        .0
bytes processed                                              61,331.8 mbytes   --此数值是当前实例启动后累加的值,当进程执行SQL语句时所使用空间的数值。
extra bytes read/written                                                 15,459.1 mbytes
cache hit percentage                                                       79.9 percent  --此数值是自当前实例启动后,PGA中的SQL工作区是否都分配有最佳的内存空间比例,当SQL工作区无法在最佳状态下运行时,会降低cache hit percentage的数值,此数值可以视为目前PGA的命中率(Hit Ratio)。
recompute count (total)                                                  26,528.0



2)V$SQL_WORKAREA

V$SQL_WORKAREA显示了被游标使用的SQL工作区的相关信息:

V$SQL_WORKAREA

   

数据类型

   

ADDRESS

RAW(4 | 8)

游标句柄的地址

HASH_VALUE

NUMBER

游标句柄的Hash值,

V$SQLAREA查询此字段与

ADDRESS字段,可以查出

此游标相关的SQL语句

CHILD_NUMBER

NUMBER

使用此SQL工作区的子游标数量

WORKAREA_ADDRESS

RAW(4 | 8)

SQL工作区句柄的地址

OPERATION_TYPE

VARCHAR2(20)

SQL工作区的操作类型,

如Sort、Hash Join、

Group By、Order By等

OPERATION_ID

NUMBER

为执行计划运行值的地址,

可以和V$SQL_ PLAN结合使用

POLICY

VARCHAR2(10)

SQL工作区的模式,选项

为MANUAL与AUTO

ESTIMATED_OPTIMAL_SIZE

NUMBER

估算需要多大的空间容纳

此SQL工作区,来执行内存中运行

ESTIMATED_ONEPASS_SIZE

NUMBER

估算需要此SQL工作区来执

行一次内存中运行时所需的大小

LAST_MEMORY_USED

NUMBER

最后一次游标执行时,所使

用的工作区大小

LAST_EXECUTION

VARCHAR2(10)

最后一次执行游标时,工

作区请求内存的方式,

Optimal、Onepass、Mutipass

LAST_DEGREE

NUMBER

最后一次执行的DOP

(Degree of Parallelism,并行度)

TOTAL_EXECUTIONS

NUMBER

此SQL工作区启动的次数

OPTIMAL_EXECUTIONS

NUMBER

此SQL工作区运行于

Optimal模式的次数

ONEPASS_EXECUTIONS

NUMBER

此SQL工作区运行于

Onepass模式的次数

MULTIPASSES_EXECUTIONS

NUMBER

此SQL工作区运行于

Mutipass模式的次数

   

数据类型

   

ACTIVE_TIME

NUMBER

此SQL工作区启动后的时间

MAX_TEMPSEG_SIZE

NUMBER

此SQL工作区在内存中所建立

的临时空间的最大大小

LAST_TEMPSEG_SIZE

NUMBER

最后一次SQL工作区所在内存

中所建立的临时空间的大小



查询前10个最占内存的SQL工作区:
SELECT *
FROM   (SELECT workarea_address, operation_type, policy, estimated_optimal_size
        FROM   V$SQL_WORKAREA
        ORDER  BY estimated_optimal_size)
WHERE  ROWNUM <= 10;
查询游标使用SQL工作区的类型情况次数与相关SQL语句
SELECT sql_text, sum(ONEPASS_EXECUTIONS) onepass_cnt, sum(MULTIPASSES_EXECUTIONS) mpass_cnt
FROM   V$SQL s, V$SQL_WORKAREA wa
WHERE  s.address = wa.address
GROUP  BY sql_text
HAVING sum(ONEPASS_EXECUTIONS + MULTIPASSES_EXECUTIONS) > 0;

查询游标的执行计划
SELECT operation,
       options,
       object_name name,
       trunc(bytes / 1024 / 1024) "input(MB)",
       trunc(last_memory_used / 1024) last_mem,
       trunc(estimated_optimal_size / 1024) optimal_mem,
       trunc(estimated_onepass_size / 1024) onepass_mem,
       decode(optimal_executions,
              null,
              null,
              optimal_executions || '/' || onepass_executions || '/' || multipasses_executions) "O/1/M"
FROM   V$SQL_PLAN p, V$SQL_WORKAREA w
WHERE  p.address = w.address(+)
AND    p.hash_value = w.hash_value(+)
AND    p.id = w.operation_id(+)
AND    p.address = '000000008EBE3A38'
AND    p.hash_value = 889124229;

V$SQL_WORKAREA_ACTIVE

V$PROCESS

V$PROCESS显示了所有Oracle 进程的相关信息:

V$PROCESS

   

数据类型

   

ADDR

RAW(4)

此进程的地址

PID

NUMBER

Oracle给予此进程的ID号码

(续表)

   

数据类型

   

SPID

VARCHAR2(12)

操作系统给予此进程的ID号码

USERNAME

VARCHAR2(15)

操作系统上此进程的使用账号名称

SERIAL#

NUMBER

进程的序列号码

TERMINAL

VARCHAR2(30)

作业是从哪台服务器或PC上发出的

PROGRAM

VARCHAR2(48)

运行程序的名称

TRACEID

VARCHAR2(255)

跟踪文件的识别号码

BACKGROUND

VARCHAR2(1)

当此字段的值是1,代表后台

进程。如果是Null,代表是一般进程

LATCHWAIT

VARCHAR2(8)

代表进程所等待闩锁的地址,

如果值是Null代表没有等待任何闩锁

LATCHSPIN

VARCHAR2(8)

代表进程所Pin住的闩锁的地

址,如果值是Null代表没

有Pin住任何闩锁

PGA_USED_MEM

NUMBER

代表此进程目前使用的PGA

内存空间大小

PGA_ALLOC_MEM

NUMBER

代表此进程目前被分配到的PGA

内存空间大小

PGA_FREEABLE_MEM

NUMBER

代表此进程目前被分配到的PGA

内存空间有多少可以被释放

PGA_MAX_MEM

NUMBER

代表此进程曾经被分配到的

最大PGA内存空间是多少

V$PROCESS中针对PGA的使用情况,主要可观察PGA_USED_MEM、PGA_ALLOC_ MEM、PGA_FREEABLE_MEM与PGA_MAX_MEM这4个字段。


耗费PGA内存空间1 MB以上的用户会话:

select a.osuser,
       a.username,
       a.machine,
       substr(a.program, 1, 20) "program",
       b.PGA_USED_MEM,
       b.PGA_ALLOC_MEM
from   V$SESSION a, V$PROCESS b
where  a.paddr = b.addr
and    b.PGA_USED_MEM / 1024 / 1024 > 1
order  by b.PGA_USED_MEM;