V$SYSSTAT
V S Y S S T A T 视图中列出了数据库的大量系统级统计信息,包括缓冲区命中率、 I / O 请求次数、排序操作、锁等待事件和 S Q L 执行次数等。这些统计数据可用于检测和调整性能问题。以下是查询 V SYSSTAT视图中列出了数据库的大量系统级统计信息,包括缓冲区命中率、I/O请求次数、排序操作、锁等待事件和SQL执行次数等。这些统计数据可用于检测和调整性能问题。以下是查询V SYSSTAT视图中列出了数据库的大量系统级统计信息,包括缓冲区命中率、I/O请求次数、排序操作、锁等待事件和SQL执行次数等。这些统计数据可用于检测和调整性能问题。以下是查询VSYSSTAT视图的示例SQL
SELECT name, value
FROM v$sysstat
WHERE name IN ('db block gets', 'consistent gets', 'physical reads', 'physical writes');
V$SESSTAT
V$SESSTAT视图是从用户级别收集的系统统计信息,主要记录了当前活跃会话的统计信息。
例如,可以使用V S E S S I O N 视图,查看当前用户的连接数和会话 I D ,然后使用 V SESSION视图,查看当前用户的连接数和会话ID,然后使用V SESSION视图,查看当前用户的连接数和会话ID,然后使用VSESSTAT视图查看查询、排序、数据读取等统计信息。
SELECT s.sid, s.serial#, s.username, s.machine, s.osuser, ss.name, ss.value
FROM v$session s,v$sesstat ss
WHERE s.sid = ss.sid and s.serial# = ss.serial#
AND ss.name = 'sorts (disk)';
V$SQL
V$SQL视图包含了SQL查询的执行状态和SQL执行的性能指标,例如执行计划、执行时间和I/O操作次数等。这些信息可以被用于检测性能问题,以及识别低效的SQL查询。
SELECT sql_text, executions, elapsed_time, buffer_gets
FROM v$sql
WHERE buffer_gets > 100000;
V$SESSION事件视图
V$SESSION_EVENT视图中列出了所有正在等待事件的会话,以及等待事件的名称。这些信息可以用于检测会话等待问题,帮助理解会话被阻塞的原因。
SELECT s.sid, s.serial#, l.event, l.wt_time, l.seconds_in_wt
FROM v$session s, v$session_wt l
WHERE s.sid = l.sid AND l.event != 'SQL*Net message from client';
V$SESSION_WT_CLASS
V$SESSION_WT_CLASS视图提供了等待事件的分类信息,这些分类较为抽象,例如“CPU”,“I/O”,“Network”,“Concurrency”等。这可以帮助识别不同类型的等待事件,并为进一步分析提供指导。
SELECT wt_class, COUNT(*)
FROM v$session_wt_class
GROUP BY wt_class
ORDER BY 2 DESC;
V$SYSTEM_EVENT
V$SYSTEM_EVENT视图中包含了Oracle实例中所有系统事件的统计信息,这些事件可以是I/O事件、等待事件或其他类型的事件。
SELECT event, total_wts, total_timeouts, time_wted
FROM v$system_event
WHERE event LIKE '%db file%';
V$ACTIVE_SESSION_HISTORY (ASH)
V$ACTIVE_SESSION_HISTORY (ASH)视图主要用于捕获数据库活动的快照,以便进行开销较大的性能故障排除,例如系统级性能问题,锁等待事件和会话等待事件。
ASH视图提供了详细的实时性能数据,以便诊断和解决各种性能问题。ASH数据可以用于查找诸如死锁、长时间等待、数据库连接池过载等问题。在分析问题时,ASH数据还可以用于确定性能问题是由高CPU使用率还是由等待事件(例如IO、网络、锁等)造成的。
-- 采用时间一小时前的数据
SELECT s.inst_id, s.sample_time, s.session_id, s.user_id, s.event
FROM gv$active_session_history s
WHERE s.sample_time > SYSDATE-1/24;
-- 查找活动用户
SELECT DISTINCT s.username, s.sid, s.serial#, s.program
FROM v$active_session_history h, v$session s
WHERE h.session_id = s.sid
AND h.session_serial# = s.serial#
AND h.sample_time BETWEEN SYSDATE-1/24 AND SYSDATE
ORDER BY 1,2;
-- 查找等待事件
SELECT event||'-'||wt_class AS event, COUNT(*) AS wts
FROM v$active_session_history
WHERE sample_time BETWEEN SYSDATE-1/24 AND SYSDATE
GROUP BY event,wt_class;
-- 查找锁等待
SELECT owner||'.'||OBJECT_NAME AS object_name, count(*) as wt_count
FROM v$session a,v$active_session_history b,dba_objects c
WHERE a.sid = b.session_id
AND a.last_call_et >= 60 and b.wt_class = 'Application'
AND b.sample_id = c.data_object_id
GROUP BY a.username,c.owner,c.object_name
HAVING count(*) >=5
ORDER BY count(*) DESC;
以上查询只是ASH视图使用的冰山一角,ASH视图还包含许多其他的有用信息,例如等待类别、等待时间、事件计数等。而且,我们还可以使用ASH数据提供的详细信息来创建各种自定义报告和图表。
以下是一个基于Ash数据的简单演示,它可用于监视数据库中当前运行的用户和事务数量:
-- 插入当前时间和会话信息:
INSERT INTO ash_demo
(sample_time, username, sid, serial#, program)
SELECT SYSDATE, s.username, s.sid, s.serial#, s.program
FROM v$session s
WHERE s.STATUS = 'ACTIVE';
-- 计算每秒的会话活动数:
SELECT COUNT(*) / (COUNT(DISTINCT TRUNC(sample_time, 'MI'))*60)
FROM ash_demo
WHERE sample_time > SYSDATE – 1/24;
-- 计算每秒的用户数量:
SELECT COUNT(DISTINCT username) / (COUNT(DISTINCT TRUNC(sample_time, 'MI'))*60)
FROM ash_demo
WHERE sample_time > SYSDATE – 1/24;
V$SQL_PLAN
V$SQL_PLAN视图提供了SQL执行计划的详细信息,这些信息可以帮助开发人员和DBA确定性能瓶颈,并诊断查询执行计划的问题。
SELECT id, operation, options, object_name, cost, cardinality
FROM v$sql_plan
WHERE operation = 'TABLE ACCESS';