Oracle中如何通过AWR查看历史慢SQL的详细统计信息?
- 内容介绍
- 文章标签
- 相关推荐
本文共计935个文字,预计阅读时间需要4分钟。
相关专题
查AWR里执行时间最长的SQL用 dba_hist_sqlstat
awr快照中真正记录历史sql耗时的是 dba_hist_sqlstat,不是 v$sql(那是内存中当前缓存的)。关键字段是 elapsed_time_delta,单位微秒,需除以 1000000 转成秒。
常见错误是直接查 ELAPSED_TIME——它没做归一化,可能含多次执行叠加值;必须用带 DELTA 的列,代表该快照周期内增量耗时。
- 筛选慢SQL:加条件
ELAPSED_TIME_DELTA / 1000000 >= 2(2秒以上) - 避免漏掉低频但单次极慢的SQL:别只按
EXECUTIONS排序,优先按ELAPSED_TIME_DELTA降序 - 关联SQL文本要用
dba_hist_sqltext,注意sql_id可能为空(硬解析失败或被老化出共享池)
从AWR报告导出Top SQL要盯住“SQL Statistics”章节
生成AWR报告(awrrpt.sql)后,翻到“SQL Statistics”部分,里面分多个子表:SQL ordered by Elapsed Time、SQL ordered by CPU Time、SQL ordered by Gets 等。最常用的是第一个。
本文共计935个文字,预计阅读时间需要4分钟。
相关专题
查AWR里执行时间最长的SQL用 dba_hist_sqlstat
awr快照中真正记录历史sql耗时的是 dba_hist_sqlstat,不是 v$sql(那是内存中当前缓存的)。关键字段是 elapsed_time_delta,单位微秒,需除以 1000000 转成秒。
常见错误是直接查 ELAPSED_TIME——它没做归一化,可能含多次执行叠加值;必须用带 DELTA 的列,代表该快照周期内增量耗时。
- 筛选慢SQL:加条件
ELAPSED_TIME_DELTA / 1000000 >= 2(2秒以上) - 避免漏掉低频但单次极慢的SQL:别只按
EXECUTIONS排序,优先按ELAPSED_TIME_DELTA降序 - 关联SQL文本要用
dba_hist_sqltext,注意sql_id可能为空(硬解析失败或被老化出共享池)
从AWR报告导出Top SQL要盯住“SQL Statistics”章节
生成AWR报告(awrrpt.sql)后,翻到“SQL Statistics”部分,里面分多个子表:SQL ordered by Elapsed Time、SQL ordered by CPU Time、SQL ordered by Gets 等。最常用的是第一个。

