oracle性能相关的视图

2023年 12月 29日 76.3k 0

v$system_event

v$system_wait_class

v$session_event

v$session_wait_class

v$session_wait

v$session

v$sysmetric

v$waitclassmetric

v$active_session_history

timed_statistics参数:用于决定是否收集相关的时间参数,true为收集。

如果该参数设为false,则等待事件相关视图也就无法收集到数据。

SQL> SHOW PARAMETER timed_statistics; ------统计时间

如果statistics_level设置为TYPICAL或ALL,那么timed_statistics该参数为true;

如果statistics_level设置为BASIC,那么timed_statistics该参数为false。

SQL> SHOW PARAMETER statistics_level -----统计数量

一.v$system_event视图介绍

1.字段说明

DESC v$system_event

Name Type

----------------- ------------

EVENT VARCHAR2(64) --等待的事件

TOTAL_WAITS NUMBER --总等待次数

TOTAL_TIMEOUTS NUMBER --等待超时次数

TIME_WAITED NUMBER --总等待时间(时间毫秒,1/100秒)

AVERAGE_WAIT NUMBER --平均等待时间(总等待时间/总等待次数)

TIME_WAITED_MICRO NUMBER --总等待时间(时间微秒,1/1000000秒)

EVENT_ID NUMBER --标识等待事件id

WAIT_CLASS_ID NUMBER --标识等待事件类型id

WAIT_CLASS# NUMBER --该等待类型的数量

WAIT_CLASS VARCHAR2(64) --等待类型名称

11g

19c cdb

2.等待事件类型(WAIT_CLASS)

SELECT DISTINCT wait_class FROM v$system_event;--或直接查看v$system_wait_class视图

WAIT_CLASS

-------------

Concurrency --等待用于锁定的数据库资源,如闩

System I/O --后台进程I/O的等待,包括db file parallel write事件的数据库写程序后台进程(DBWR)等待。还包括与归档有关的等待和重做日志读和写等待User I/O --包括db file sequential read和db file scattered read事件

Configuration --如checkpoint completed等待事件

Other --杂项等待

Application --由应用代码导致的等待

Idle --空闲等待事件表示在会话不活动时发生的等待,如 “SQL*Net message from client”等待事件Commit --由单个等待事件log file sync组成,它是一个由数据库中的提交导致的等待

Network --网络传递消息过程中的发生等待log file sync(日志文件同步): log file sync 等待时间和事务中指(提交或回滚)相关;

11g

19c cdb

3.当进程在log file sync事件上花费大量时间时,这通常表明过多的提交或短事务。

SELECT event, time_waited,average_wait,total_waits,f.WAIT_CLASS_ID,f.WAIT_CLASS#,f.WAIT_CLASS

FROM v$system_event f

WHERE wait_class NOT IN ('Idle')

ORDER BY time_waited DESC

二.v$system_wait_class视图

1.视图字段说明

SQL> DESC v$system_wait_class --10g新增Name Type

------------- ------------

WAIT_CLASS_ID NUMBER --等待类型id

WAIT_CLASS# NUMBER --该等待类型的数量

WAIT_CLASS VARCHAR2(64) --等待类型名称

TOTAL_WAITS NUMBER --该等待类型事件发生时所等待的时间

TIME_WAITED NUMBER --所有会话用于等待的时间

2.v$system_wait_class视图和v$system_event视图比较

v$system_wait_class视图是10g新增的,该视图是对类型等待时间的统计。

v$system_event视图可以与v$system_wait_class视图结合查看。

v$system_wait_class视图和v$system_event视图的来源不同,可用v$fixed_view_definition视图查看视图的具体定义,如下所示:

SELECT * FROM v$fixed_view_definition WHERE view_name='V$SYSTEM_EVENT';

select event,total_waits,total_timeouts,time_waited,average_wait, time_waited_micro,total_waits_fg, total_timeouts_fg,time_waited_fg,average_wait_fg,time_waited_micro_fg,event_id,wait_class_id,wait_class#,wait_class,con_id

from gv$system_event

where inst_id = USERENV('Instance') ;

SELECT * FROM v$fixed_view_definition WHERE view_name='GV$SYSTEM_EVENT';

select d.inst_id,d.kslednam,(s.ksleswts_un + s.ksleswts_fg + s.ksleswts_bg),(s.kslestmo_un + s.kslestmo_fg + s.kslestmo_bg),round((s.kslestim_un + s.kslestim_fg + s.kslestim_bg)/10000),round((s.kslestim_un + s.kslestim_fg + s.kslestim_bg)/(10000 * (s.ksleswts_un + s.ksleswts_fg + s.ksleswts_bg)), 2),(s.kslestim_un + s.kslestim_fg + s.kslestim_bg),s.ksleswts_fg,s.kslestmo_fg,round(s.kslestim_fg/10000),round(s.kslestim_fg/decode(s.ksleswts_fg,0,1,10000 * s.ksleswts_fg), 2),s.kslestim_fg,d.ksledhash, d.ksledclassid,d.ksledclass#,d.ksledclass,s.con_id

