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 TIME
是 cursor 执行的所有查询的 sum。您的问题(可能不使用绑定变量)是您获得了很多游标,每个参数值一个。勾选“绑定变量”。
不幸的是,我无法更改查询以使用绑定变量。这些是生成的查询。有两个类似的查询,唯一的区别是插入的值。查询运行多次,我想找到每次运行的经过时间。 AWR 没有列出查询之一。有没有办法可以找到每次查询运行的经过时间?谢谢。以上是关于Oracle:查找多个查询运行的总查询运行时间的主要内容,如果未能解决你的问题,请参考以下文章
Oracle SQL 性能问题 - 如何使查询停止运行并在找到第一个实例时返回
如何在只有 1 个连接的 bash 循环中运行多个 sqlplus 查询