此视图展示了SQL语句的执行统计信息,如执行次数、解析次数、缓冲区得到次数、错误次数等,帮助DBA了解SQL的执行情况和效率
select sq.SQL_ID,
sq.EXECUTIONS,
sq.ELAPSED_TIME,
sq.CPU_TIME / 1000 / 1000 s
from v$sql sq
order by sq.CPU_TIME desc;
5.v$sqlstats
V$SQLSTATS包含了每一个被执行的SQL语句的统计信息,包括执行次数、CPU时间、执行计划的改变次数、缓冲区得到次数、磁盘读取次数、直接读取次数、行锁定次数、内存使用量等。
监控性能:通过查询V$SQLSTATS,可以监控SQL的执行效率,找出执行时间长、占用资源多的SQL,进一步进行性能调优。
识别热点SQL:结合执行次数和执行时间,可以快速识别出系统中的“热点”SQL,这些SQL可能是性能瓶颈的来源。
优化依据:它是进行SQL优化的重要依据。通过对执行计划、执行时长等数据的分析,可以决定是否需要重新编写SQL语句或调整索引策略。
SELECT
sql_id,
executions,
elapsed_time / 1000000"Elapsed Time (s)",
cpu_time / 1000000"CPU Time (s)",
buffer_gets,
disk_reads,
rows_processed
FROM
v$sqlstats
WHERE
executions >0
ORDER BY
elapsed_time DESC;
这个查询会返回按照总耗时降序排列的所有执行过的SQL语句的统计信息,包括执行次数、总耗时(秒)、CPU时间(秒)、缓冲区获取次数、磁盘读取次数以及处理的行数,帮助快速识别出消耗资源最多的SQL语句。
1. 查看快照生成时间
SELECT snap_id,
TO_CHAR(begin_interval_time, 'YYYY-MM-DD HH24:MI:SS') AS start_time,
TO_CHAR(end_interval_time, 'YYYY-MM-DD HH24:MI:SS') AS end_time
FROM dba_hist_snapshot
ORDER BY begin_interval_time DESC;
SELECT snap_id,
TO_CHAR(begin_interval_time, 'YYYY-MM-DD HH24:MI:SS') AS start_time,
TO_CHAR(end_interval_time, 'YYYY-MM-DD HH24:MI:SS') AS end_time
FROM dba_hist_snapshot
WHERE begin_interval_time >=
TO_DATE('2023-01-01 00:00:00', 'YYYY-MM-DD HH24:MI:SS')
AND end_interval_time <=
TO_DATE('2023-01-31 23:59:59', 'YYYY-MM-DD HH24:MI:SS')
ORDER BY begin_interval_time DESC;2. 使用DBA_HIST_SQLSTAT查找最消耗资源的SQL
4. 使用DBA_HIST_SNAPSHOT分析数据库整体性能变化