from x$kslei s, x$ksled d

where (s.ksleswts_un > 0 or s.ksleswts_fg > 0 or s.ksleswts_bg > 0)

and s.kslesevt = d.indx;

SELECT * FROM v$fixed_view_definition WHERE view_name='V$SYSTEM_WAIT_CLASS';

select wait_class_id,wait_class#,wait_class,total_waits,time_waited,total_waits_fg,time_waited_fg, con_id

from gv$system_wait_class

where inst_id = USERENV('Instance') ;

SELECT * FROM v$fixed_view_definition WHERE view_name='GV$SYSTEM_WAIT_CLASS';

select s.inst_id,s.kslscsclsid,s.kslscscls,s.kslscsclsname,(s.kslscswts_un + s.kslscswts_fg + s.kslscswts_bg),round((s.kslscstim_un + s.kslscstim_fg + s.kslscstim_bg)/10000),s.kslscswts_fg,round(s.kslscstim_fg/10000),s.con_id

from x$kslscs s

where s.kslscswts_un > 0 or s.kslscswts_fg > 0 or s.kslscswts_un > 0

三.v$session_event视图

1.字段说明

SQL> DESC v$session_event

Name Type ----------------- ------------

SID NUMBER --会话id

EVENT VARCHAR2(64) --等待事件

TOTAL_WAITS NUMBER --该会话等待次数

TOTAL_TIMEOUTS NUMBER --该会话等待超时次数

TIME_WAITED NUMBER --该会话总等待时间(时间毫秒,1/100秒)

AVERAGE_WAIT NUMBER --该会话平均等待时间(总等待时间/总等待次数)

MAX_WAIT NUMBER --该会话等待时间最大值

TIME_WAITED_MICRO NUMBER --该会话总等待时间(时间微秒,1/1000000秒)

EVENT_ID NUMBER --事件ID

WAIT_CLASS_ID NUMBER --等待类型ID

WAIT_CLASS# NUMBER --该等待类型的数量

WAIT_CLASS VARCHAR2(64) --等待类型名称

2.v$session_event视图与v$system_event视图比较

v$session_event视图:会话级的统计
v$system_event视图:系统级的统计

四.v$session_wait_class视图
与v$system_wait_class相比多了sid和serial#字段,v$session_wait_class视图表示某一会话的等待时间。

五.v$session_wait视图

1.字段说明

SQL> DESC v$session_wait;

Name Type

--------------- ------------

SID NUMBER --会话id

SEQ# NUMBER --标识当前或最新的等待序列号

EVENT VARCHAR2(64) --当前等待事件或最后一次等待事件

P1TEXT VARCHAR2(64) --第一个等待参数的描述

P1 NUMBER --第一个等待参数(十进制)

P1RAW RAW(4) --第一个等待参数(十六进制)

P2TEXT VARCHAR2(64) --第二个等待参数的描述

P2 NUMBER --第二个等待参数(十进制)

P2RAW RAW(4) --第二个等待参数(十六进制)

P3TEXT VARCHAR2(64) --第三个等待参数的描述

P3 NUMBER --第三个等待参数(十进制)

P3RAW RAW(4) --第三个等待参数(十六进制)

WAIT_CLASS_ID NUMBER --等待事件类型ID

WAIT_CLASS# NUMBER --该等待事件数量

WAIT_CLASS VARCHAR2(64) --等待事件名称

WAIT_TIME NUMBER 该字段已废弃,可通过SECONDS_IN_WAIT和STATE字段替代(具体含义,0代表正在等待;>0表示最后一次等待的时间,单位为百分之一秒;-1表示等待时间小于百分之一秒;-2表示参数TIMED_STATISTICS被设置为false)

SECONDS_IN_WAIT NUMBER --如果该会话处于等待状态,则表示当前等待的总时间;如果非等待状态,则表示自最后一次等待以来的总时间

STATE VARCHAR2(19) --其值可为 WAITING,WAITED UNKNOWN TIME,WAITED SHORT TIME ,WAITED KNOWN TIME

state值的具体含义:WAITING表示会话正在等待;
WAITED UNKNOWN TIME表示最后一次等待时间不知,即TIMED_STATISTICS被设置为false;
WAITED SHORT TIME表示最后一次等待时间少于百分之一秒;
WAITED KNOWN TIME表示最新一次等待时间,可通过wait_time列查看。即该等待时间正好由等待状态得到资源转为执行状态。

2.注意事项

