Oracle:查找多个查询运行的总查询运行时间

Posted

技术标签:

【中文标题】Oracle:查找多个查询运行的总查询运行时间【英文标题】:Oracle: Find total query run time for multiple query runs 【发布时间】:2018-12-21 22:45:44 【问题描述】:

我想找出运行查询所花费的总时间(执行时间 + 获取时间)。我正在使用下面的查询。这是正确的方法吗?

我使用的 sql_text 需要几毫秒才能返回结果。我多次运行 sql_text 。 V$SQL 为我提供了单个查询运行、执行次数和首次加载时间。如何找到每次查询运行所花费的总时间?

select ELAPSED_TIME from V$SQL where sql_text = ""

Edit1:我的查询略有不同,例如我插入了不同的整数。在 V$SQL 中,这些查询具有不同的 SQL_ID,但我无法在 AWR 中找到它们。此外,ELAPSED_TIME 是所有查询执行的总和,还是上次执行查询的平均时间或经过的时间?

【问题讨论】:

【参考方案1】:

ELAPSED_TIME 记录的 here 列包含:

此游标用于解析、执行和获取的已用时间(以微秒为单位)。如果游标使用并行执行,则 ELAPSED_TIME 是查询协调器的累积时间,加上所有并行查询从属进程。

重要的是统计信息与光标相关。

因此,如果光标被刷新并重新加载,total 值将被重置并从零开始。

要获得更完整的信息,您可以使用AWR,它基本上会定期对统计数据进行快照并将其存储起来以供报告。

最后一句话——引用 SQL 语句的典型方法是使用SQL_ID(而不是全文——如果是文本,SQL_ID 基本上是哈希码)。您还会在V$SQL 中找到SQL_ID

【讨论】:

我的查询略有不同。从 V$SQL 中,这些查询具有不同的 SQL_ID,但我无法在 AWR 中找到它们。 ELAPSED TIMEcursor 执行的所有查询的 sum。您的问题(可能不使用绑定变量)是您获得了很多游标,每个参数值一个。勾选“绑定变量”。 不幸的是,我无法更改查询以使用绑定变量。这些是生成的查询。有两个类似的查询,唯一的区别是插入的值。查询运行多次,我想找到每次运行的经过时间。 AWR 没有列出查询之一。有没有办法可以找到每次查询运行的经过时间?谢谢。

以上是关于Oracle:查找多个查询运行的总查询运行时间的主要内容,如果未能解决你的问题,请参考以下文章

Oracle 查询性能——多个复杂的窗口函数

Oracle SQL 性能问题 - 如何使查询停止运行并在找到第一个实例时返回

Oracle 物化视图与 JPA 查询

如何在只有 1 个连接的 bash 循环中运行多个 sqlplus 查询

oracle sql (toad) - 执行多个查询,保存到单个 excel 文件

Oracle - 查询优化 - 查询运行时间长