暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle 如何在数据库中查找长时间运行的查询

askTom 2017-02-14
704

问题描述

嗨,

我正在尝试获取数据库的长期运行查询。我也需要这些查询的开始和结束时间。

这些长时间运行的查询在发行版中引起问题。请帮助我找出sql文本以及查询的开始和结束时间。

提前谢谢。

专家解答

有很多方法可以做到这一点。对于仍在缓存中的语句,您可以从v $ sql * 视图中找到聚合信息。

例如,这是一个需要〜27s的查询:

SQL> with /* slow */ rws as (
  2    select rownum x from dual connect by level <= 1000
  3  )
  4    select count(*) from rws, rws, rws;

  COUNT(*)
----------
1000000000

SQL>
SQL> select sql_id, first_load_time, last_load_time, elapsed_time, cpu_time
  2  from   v$sql
  3  where  sql_text like 'with /* slow */ rws as (%';

SQL_ID        FIRST_LOAD_TIME     LAST_LOAD_TIME      ELAPSED_TIME   CPU_TIME
------------- ------------------- ------------------- ------------ ----------
f3mdy8usdm8j4 2017-02-14/07:01:31 2017-02-14/07:01:31     27976167   27914000


时间以微秒为表示,并且是累积的。因此,如果您多次执行相同的语句,则可以将其除以执行以获得平均值:

SQL> with /* slow */ rws as (
  2    select rownum x from dual connect by level <= 1000
  3  )
  4    select count(*) from rws, rws, rws;

  COUNT(*)
----------
1000000000

SQL>
SQL> select sql_id, first_load_time, last_load_time, elapsed_time, elapsed_time/executions avg_elapsed, cpu_time/executions avg_cpu
  2  from   v$sql
  3  where  sql_text like 'with /* slow */ rws as (%';

SQL_ID        FIRST_LOAD_TIME     LAST_LOAD_TIME      ELAPSED_TIME AVG_ELAPSED    AVG_CPU
------------- ------------------- ------------------- ------------ ----------- ----------
f3mdy8usdm8j4 2017-02-14/07:01:31 2017-02-14/07:01:31     55617239  27808619.5   27775000



如果您获得了诊断和调整包的许可,那么您可以做得更好。SQL monitor记录每个超过5秒的查询实例:

SQL> select to_char(sql_exec_start, 'dd-Mon hh24:mi'), elapsed_time, cpu_time
  2  from   v$sql_monitor
  3  where  sql_id = 'f3mdy8usdm8j4';

TO_CHAR(SQL_ ELAPSED_TIME   CPU_TIME
------------ ------------ ----------
14-Feb 07:01     27963910   27904000
14-Feb 07:02     27635004   27633000


Oracle将这些详细信息保留至少一分钟,甚至更长。这取决于它监控了多少条语句!

你也可以从AWR获得历史细节。您可以使用它来查找给定时间段内最慢的语句:

select sql_id, elapsed_time_delta/executions_delta avg_elapsed
from   sys.dba_hist_sqlstat
where  snap_id = :snap;

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论