gpt4 book ai didi

database - 如何找到前 10 个昂贵的 sql -Oracle

转载 作者:搜寻专家 更新时间:2023-10-30 23:26:11 24 4
gpt4 key购买 nike

我已尝试使用以下 SQL 查询。

SELECT
sql_id,
child_number,
sql_fulltext,
elapsed_time,
executions,
round(elapsed_time_avg) elapsed_time_avg
FROM
(
SELECT
command_type,
sql_id,
child_number,
sql_fulltext,
elapsed_time,
cpu_time,
disk_reads,
executions,
( elapsed_time / executions ) elapsed_time_avg
FROM
v$sql
WHERE
executions > 0
order by elapsed_time_avg desc
)
where rownum <=10;

我一直期望来自数据库的前 10 个昂贵的查询。我的查询已获取,但一段时间后使用相同的 SQL 查询更改了 SQL_id(结果更改)。

最佳答案

您的做法是正确的。 (哇,我建议按 ELAPSED_TIME 排序而不是平均排序,因为它是最重要的总运行时间。一百万个快速查询可能比一个慢查询更糟糕。)但你只需要保持请注意,随着查询从共享池中老化,它们将从 V$SQL 中消失。并且很难准确预测某些内容将在共享池中保留多长时间。

您可能想查看 V$ACTIVE_SESSION_HISTORY 中的事件 session 历史记录,它通常存储许多小时的数据。然后查看DBA_HIST_ACTIVE_SESS_HISTORY,默认存储8天的数据。您必须调整您的查询,因为这两个 View 不存储总和,它们为每次等待存储一行。您需要计算每个 SQL_ID 的行数以找到估计的等待时间。 (V$ACTIVE_SESSION_HISTORY 每秒采样一次,DBA_HIST_ACTIVE_SESS_HISTORY 每 10 秒采样一次。)

关于调整 SQL,要认识到的最重要的事情之一是您不是在寻求完美。您不想跟踪每一个语句,否则您会发疯的。如果您每 X 秒对系统进行一次采样,并且没有出现一条语句,那么您几乎可以肯定不关心该语句。如果慢语句从前 N 个列表中消失也没关系。

关于database - 如何找到前 10 个昂贵的 sql -Oracle,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57656127/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com