Oracle慢查询日志

517 阅读1分钟

Oracle可以通过查询v$sqlarea得出数据库所查询的语句的执行时间 从而能让我们快速定位问题

其中ELAPSED_TIME是总执行时间 单位是微秒

EXECUTIONS是总执行次数

所以通过round()函数 四舍五入小数点两位 得出总执行时间 和平均执行时间 和 所执行的SQL语句


select *
 from (
 select sa.SQL_TEXT,
        sa.SQL_FULLTEXT,
        sa.EXECUTIONS "执行次数",
        round(sa.ELAPSED_TIME/1000000 , 2) "总执行时间",
        round(sa.ELAPSED_TIME / 1000000/sa.EXECUTIONS, 2) "平均执行时间",
        sa.COMMAND_TYPE,
        sa.PARSING_USER_ID "用户ID",
        u.username "用户名",
        sa.HASH_VALUE
     from v$sqlarea sa
     left join all_users u
      on sa.PARSING_USER_ID = u.user_id
     where sa.EXECUTIONS > 0
     order by (sa.ELAPSED_TIME / sa.EXECUTIONS) desc
     )
     WHERE "平均执行时间">60
     
     and SQL_TEXT like '%%'
     and sa."SQL_TEXT" like '%%'
      and u.username = ''
      where rownum <= 50