1)oracle11g,在该视图中新增了WAIT_TIME_MICRO,TIME_REMAINING_MICRO,TIME_SINCE_LAST_WAIT_MICRO字段。而SECONDS_IN_WAIT已废弃,用
WAIT_TIME_MICRO and TIME_SINCE_LAST_WAIT_MICRO替代。
TIME_REMAINING_MICRO字段含义:

为0表示当前等待超时;

>0表示当前等待还需等待的时间;

-1表示当前等待将无限制地等待;null表示该会话当前无等待

2)p1,p2,p3参数代表的含义可以通过v$event_name视图的PARAMETER1,PARAMETER2,PARAMETER3查找。不过v$session_wait视图本身中的P1TEXT,P2TEXT,P3TEXT已经对p1,p2,p3进行了说明,及P1TEXT,P2TEXT,P3TEXT字段值与PARAMETER1,PARAMETER2,PARAMETER3一样。

六、v$session视图

该视图包含了v$session_wait视图的所有字段。该视图记录了每个会话的具体信息。
获取不同用户会话所面临的等待类型及他们所执行的sql语句文本,如下脚本:

SELECT s.username, t.sql_text, s.event

FROM v$session s, v$sqltext t

WHERE s.sql_hash_value = t.hash_value

AND s.sql_address = t.address

AND s.type 'BACKGROUND'

ORDER BY s.sid, t.hash_value, t.piece;

七、v$sysmetric视图
这是一个显示最近时间间隔的系统度量值,时间间隔为60秒。通过这个视图也可以查看在一个短期间隔内的Buffer Cache Hit Ratio,Memory Sorts Ratio,Redo Allocation Hit Ratio。

八、v$waitclassmetric:显示最近60秒时间间隔中等待类的度量值。

此视图最多保存一个小时的信息。

SELECT * FROM v$waitstat

v$session_wait_history

该视图保存每个活动会话的最后10个等待事件的有关信息。如v$session和v$session_wait视图只显示最近一次等待的信息。

SELECT seq#, event, wait_time, p1, p2, p3

FROM v$session_wait_history

--WHERE sid = 140

ORDER BY seq#;

九、v$active_session_history:当前的活动会话历史

1.--查询导致最多等待的对象及这些对象在最后15分钟内等待的事件类型

SELECT o.object_name,o.object_type,a.event,SUM(a.wait_time + a.time_waited) total_wait_time

FROM v$active_session_history a, dba_objects o

WHERE a.sample_time BETWEEN SYSDATE - 30 / 2880 AND SYSDATE

AND a.current_obj# = o.object_id

GROUP BY o.object_name, o.object_type, a.event

ORDER BY total_wait_time;--列出数据库中最后15分钟内最重要的等待事件

2.--等待最多的用户

SELECT a.event,SUM(a.wait_time + a.time_waited) total_wait_time

FROM v$active_session_history a

WHERE a.sample_time BETWEEN SYSDATE - 30 / 2880 AND SYSDATE

GROUP BY a.event

ORDER BY total_wait_time DESC;--等待最多的用户

3.--确定等待最多的sql

SELECT s.sid,s.username,SUM(a.wait_time + a.time_waited) total_wait_time

FROM v$active_session_history a,v$session s

WHERE a.sample_time BETWEEN SYSDATE - 30 / 2880

AND SYSDATE

AND a.session_id = s.sid

GROUP BY s.sid,s.username

ORDER BY total_wait_time DESC;--确定等待最多的sql

4.--总计等待的时间

SELECT a.user_id,s.sql_text,d.username,SUM(a.wait_time + a.time_waited) total_wait_time

FROM v$active_session_history a, v$sqlarea s, dba_users d

WHERE a.sample_time BETWEEN SYSDATE - 30 / 2880

AND SYSDATE

AND a.sql_id = s.sql_id

AND a.user_id = d.user_id

GROUP BY a.user_id, s.sql_text, d.username;

dba_hist_active_sess_history:每60分钟,MMON后台进程都要刷新过滤了得ASH数据到磁盘,使其成为按小时的AWR快照的一部分。若ASH缓冲区已满,则MMML后台进程进行数据的刷新。ASH数据被刷新到磁盘后,就不能在v$active_session_history视图中看到它了。此时要查看历史数据,就必须通过dba_hist_active_sess_history视图。

十.段级动态性能视图:

使用它们可以找出哪些表和索引正在使用大量资源或具有大量的等待。
select * from v$segstat_name

select * from v$segstat

select * from v$segment_statistics

————————————————
版权声明:本文为CSDN博主「Running Sun丶」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_49889731/article/details/125713712

相关文章

Oracle如何使用授予和撤销权限的语法和示例
Awesome Project: 探索 MatrixOrigin 云原生分布式数据库
下载丨66页PDF,云和恩墨技术通讯(2024年7月刊)
社区版oceanbase安装
Oracle 导出CSV工具-sqluldr2
ETL数据集成丨快速将MySQL数据迁移至Doris数据库

发布评论