Oracle 中热门查询的自动 SQL 调优顾问报告

Automatic SQL tuning adviser report for top queries in oracle

我正在使用 OEM 查看优化顾问报告,该报告作为日常维护工作的一部分针对特定查询运行。现在我的要求是获取一个文件 (text/html),其中包含 AWR 报告 top-10/20 的调优顾问报告。谁能帮我按要求拿到报告。

数据库版本:12.1.0.2

您需要来自 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_ID 的 SQL 兴趣,我就 运行 他们全部通过 SQL 调优顾问。我没有检查 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

的答案中找到