三、SQL语句
将这两个视图通过快照 id join一下得到SQL,记录了系统七天内Oracle数据库的SQL执行次数
1、七天内Oracle数据库的SQL执行次数
SELECT
SUM(ss.executions_delta) AS total_executions
FROM
DBA_HIST_SQLSTAT ss
JOIN
DBA_HIST_SNAPSHOT sn ON ss.snap_id = sn.snap_id
WHERE
sn.begin_interval_time BETWEEN SYSDATE - 7 AND SYSDATE;
SELECT TRUNC(sn.begin_interval_time) AS query_date,
SUM(ss.executions_delta) AS total_executions
FROM DBA_HIST_SQLSTAT ss
JOIN DBA_HIST_SNAPSHOT sn
ON ss.snap_id = sn.snap_id
WHERE sn.begin_interval_time BETWEEN SYSDATE - 7 AND SYSDATE
GROUP BY TRUNC(sn.begin_interval_time)
ORDER BY total_executions desc;
3、根据sql_id查询SQL语句
SELECT SQL_TEXT FROM v$sqltext WHERE SQL_ID = 'cmhz88h821m04';
有时SQL文本过长vsqltext中SQL_TEXT字段最多1000个字符,可能放不下,我们可以看vsql中的SQL_FULLTEXT字段保留了SQL语句的完整文本,以CLOB形式存储。
4、根据sql_id查询完整的SQL
SELECT SQL_FULLTEXT FROM v$sql WHERE SQL_ID = 'cmhz88h821m04';
拿到SQL之后可以看看sql的执行计划分析问题