最近做了一个管理Oracle数据库的项目,项目中有一个功能就是查询数据库中 执行次数最多的sql
我查的是v$sqlarea表 详细字段见:https://docs.oracle.com/database/121/REFRN/GUID-09D5169F-EE9E-4297-8E01-8D191D87BDF7.htm#REFRN30259
我查了 sql文本、解析和运行的时间、总共执行次数、所用CPU获取+执行时间、最新执行的时间
SELECT
t.SQL_ID AS SQL的ID,
t.SQL_TEXT AS SQL语句,
t.HASH_VALUE AS 完整SQL哈希值,
t.ELAPSED_TIME AS 解析执行总共时间,
t.EXECUTIONS AS 执行总共次数,
t.LAST_ACTIVE_TIME AS 执行最后时间,
t.CPU_TIME AS CPU执行时间微秒
FROM
v$sqlarea t
WHERE
t.PARSING_SCHEMA_NAME IN ( 'C##DBAAS' )
ORDER BY
t.EXECUTIONS DESC;
由于SQL_TEXT 是 VARCHAR2(1000) 所以我可以根据 SQL_ID 去查询 DBA_HIST_SQLTEXT 表中的 SQL_TEXT,我们先看看SQL_TEXT 类型。
也可以查询 v$sqltext 中的 SQL_TEXT字段,他的SQL_TEXT是分段存储的
SELECT
SQL_TEXT
FROM
v$sqltext
WHERE
SQL_ID ='46m4zyfzt11z0'
ORDER BY
PIECE ASC;