DBMS_SQLTUNE + SQL Performance Analyzer 实战小记
生活随笔
收集整理的這篇文章主要介紹了
DBMS_SQLTUNE + SQL Performance Analyzer 实战小记
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
根據上一篇文章中生產的SPA任務,通過DBMS_SQLTUNE提出的建議優化sql
一. dbms_sqltune.create_tuning_task可以基于sql text,sql_id, workload repository,sqlset,SPA Task。本處以前面實驗用的SPA Task為例。
--根據spa task_name創建任務(通過其他方式創建任務理應更簡單)
DECLARE
? L_SQL_TUNE_TASK_ID VARCHAR2(100);
BEGIN
? L_SQL_TUNE_TASK_ID := DBMS_SQLTUNE.CREATE_TUNING_TASK(SPA_TASK_NAME ? ?=> 'compare_2sets2',
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? SPA_TASK_OWNER ? => 'HNYD',
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? SPA_COMPARE_EXEC => NULL,
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? BASIC_FILTER ? ? => NULL,
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? TIME_LIMIT ? ? ? => 18000,
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? TASK_NAME ? ? ? ?=> 'T_SPA_TASK1',
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? DESCRIPTION ? ? ?=> 'Test create_tuning_task - SPA Task format');
? DBMS_OUTPUT.PUT_LINE('l_sql_tune_task_id: ' || L_SQL_TUNE_TASK_ID);
END;
/
----上面發現DJANGO_SET1,DJANGO_SET2以及compare_2sests不存在,這與個人清理掉system和sysaux表空間的操作有關,用上篇中類似方式重新創建即哥。
---而后發現超時(執行上面的過程不會報錯,最后sqltune的結果展示不全,內容顯示錯誤),因為整個sql tune sets 內容太多,我第一次超時時間只設置了3分鐘,后面重新設置較長時間后成功獲取整個spa任務比較中所有sql。
2.DBMS_SQLTUNE常見利用
????begin DBMS_SQLTUNE.execute_tuning_task(task_name => 'T_SPA_TASK1'); end;
?SELECT DBMS_SQLTUNE.REPORT_TUNING_TASK('T_SPA_TASK1') ?FROM dual;
--結果展示
?GENERAL INFORMATION SECTION
-------------------------------------------------------------------------------
Tuning Task Name ? ? ? ? ? ? ? ? ?: T_SPA_TASK1
Tuning Task Owner ? ? ? ? ? ? ? ? : HNYD
Workload Type ? ? ? ? ? ? ? ? ? ? : SQL Tuning Set
Scope ? ? ? ? ? ? ? ? ? ? ? ? ? ? : COMPREHENSIVE
Time Limit(seconds) ? ? ? ? ? ? ? : 18000
Completion Status ? ? ? ? ? ? ? ? : COMPLETED
Started at ? ? ? ? ? ? ? ? ? ? ? ?: 03/05/2016 22:41:51
Completed at ? ? ? ? ? ? ? ? ? ? ?: 03/05/2016 23:15:21
SQL Tuning Set (STS) Name ? ? ? ? : DJANGO_SET3
SQL Tuning Set Owner ? ? ? ? ? ? ?: HNYD
Number of Statements in the STS ? : 604
-------------------------------------------------------------------------------
SUMMARY SECTION
-------------------------------------------------------------------------------
? ? ? ? ? ? ? ? ? ? ? Global SQL Tuning Result Statistics
-------------------------------------------------------------------------------
Number of SQLs Analyzed ? ? ? ? ? ? ? ? ? ? ?: 232
Number of SQLs in the Report ? ? ? ? ? ? ? ? : 138
Number of SQLs with Findings ? ? ? ? ? ? ? ? : 79
Number of SQLs with Statistic Findings ? ? ? : 1
Number of SQLs with Alternative Plan Findings: 29
Number of SQLs with SQL profiles recommended : 30
Number of SQLs with Index Findings ? ? ? ? ? : 1
Number of SQLs with SQL Restructure Findings : 14
Number of SQLs with Errors ? ? ? ? ? ? ? ? ? : 59
-------------------------------------------------------------------------------
? ? SQLs with Findings Ordered by Maximum (Profile/Index) Benefit, Object ID
-------------------------------------------------------------------------------
object ID ?SQL ID ? ? ? ?statistics profile(benefit) index(benefit) restructure
---------- ------------- ---------- ---------------- -------------- -----------
? ? ? ?155 3gjhh2hgfnnb2 ? ? ? ? ? ? ? ? ? ? ?99.94% ? ? ? ? ? ? ? ? ? ? ? ? ??
? ? ? ?176 24bu9cpx0wmxq ? ? ? ? ? ? ? ? ? ? ?99.94% ? ? ? ? ? ? ? ? ? ? ? ? ??
? ? ? ? 68 bn4b3vjw2mj3u ? ? ? ? ? ? ? ? ? ? ?99.62% ? ? ? ? ? ? ? ? ? ? ? ? ??
? ? ? ? 30 g5m0bnvyy37b1 ? ? ? ? ? ? ? ? ? ? ?99.52% ? ? ? ? ? ? ? ? ? ? ? ? ?1
? ? ? ? 60 7aw21806wpgzp ? ? ? ? ? ? ? ? ? ? ?99.50% ? ? ? ? ? ? ? ? ? ? ? ? ?1
? ? ? ?138 a7a75aupxfgq1 ? ? ? ? ? ? ? ? ? ? ?96.63% ? ? ? ? ? ? ? ? ? ? ? ? ??
? ? ? ? 13 0mdckw03m07v3 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 95.00% ? ? ? ? ? ?
? ? ? ?163 3nc51h4uv661j ? ? ? ? ? ? ? ? ? ? ?89.40% ? ? ? ? ? ? ? ? ? ? ? ? ??
? ? ? ? 20 g5m0bnvyy37b1 ? ? ? ? ? ? ? ? ? ? ?89.37% ? ? ? ? ? ? ? ? ? ? ? ? ?1
? ? ? ? 45 aamdkbbaajjgz ? ? ? ? ? ? ? ? ? ? ?84.03% ? ? ? ? ? ? ? ? ? ? ? ? ??
? ? ? ?203 1tgukkrqj3zhw ? ? ? ? ? ? ? ? ? ? ?82.42% ? ? ? ? ? ? ? ? ? ? ? ? ??
? ? ? ? 15 f5yun5dynkskv ? ? ? ? ? ? ? ? ? ? ?81.85% ? ? ? ? ? ? ? ? ? ? ? ? ??
? ? ? ? 99 22yqbyxqx2fd6 ? ? ? ? ? ? ? ? ? ? ?81.62% ? ? ? ? ? ? ? ? ? ? ? ? ??
......
對很多sql都給了建議,結果過長,貼一小部分。
-------------------------------------------------------------------------------
FINDINGS SECTION (2 findings)
-------------------------------------------------------------------------------
1- SQL Profile Finding (see explain plans section below)
--------------------------------------------------------
? 為此語句找到了性能更好的執行計劃。
? Recommendation (estimated benefit: 99.62%)
? ------------------------------------------
? - 考慮接受推薦的 SQL 概要文件。
? ? execute dbms_sqltune.accept_sql_profile(task_name => 'T_SPA_TASK1',
? ? ? ? ? ? object_id => 68, task_owner => 'HNYD', replace => TRUE);
2- Alternative Plan Finding
---------------------------
? 通過搜索系統的實時和歷史性能數據找到了此語句的某些替代執行計劃。
? The following table lists these plans ranked by their average elapsed time.
? See section "ALTERNATIVE PLANS SECTION" for detailed information on each
? plan.
? id plan hash ?last seen ? ? ? ? ? ?elapsed (s) ?origin ? ? ? ? ?note ? ? ? ? ? ?
? -- ---------- -------------------- ------------ --------------- ----------------
? ?1 1781002567 ?2016-03-05/18:25:58 ? ? ? ?0.006 AWR ? ? ? ? ? ? ? ? ? ? ? ? ? ??
? ?2 2672219561 ? ? ? ? ? ? ?unknown ? ? ? ?0.011 SPA ? ? ? ? ? ? original plan ??
? ?3 ?930046576 ?2016-03-01/17:00:34 ? ? ? ?0.016 AWR ? ? ? ? ? ? ? ? ? ? ? ? ? ??
? ?4 3270362138 ?2016-03-05/18:25:58 ? ? ? ?0.043 AWR ? ? ? ? ? ? ? ? ? ? ? ? ? ??
? Recommendation
? --------------
? - 請考慮使用最佳平均用時為計劃創建 SQL 計劃基線。
? ? execute dbms_sqltune.create_sql_plan_baseline(task_name => 'T_SPA_TASK1',
? ? ? ? ? ? object_id => 68, owner_name => 'HNYD', plan_hash_value =>
? ? ? ? ? ? 1781002567);
-------------------------------------------------------------------------------
ADDITIONAL INFORMATION SECTION
-------------------------------------------------------------------------------
- 此 SQL 語句至少缺少一個重要綁定值。指導分析的準確性可能取決于提供的所有重要綁定值。
-------------------------------------------------------------------------------
EXPLAIN PLANS SECTION
-------------------------------------------------------------------------------
1- Original With Adjusted Cost
------------------------------
Plan hash value: 2672219561
-----------------------------------------------------------------------------------------------------------------------------
| Id ?| Operation ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?| Name ? ? ? ? ? ? ? ? ? ? ? | Rows ?| Bytes |TempSpc| Cost (%CPU)| Time ? ? |
-----------------------------------------------------------------------------------------------------------------------------
| ? 0 | SELECT STATEMENT ? ? ? ? ? ? ? ? ? ? ? | ? ? ? ? ? ? ? ? ? ? ? ? ? ?| 90001 | ? ?13M| ? ? ? | ?3124 ? (1)| 00:00:38 |
| ? 1 | ?SORT ORDER BY ? ? ? ? ? ? ? ? ? ? ? ? | ? ? ? ? ? ? ? ? ? ? ? ? ? ?| 90001 | ? ?13M| ? ?16M| ?3124 ? (1)| 00:00:38 |
|* ?2 | ? FILTER ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? | ? ? ? ? ? ? ? ? ? ? ? ? ? ?| ? ? ? | ? ? ? | ? ? ? | ? ? ? ? ? ?| ? ? ? ? ?|
……
二、由于分析整個任務中的所有sql太耗時,且spa任務用到的sql tune sets也沒有過濾,針對性不強,下面以一個sql為例,同樣是DBMS_SQLTUNE With SQL Performance Analyzer
--?--過濾條件BASIC_FILTER ? ? => 'sql_id=''67255mtgs6xv4''',TASK_NAME ? ? ? ?=> 'T_SPA_TASK_ONESQL',實用性相對上面較強?DECLARE
? L_SQL_TUNE_TASK_ID VARCHAR2(100);
BEGIN
? L_SQL_TUNE_TASK_ID := DBMS_SQLTUNE.CREATE_TUNING_TASK(SPA_TASK_NAME ? ?=> 'compare_2sets2',
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? SPA_TASK_OWNER ? => 'HNYD',
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? SPA_COMPARE_EXEC => NULL,
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? BASIC_FILTER ? ? => 'sql_id=''67255mtgs6xv4''',
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? TIME_LIMIT ? ? ? => 1800,
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? TASK_NAME ? ? ? ?=> 'T_SPA_TASK_ONESQL',
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? DESCRIPTION ? ? ?=> 'Test create_tuning_task - SPA Task format');
? DBMS_OUTPUT.PUT_LINE('l_sql_tune_task_id: ' || L_SQL_TUNE_TASK_ID);
END;
/
begin DBMS_SQLTUNE.execute_tuning_task(task_name => 'T_SPA_TASK_ONESQL',execution_name => 'exec_onesql'); end;
SELECT DBMS_SQLTUNE.REPORT_TUNING_TASK('T_SPA_TASK_ONESQL') ?FROM dual;
結果展示:
GENERAL INFORMATION SECTION
-------------------------------------------------------------------------------
Tuning Task Name ? ? ? ? ? ? ? ? ?: T_SPA_TASK_ONESQL
Tuning Task Owner ? ? ? ? ? ? ? ? : HNYD
Workload Type ? ? ? ? ? ? ? ? ? ? : SQL Tuning Set
Scope ? ? ? ? ? ? ? ? ? ? ? ? ? ? : COMPREHENSIVE
Time Limit(seconds) ? ? ? ? ? ? ? : 1800
Completion Status ? ? ? ? ? ? ? ? : COMPLETED
Started at ? ? ? ? ? ? ? ? ? ? ? ?: 03/05/2016 23:32:23
Completed at ? ? ? ? ? ? ? ? ? ? ?: 03/05/2016 23:32:29
SQL Tuning Set (STS) Name ? ? ? ? : DJANGO_SET3
SQL Tuning Set Owner ? ? ? ? ? ? ?: HNYD
Number of Statements in the STS ? : 604
-------------------------------------------------------------------------------
SUMMARY SECTION
-------------------------------------------------------------------------------
? ? ? ? ? ? ? ? ? ? ? Global SQL Tuning Result Statistics
-------------------------------------------------------------------------------
Number of SQLs Analyzed ? ? ? ? ? ? ? ? ? ? ?: 2
Number of SQLs in the Report ? ? ? ? ? ? ? ? : 1
Number of SQLs with Findings ? ? ? ? ? ? ? ? : 1
Number of SQLs with Statistic Findings ? ? ? : 1
Number of SQLs with Alternative Plan Findings: 1
-------------------------------------------------------------------------------
? ? SQLs with Findings Ordered by Maximum (Profile/Index) Benefit, Object ID
-------------------------------------------------------------------------------
object ID ?SQL ID ? ? ? ?statistics profile(benefit) index(benefit) restructure
---------- ------------- ---------- ---------------- -------------- -----------
? ? ? ? ?2 67255mtgs6xv4 ? ? ? ? ?1 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
? ? ? ? ?3 67255mtgs6xv4 ? ? ? ? ?1 ? ? ? ? ? ? ? ?
……
------------------------------------------------------------------------------
FINDINGS SECTION (2 findings)
-------------------------------------------------------------------------------
1- Statistics Finding
---------------------
? 表 "HNYD"."DB_GROUP_SCHEDULERS" 的優化程序統計信息已失效。
? Recommendation
? --------------
? - 考慮收集此表及其索引的優化程序統計信息。
? ? execute dbms_stats.gather_table_stats(ownname => 'HNYD', tabname =>
? ? ? ? ? ? '表名保密..', estimate_percent =>
? ? ? ? ? ? DBMS_STATS.AUTO_SAMPLE_SIZE, method_opt => 'FOR ALL COLUMNS SIZE
? ? ? ? ? ? AUTO', cascade => TRUE);
? Rationale
? ---------
? ? 為了選擇好的執行計劃, 優化程序需要此表及其索引的最新統計信息。
2- Alternative Plan Finding
---------------------------
? 通過搜索系統的實時和歷史性能數據找到了此語句的某些替代執行計劃。
? The following table lists these plans ranked by their average elapsed time.
? See section "ALTERNATIVE PLANS SECTION" for detailed information on each
? plan.
? id plan hash ?last seen ? ? ? ? ? ?elapsed (s) ?origin ? ? ? ? ?note ? ? ? ? ? ?
? -- ---------- -------------------- ------------ --------------- ----------------
? ?1 ?838008028 ? ? ? ? ? ? ?unknown ? ? ? ?0.022 SPA ? ? ? ? ? ? ? ? ? ? ? ? ? ??
? ?2 ?776620345 ?2016-03-05/20:00:11 ? ? ? ?0.061 AWR ? ? ? ? ? ? original plan ??
? Recommendation
? --------------
? - 請考慮使用最佳平均用時為計劃創建 SQL 計劃基線。
? ? execute dbms_sqltune.create_sql_plan_baseline(task_name =>
? ? ? ? ? ? 'T_SPA_TASK_ONESQL', object_id => 2, owner_name => 'HNYD',
? ? ? ? ? ? plan_hash_value => 838008028);
-------------------------------------------------------------------------------
ADDITIONAL INFORMATION SECTION
-------------------------------------------------------------------------------
- 優化程序不能合并位于執行計劃的行 ID 12 處的視圖。. 優化程序不能合并包含 "ORDER BY" 子句的視圖, 除非此語句為 "DELETE"
? 或 "UPDATE", 并且父查詢為此語句中的頂級查詢。.
- 優化程序不能合并位于執行計劃的行 ID 5 處的視圖。. 優化程序不能合并包含 "ORDER BY" 子句的視圖, 除非此語句為 "DELETE" 或
? "UPDATE", 并且父查詢為此語句中的頂級查詢。.
- 優化程序不能合并位于執行計劃的行 ID 2 處的視圖。. 優化程序不能合并包含 "ROWNUM" 偽列的視圖。.
結果后面列出了各個計劃及按推薦方式處理的變化方式。可做性能優化參考。
一. dbms_sqltune.create_tuning_task可以基于sql text,sql_id, workload repository,sqlset,SPA Task。本處以前面實驗用的SPA Task為例。
--根據spa task_name創建任務(通過其他方式創建任務理應更簡單)
DECLARE
? L_SQL_TUNE_TASK_ID VARCHAR2(100);
BEGIN
? L_SQL_TUNE_TASK_ID := DBMS_SQLTUNE.CREATE_TUNING_TASK(SPA_TASK_NAME ? ?=> 'compare_2sets2',
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? SPA_TASK_OWNER ? => 'HNYD',
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? SPA_COMPARE_EXEC => NULL,
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? BASIC_FILTER ? ? => NULL,
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? TIME_LIMIT ? ? ? => 18000,
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? TASK_NAME ? ? ? ?=> 'T_SPA_TASK1',
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? DESCRIPTION ? ? ?=> 'Test create_tuning_task - SPA Task format');
? DBMS_OUTPUT.PUT_LINE('l_sql_tune_task_id: ' || L_SQL_TUNE_TASK_ID);
END;
/
----上面發現DJANGO_SET1,DJANGO_SET2以及compare_2sests不存在,這與個人清理掉system和sysaux表空間的操作有關,用上篇中類似方式重新創建即哥。
---而后發現超時(執行上面的過程不會報錯,最后sqltune的結果展示不全,內容顯示錯誤),因為整個sql tune sets 內容太多,我第一次超時時間只設置了3分鐘,后面重新設置較長時間后成功獲取整個spa任務比較中所有sql。
2.DBMS_SQLTUNE常見利用
????begin DBMS_SQLTUNE.execute_tuning_task(task_name => 'T_SPA_TASK1'); end;
?SELECT DBMS_SQLTUNE.REPORT_TUNING_TASK('T_SPA_TASK1') ?FROM dual;
--結果展示
?GENERAL INFORMATION SECTION
-------------------------------------------------------------------------------
Tuning Task Name ? ? ? ? ? ? ? ? ?: T_SPA_TASK1
Tuning Task Owner ? ? ? ? ? ? ? ? : HNYD
Workload Type ? ? ? ? ? ? ? ? ? ? : SQL Tuning Set
Scope ? ? ? ? ? ? ? ? ? ? ? ? ? ? : COMPREHENSIVE
Time Limit(seconds) ? ? ? ? ? ? ? : 18000
Completion Status ? ? ? ? ? ? ? ? : COMPLETED
Started at ? ? ? ? ? ? ? ? ? ? ? ?: 03/05/2016 22:41:51
Completed at ? ? ? ? ? ? ? ? ? ? ?: 03/05/2016 23:15:21
SQL Tuning Set (STS) Name ? ? ? ? : DJANGO_SET3
SQL Tuning Set Owner ? ? ? ? ? ? ?: HNYD
Number of Statements in the STS ? : 604
-------------------------------------------------------------------------------
SUMMARY SECTION
-------------------------------------------------------------------------------
? ? ? ? ? ? ? ? ? ? ? Global SQL Tuning Result Statistics
-------------------------------------------------------------------------------
Number of SQLs Analyzed ? ? ? ? ? ? ? ? ? ? ?: 232
Number of SQLs in the Report ? ? ? ? ? ? ? ? : 138
Number of SQLs with Findings ? ? ? ? ? ? ? ? : 79
Number of SQLs with Statistic Findings ? ? ? : 1
Number of SQLs with Alternative Plan Findings: 29
Number of SQLs with SQL profiles recommended : 30
Number of SQLs with Index Findings ? ? ? ? ? : 1
Number of SQLs with SQL Restructure Findings : 14
Number of SQLs with Errors ? ? ? ? ? ? ? ? ? : 59
-------------------------------------------------------------------------------
? ? SQLs with Findings Ordered by Maximum (Profile/Index) Benefit, Object ID
-------------------------------------------------------------------------------
object ID ?SQL ID ? ? ? ?statistics profile(benefit) index(benefit) restructure
---------- ------------- ---------- ---------------- -------------- -----------
? ? ? ?155 3gjhh2hgfnnb2 ? ? ? ? ? ? ? ? ? ? ?99.94% ? ? ? ? ? ? ? ? ? ? ? ? ??
? ? ? ?176 24bu9cpx0wmxq ? ? ? ? ? ? ? ? ? ? ?99.94% ? ? ? ? ? ? ? ? ? ? ? ? ??
? ? ? ? 68 bn4b3vjw2mj3u ? ? ? ? ? ? ? ? ? ? ?99.62% ? ? ? ? ? ? ? ? ? ? ? ? ??
? ? ? ? 30 g5m0bnvyy37b1 ? ? ? ? ? ? ? ? ? ? ?99.52% ? ? ? ? ? ? ? ? ? ? ? ? ?1
? ? ? ? 60 7aw21806wpgzp ? ? ? ? ? ? ? ? ? ? ?99.50% ? ? ? ? ? ? ? ? ? ? ? ? ?1
? ? ? ?138 a7a75aupxfgq1 ? ? ? ? ? ? ? ? ? ? ?96.63% ? ? ? ? ? ? ? ? ? ? ? ? ??
? ? ? ? 13 0mdckw03m07v3 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 95.00% ? ? ? ? ? ?
? ? ? ?163 3nc51h4uv661j ? ? ? ? ? ? ? ? ? ? ?89.40% ? ? ? ? ? ? ? ? ? ? ? ? ??
? ? ? ? 20 g5m0bnvyy37b1 ? ? ? ? ? ? ? ? ? ? ?89.37% ? ? ? ? ? ? ? ? ? ? ? ? ?1
? ? ? ? 45 aamdkbbaajjgz ? ? ? ? ? ? ? ? ? ? ?84.03% ? ? ? ? ? ? ? ? ? ? ? ? ??
? ? ? ?203 1tgukkrqj3zhw ? ? ? ? ? ? ? ? ? ? ?82.42% ? ? ? ? ? ? ? ? ? ? ? ? ??
? ? ? ? 15 f5yun5dynkskv ? ? ? ? ? ? ? ? ? ? ?81.85% ? ? ? ? ? ? ? ? ? ? ? ? ??
? ? ? ? 99 22yqbyxqx2fd6 ? ? ? ? ? ? ? ? ? ? ?81.62% ? ? ? ? ? ? ? ? ? ? ? ? ??
......
對很多sql都給了建議,結果過長,貼一小部分。
-------------------------------------------------------------------------------
FINDINGS SECTION (2 findings)
-------------------------------------------------------------------------------
1- SQL Profile Finding (see explain plans section below)
--------------------------------------------------------
? 為此語句找到了性能更好的執行計劃。
? Recommendation (estimated benefit: 99.62%)
? ------------------------------------------
? - 考慮接受推薦的 SQL 概要文件。
? ? execute dbms_sqltune.accept_sql_profile(task_name => 'T_SPA_TASK1',
? ? ? ? ? ? object_id => 68, task_owner => 'HNYD', replace => TRUE);
2- Alternative Plan Finding
---------------------------
? 通過搜索系統的實時和歷史性能數據找到了此語句的某些替代執行計劃。
? The following table lists these plans ranked by their average elapsed time.
? See section "ALTERNATIVE PLANS SECTION" for detailed information on each
? plan.
? id plan hash ?last seen ? ? ? ? ? ?elapsed (s) ?origin ? ? ? ? ?note ? ? ? ? ? ?
? -- ---------- -------------------- ------------ --------------- ----------------
? ?1 1781002567 ?2016-03-05/18:25:58 ? ? ? ?0.006 AWR ? ? ? ? ? ? ? ? ? ? ? ? ? ??
? ?2 2672219561 ? ? ? ? ? ? ?unknown ? ? ? ?0.011 SPA ? ? ? ? ? ? original plan ??
? ?3 ?930046576 ?2016-03-01/17:00:34 ? ? ? ?0.016 AWR ? ? ? ? ? ? ? ? ? ? ? ? ? ??
? ?4 3270362138 ?2016-03-05/18:25:58 ? ? ? ?0.043 AWR ? ? ? ? ? ? ? ? ? ? ? ? ? ??
? Recommendation
? --------------
? - 請考慮使用最佳平均用時為計劃創建 SQL 計劃基線。
? ? execute dbms_sqltune.create_sql_plan_baseline(task_name => 'T_SPA_TASK1',
? ? ? ? ? ? object_id => 68, owner_name => 'HNYD', plan_hash_value =>
? ? ? ? ? ? 1781002567);
-------------------------------------------------------------------------------
ADDITIONAL INFORMATION SECTION
-------------------------------------------------------------------------------
- 此 SQL 語句至少缺少一個重要綁定值。指導分析的準確性可能取決于提供的所有重要綁定值。
-------------------------------------------------------------------------------
EXPLAIN PLANS SECTION
-------------------------------------------------------------------------------
1- Original With Adjusted Cost
------------------------------
Plan hash value: 2672219561
-----------------------------------------------------------------------------------------------------------------------------
| Id ?| Operation ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?| Name ? ? ? ? ? ? ? ? ? ? ? | Rows ?| Bytes |TempSpc| Cost (%CPU)| Time ? ? |
-----------------------------------------------------------------------------------------------------------------------------
| ? 0 | SELECT STATEMENT ? ? ? ? ? ? ? ? ? ? ? | ? ? ? ? ? ? ? ? ? ? ? ? ? ?| 90001 | ? ?13M| ? ? ? | ?3124 ? (1)| 00:00:38 |
| ? 1 | ?SORT ORDER BY ? ? ? ? ? ? ? ? ? ? ? ? | ? ? ? ? ? ? ? ? ? ? ? ? ? ?| 90001 | ? ?13M| ? ?16M| ?3124 ? (1)| 00:00:38 |
|* ?2 | ? FILTER ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? | ? ? ? ? ? ? ? ? ? ? ? ? ? ?| ? ? ? | ? ? ? | ? ? ? | ? ? ? ? ? ?| ? ? ? ? ?|
……
二、由于分析整個任務中的所有sql太耗時,且spa任務用到的sql tune sets也沒有過濾,針對性不強,下面以一個sql為例,同樣是DBMS_SQLTUNE With SQL Performance Analyzer
--?--過濾條件BASIC_FILTER ? ? => 'sql_id=''67255mtgs6xv4''',TASK_NAME ? ? ? ?=> 'T_SPA_TASK_ONESQL',實用性相對上面較強?DECLARE
? L_SQL_TUNE_TASK_ID VARCHAR2(100);
BEGIN
? L_SQL_TUNE_TASK_ID := DBMS_SQLTUNE.CREATE_TUNING_TASK(SPA_TASK_NAME ? ?=> 'compare_2sets2',
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? SPA_TASK_OWNER ? => 'HNYD',
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? SPA_COMPARE_EXEC => NULL,
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? BASIC_FILTER ? ? => 'sql_id=''67255mtgs6xv4''',
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? TIME_LIMIT ? ? ? => 1800,
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? TASK_NAME ? ? ? ?=> 'T_SPA_TASK_ONESQL',
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? DESCRIPTION ? ? ?=> 'Test create_tuning_task - SPA Task format');
? DBMS_OUTPUT.PUT_LINE('l_sql_tune_task_id: ' || L_SQL_TUNE_TASK_ID);
END;
/
begin DBMS_SQLTUNE.execute_tuning_task(task_name => 'T_SPA_TASK_ONESQL',execution_name => 'exec_onesql'); end;
SELECT DBMS_SQLTUNE.REPORT_TUNING_TASK('T_SPA_TASK_ONESQL') ?FROM dual;
結果展示:
GENERAL INFORMATION SECTION
-------------------------------------------------------------------------------
Tuning Task Name ? ? ? ? ? ? ? ? ?: T_SPA_TASK_ONESQL
Tuning Task Owner ? ? ? ? ? ? ? ? : HNYD
Workload Type ? ? ? ? ? ? ? ? ? ? : SQL Tuning Set
Scope ? ? ? ? ? ? ? ? ? ? ? ? ? ? : COMPREHENSIVE
Time Limit(seconds) ? ? ? ? ? ? ? : 1800
Completion Status ? ? ? ? ? ? ? ? : COMPLETED
Started at ? ? ? ? ? ? ? ? ? ? ? ?: 03/05/2016 23:32:23
Completed at ? ? ? ? ? ? ? ? ? ? ?: 03/05/2016 23:32:29
SQL Tuning Set (STS) Name ? ? ? ? : DJANGO_SET3
SQL Tuning Set Owner ? ? ? ? ? ? ?: HNYD
Number of Statements in the STS ? : 604
-------------------------------------------------------------------------------
SUMMARY SECTION
-------------------------------------------------------------------------------
? ? ? ? ? ? ? ? ? ? ? Global SQL Tuning Result Statistics
-------------------------------------------------------------------------------
Number of SQLs Analyzed ? ? ? ? ? ? ? ? ? ? ?: 2
Number of SQLs in the Report ? ? ? ? ? ? ? ? : 1
Number of SQLs with Findings ? ? ? ? ? ? ? ? : 1
Number of SQLs with Statistic Findings ? ? ? : 1
Number of SQLs with Alternative Plan Findings: 1
-------------------------------------------------------------------------------
? ? SQLs with Findings Ordered by Maximum (Profile/Index) Benefit, Object ID
-------------------------------------------------------------------------------
object ID ?SQL ID ? ? ? ?statistics profile(benefit) index(benefit) restructure
---------- ------------- ---------- ---------------- -------------- -----------
? ? ? ? ?2 67255mtgs6xv4 ? ? ? ? ?1 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
? ? ? ? ?3 67255mtgs6xv4 ? ? ? ? ?1 ? ? ? ? ? ? ? ?
……
------------------------------------------------------------------------------
FINDINGS SECTION (2 findings)
-------------------------------------------------------------------------------
1- Statistics Finding
---------------------
? 表 "HNYD"."DB_GROUP_SCHEDULERS" 的優化程序統計信息已失效。
? Recommendation
? --------------
? - 考慮收集此表及其索引的優化程序統計信息。
? ? execute dbms_stats.gather_table_stats(ownname => 'HNYD', tabname =>
? ? ? ? ? ? '表名保密..', estimate_percent =>
? ? ? ? ? ? DBMS_STATS.AUTO_SAMPLE_SIZE, method_opt => 'FOR ALL COLUMNS SIZE
? ? ? ? ? ? AUTO', cascade => TRUE);
? Rationale
? ---------
? ? 為了選擇好的執行計劃, 優化程序需要此表及其索引的最新統計信息。
2- Alternative Plan Finding
---------------------------
? 通過搜索系統的實時和歷史性能數據找到了此語句的某些替代執行計劃。
? The following table lists these plans ranked by their average elapsed time.
? See section "ALTERNATIVE PLANS SECTION" for detailed information on each
? plan.
? id plan hash ?last seen ? ? ? ? ? ?elapsed (s) ?origin ? ? ? ? ?note ? ? ? ? ? ?
? -- ---------- -------------------- ------------ --------------- ----------------
? ?1 ?838008028 ? ? ? ? ? ? ?unknown ? ? ? ?0.022 SPA ? ? ? ? ? ? ? ? ? ? ? ? ? ??
? ?2 ?776620345 ?2016-03-05/20:00:11 ? ? ? ?0.061 AWR ? ? ? ? ? ? original plan ??
? Recommendation
? --------------
? - 請考慮使用最佳平均用時為計劃創建 SQL 計劃基線。
? ? execute dbms_sqltune.create_sql_plan_baseline(task_name =>
? ? ? ? ? ? 'T_SPA_TASK_ONESQL', object_id => 2, owner_name => 'HNYD',
? ? ? ? ? ? plan_hash_value => 838008028);
-------------------------------------------------------------------------------
ADDITIONAL INFORMATION SECTION
-------------------------------------------------------------------------------
- 優化程序不能合并位于執行計劃的行 ID 12 處的視圖。. 優化程序不能合并包含 "ORDER BY" 子句的視圖, 除非此語句為 "DELETE"
? 或 "UPDATE", 并且父查詢為此語句中的頂級查詢。.
- 優化程序不能合并位于執行計劃的行 ID 5 處的視圖。. 優化程序不能合并包含 "ORDER BY" 子句的視圖, 除非此語句為 "DELETE" 或
? "UPDATE", 并且父查詢為此語句中的頂級查詢。.
- 優化程序不能合并位于執行計劃的行 ID 2 處的視圖。. 優化程序不能合并包含 "ROWNUM" 偽列的視圖。.
結果后面列出了各個計劃及按推薦方式處理的變化方式。可做性能優化參考。
來自 “ ITPUB博客 ” ,鏈接:http://blog.itpub.net/27349469/viewspace-2048767/,如需轉載,請注明出處,否則將追究法律責任。
轉載于:http://blog.itpub.net/27349469/viewspace-2048767/
總結
以上是生活随笔為你收集整理的DBMS_SQLTUNE + SQL Performance Analyzer 实战小记的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python修改wav文件声音大小_如何
- 下一篇: mysql存储过程详解实例