oracle 中热门查询的自动 SQL 调优顾问报告
Posted
技术标签:
【中文标题】oracle 中热门查询的自动 SQL 调优顾问报告【英文标题】:Automatic SQL tuning adviser report for top queries in oracle 【发布时间】:2020-01-14 13:00:54 【问题描述】:我正在使用 OEM 查看作为日常维护工作的一部分运行的优化顾问报告,以获取特定查询。现在我的要求是获得一个文件(文本/html),其中包含 AWR 报告前 10/20 的调整顾问报告。有人可以帮我按要求获取报告吗?
数据库版本:12.1.0.2
【问题讨论】:
【参考方案1】:您需要运行 SQL Tuning Advisor (STA) 的“任务”来获取 STA 报告。为单个任务执行此操作的代码如下:
SELECT DBMS_SQLTUNE.report_tuning_task(:task_name) AS recommendations FROM dual;
获取多个任务的 STA 报告应该不难,例如使用 SQL*Plus:
-- Once the tuning task has executed successfully the recommendations can be displayed using the REPORT_TUNING_TASK function.
set linesize 210
set pagesize 9999
set long 10000000
set time on
set timing on
SET SERVEROUTPUT ON
-- width of output should not need more than 200
column recommendations format a200
spool c:\temp\STA_reports.txt
SELECT DBMS_SQLTUNE.report_tuning_task('68vm8dtty867d_1340348426_AWR') AS recommendations FROM dual ;
prompt =================================================================
SELECT DBMS_SQLTUNE.report_tuning_task('69w2tux85a9x7_814599999_AWR') AS recommendations FROM dual ;
rem ...
spool off
因此,基本上,您需要为 top-SQL 运行 STA,然后将报告生成为一个文件。
我不经常使用 OEM,因为我发现此工具无法涵盖我经常遇到的用例,而是直接从 DBA_HIST_SQLSTAT 生成 Top-SQL 列表*。这样做的一个原因是我可以将不适用于报告的性能问题的 SQL 子集出来;此外,我可以通过各种指标(例如,经过时间、cpu 时间、缓冲获取,...)对 Top-SQL 进行排序。一旦我有了感兴趣的 SQL 的 SQL_ID,我就通过 SQL Tuning Advisor 运行它们。我没有检查 SQL Tuning Advisor 报告,而是直接从 DBA_ADVISOR% 表中聚合持久化的结果。通过这些查询,我直接从 DBA_ADVISOR% 表中提取代码以实现建议(例如用于收集统计信息、创建索引、接受 SQL 配置文件的 SQL)。我在许多 Oracle 会议上都对此进行了介绍,但该解决方案远远超出了对问题的直接回答。
*DBA_HIST_SQLSTAT 脚本可以在问题“how much CPU a session consuming at a given time in oracle”的答案中找到
【讨论】:
感谢您的建议。让我尝试使用 DBA_HIST_SQLSTAT 中的*** sql 手动构建一个脚本并连接所有报告。 对于 DBA_HIST_SQLSTAT 脚本,请参考“oracle 中给定时间会话消耗多少 CPU”的问题:***.com/questions/58820965/…以上是关于oracle 中热门查询的自动 SQL 调优顾问报告的主要内容,如果未能解决你的问题,请参考以下文章