`
guoyanxi
  • 浏览: 277468 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

第一次oracle sql tuning,简直就是乱来,见笑了

阅读更多
很好的参考:
http://www.iteye.com/topic/498902

1.首先在ADDM中看到建议调优的sql,跑一下SQL Tuning Advisor
看到一些建议,在EM这里更多的是建议你建index(毕竟这是最简单的方法)

2.观察需要调整表的结构,看是否适合做index
还是已经做了而因为有函数等原因使得失效

ALTER INDEX index_name MONITORING USAGE;
SELECT * FROM V$OBJECT_USAGE;


3.请程序员检查代码
正如参考里面说的,更改代码的效果往往要比建index要好得多

以下是具体的优化结果,
其实就是在原有基础上缩减了日期范围(acct_date已经做了index),使得子集大大减少(重180天到1天)

原来:
SQL> SET SERVEROUTPUT ON;
SQL> SET LINESIZE 1000;
SQL> SET AUTOTRACE TRACEONLY;
SQL> SELECT   q.work_ctr, SUBSTR (q.prod_nbr, 2, 2) AS size1,
  2           q.prod_nbr AS prod_nbr, COALESCE (a.pass_qty, 0) pass_qty,
  3           q.qty AS inspect_qty
  4      FROM (SELECT   main_wc AS work_ctr, prod_nbr, SUM (pass_qty) pass_qty
  5                FROM HMASPAS_SOUTPUT
  6               WHERE fac_id = 'A'
  7                 AND trans_date >= '2009-11-24 07.30.00'
  8                 AND trans_date <= '2009-11-24 19.30.00'
  9            GROUP BY main_wc, prod_nbr) a
 10           RIGHT JOIN
 11           (SELECT   work_ctr, prod_nbr, COUNT (*) AS qty
 12                FROM HMASHIS_WQDH
 13               WHERE fac_id = 'A'
 14                 AND trans_date >= '2009-11-24 07.30.00'
 15                 AND trans_date <= '2009-11-24 19.30.00'
 16            GROUP BY work_ctr, prod_nbr) q
 17           ON q.work_ctr = a.work_ctr AND q.prod_nbr = a.prod_nbr
 18  ORDER BY q.work_ctr, q.prod_nbr, a.pass_qty, q.qty;


37 rows selected.


Execution Plan
----------------------------------------------------------
Plan hash value: 544019557

---------------------------------------------------------------------------------------------------
| Id  | Operation                       | Name            | Rows  | Bytes | Cost (%CPU)| Time     |
---------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT                |                 |     1 |    56 | 85722   (2)| 00:17:09 |
|   1 |  SORT ORDER BY                  |                 |     1 |    56 | 85722   (2)| 00:17:09 |
|*  2 |   HASH JOIN OUTER               |                 |     1 |    56 | 85721   (2)| 00:17:09 |
|   3 |    VIEW                         |                 |     1 |    28 |     5  (20)| 00:00:01 |
|   4 |     HASH GROUP BY               |                 |     1 |    44 |     5  (20)| 00:00:01 |
|*  5 |      TABLE ACCESS BY INDEX ROWID| HMASHIS_WQDH    |     1 |    44 |     4   (0)| 00:00:01 |
|*  6 |       INDEX RANGE SCAN          | INDEX2_WQDH     |     1 |       |     3   (0)| 00:00:01 |
|   7 |    VIEW                         |                 |    29 |   812 | 85715   (2)| 00:17:09 |
|   8 |     HASH GROUP BY               |                 |    29 |  1363 | 85715   (2)| 00:17:09 |
|*  9 |      TABLE ACCESS FULL          | HMASPAS_SOUTPUT |    29 |  1363 | 85714   (2)| 00:17:09 |
---------------------------------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

   2 - access("Q"."PROD_NBR"="A"."PROD_NBR"(+) AND "Q"."WORK_CTR"="A"."WORK_CTR"(+))
   5 - filter("FAC_ID"='A')
   6 - access("TRANS_DATE">='2009-11-24 07.30.00' AND "TRANS_DATE"<='2009-11-24 19.30.00')
   9 - filter("TRANS_DATE">='2009-11-24 07.30.00' AND "FAC_ID"='A' AND
              "TRANS_DATE"<='2009-11-24 19.30.00')


Statistics
----------------------------------------------------------
          1  recursive calls
          0  db block gets
     393981  consistent gets
     324974  physical reads
          0  redo size
       2043  bytes sent via SQL*Net to client
        509  bytes received via SQL*Net from client
          4  SQL*Net roundtrips to/from client
          1  sorts (memory)
          0  sorts (disk)
         37  rows processed


优化后:
SQL> SET SERVEROUTPUT ON;
SQL> SET LINESIZE 1000;
SQL> SET AUTOTRACE TRACEONLY;
SELECT   q.work_ctr, SUBSTR (q.prod_nbr, 2, 2) AS size1,
SQL>   2           q.prod_nbr AS prod_nbr, COALESCE (A.pass_qty, 0) pass_qty,
  3           q.qty AS inspect_qty
  4      FROM (SELECT   main_wc AS work_ctr, prod_nbr, SUM (pass_qty) pass_qty
  5                FROM HMASPAS_SOUTPUT
  6               WHERE fac_id = 'A'
  7                 AND acct_date >=
  8                        TO_CHAR (TO_DATE ('2009-11-24', 'YYYY-MM-DD') - 1,
  9                                 'YYYY-MM-DD'
 10                                )
 11                 AND acct_date <=
 12                        TO_CHAR (TO_DATE ('2009-11-24', 'YYYY-MM-DD') + 1,
 13                                 'YYYY-MM-DD'
 14                                )
 15                 AND trans_date >= '2009-11-24 07.30.00'
 16                 AND trans_date <= '2009-11-24 19.30.00'
 17            GROUP BY main_wc, prod_nbr) A
 18           RIGHT JOIN
 19           (SELECT   work_ctr, prod_nbr, COUNT (*) AS qty
 20                FROM HMASHIS_WQDH
 21               WHERE fac_id = 'A'
 22                 AND acct_date >=
 23                        TO_CHAR (TO_DATE ('2009-11-24', 'YYYY-MM-DD') - 1,
 24                                 'YYYY-MM-DD'
 25                                )
 26                 AND acct_date <=
 27                        TO_CHAR (TO_DATE ('2009-11-24', 'YYYY-MM-DD') + 1,
 28                                 'YYYY-MM-DD'
 29                                )
 30                 AND trans_date >= '2009-11-24 07.30.00'
 31                 AND trans_date <= '2009-11-24 19.30.00'
 32            GROUP BY work_ctr, prod_nbr) q
 33           ON q.work_ctr = A.work_ctr AND q.prod_nbr = A.prod_nbr
 34  ORDER BY q.work_ctr, q.prod_nbr, A.pass_qty, q.qty;

37 rows selected.


Execution Plan
----------------------------------------------------------
Plan hash value: 2416477161

-------------------------------------------------------------------------------------------------------
| Id  | Operation                       | Name                | Rows  | Bytes | Cost (%CPU)| Time     |
-------------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT                |                     |     1 |    56 |  1010   (1)| 00:00:13 |
|   1 |  SORT ORDER BY                  |                     |     1 |    56 |  1010   (1)| 00:00:13 |
|*  2 |   HASH JOIN OUTER               |                     |     1 |    56 |  1009   (1)| 00:00:13 |
|   3 |    VIEW                         |                     |     1 |    28 |     5  (20)| 00:00:01 |
|   4 |     HASH GROUP BY               |                     |     1 |    55 |     5  (20)| 00:00:01 |
|*  5 |      TABLE ACCESS BY INDEX ROWID| HMASHIS_WQDH        |     1 |    55 |     4   (0)| 00:00:01 |
|*  6 |       INDEX RANGE SCAN          | INDEX2_WQDH         |     1 |       |     3   (0)| 00:00:01 |
|   7 |    VIEW                         |                     |     1 |    28 |  1003   (1)| 00:00:13 |
|   8 |     HASH GROUP BY               |                     |     1 |    58 |  1003   (1)| 00:00:13 |
|*  9 |      TABLE ACCESS BY INDEX ROWID| HMASPAS_SOUTPUT     |     1 |    58 |  1002   (1)| 00:00:13 |
|* 10 |       INDEX RANGE SCAN          | IDX_HMASPAS_SOUTPUT | 31455 |       |   102   (1)| 00:00:02 |
-------------------------------------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

   2 - access("Q"."PROD_NBR"="A"."PROD_NBR"(+) AND "Q"."WORK_CTR"="A"."WORK_CTR"(+))
   5 - filter("ACCT_DATE">='2009-11-23' AND "FAC_ID"='A' AND "ACCT_DATE"<='2009-11-25')
   6 - access("TRANS_DATE">='2009-11-24 07.30.00' AND "TRANS_DATE"<='2009-11-24 19.30.00')
   9 - filter("TRANS_DATE">='2009-11-24 07.30.00' AND "FAC_ID"='A' AND
              "TRANS_DATE"<='2009-11-24 19.30.00')
  10 - access("ACCT_DATE">='2009-11-23' AND "ACCT_DATE"<='2009-11-25')


Statistics
----------------------------------------------------------
          1  recursive calls
          0  db block gets
       1726  consistent gets
          0  physical reads
          0  redo size
       2043  bytes sent via SQL*Net to client
        509  bytes received via SQL*Net from client
          4  SQL*Net roundtrips to/from client
          1  sorts (memory)
          0  sorts (disk)
         37  rows processed



写在最后:
觉得SQL tuning的东西DBA的组织力、执行力比纯技术要重要得多!!
分享到:
评论

相关推荐

    Oracle SQL Tuning with Oracle SQLTXPLAIN: Oracle Database 12c Edition

    Oracle SQL Tuning with Oracle SQLTXPLAIN: Oracle Database 12c Edition by Stelios Charalambides English | 8 May 2017 | ISBN: 1484224353 | 408 Pages | PDF | 24.39 MB Learn through this practical guide ...

    oracle sql_tuning

    SQL_Tuning是Oracle官方提供的一个专题,旨在帮助管理员和开发人员优化SQL查询,从而提高数据库的效率和响应时间。以下是一些关于"Oracle SQL Tuning"的重要知识点: 1. **SQL执行计划**:SQL执行计划是Oracle解析...

    oracle sqltuning workshop

    Oracle SQL调优是数据库管理员和开发人员在优化数据库性能时不可或缺的一个重要技能。在这个"Oracle SQLTuning Workshop"中,虽然资料可能源自2004年,但它依然包含了许多至今仍具价值的基础知识和实践经验。以下是...

    使用ORACLE SQL Tuning advisor快速优化低效的SQL语句

    使用ORACLE SQL Tuning advisor快速优化低效的SQL语句, 这里是一个使用范例,有9个步骤, 后面 其他语句,都按照这个步骤来做就可以了。

    Oracle SQL Tuning.pdf

    本文将基于“Oracle SQL Tuning”这一主题,深入探讨Oracle SQL调优的核心概念、策略及实践方法。 一、SQL语句处理概览 SQL语句的执行效率对数据库性能有决定性影响。在Oracle环境中,SQL语句的处理流程主要包括...

    Oracle SQL Tuning with Oracle SQLTXPLAIN

    Oracle SQL Tuning with Oracle SQLTXPLAIN,Oracle SQL Tuning with Oracle SQLTXPLAIN,Oracle SQL Tuning with Oracle SQLTXPLAIN

    Oracle 12C SQL Tuning for Developers

    2. **自动SQL调优**:Oracle 12C引入了Automatic SQL Tuning,它自动识别性能瓶颈并提出优化建议。通过Advisor工具,如SQL Tuning Advisor,系统会分析SQL语句并提供改进建议,如创建索引、重写查询或调整绑定变量。...

    ORACLE SQL PERFORMANCE TUNING AND OPTIMIZATION

    《Oracle SQL Performance Tuning and Optimization》是一本专为数据库管理员和开发人员设计的指南,旨在帮助读者深入理解如何优化Oracle数据库中的SQL查询性能。这本书详细介绍了Oracle SQL调优的各个方面,包括...

    Oracle SQL Tuning with Oracle SQLTXPLAIN(Apress,2013)

    Oracle SQL Tuning with SQLTXPLAIN is a practical guide to SQL tuning the way Oracle's own experts do it, using a freely downloadable tool called SQLTXPLAIN. Using this simple tool you'll learn how to ...

    oracle sql tuning

    ### Oracle SQL Tuning详解 #### 一、Oracle SQL性能调优概述 在Oracle数据库管理中,SQL性能调优是一项至关重要的任务,它直接影响到应用程序的响应时间和系统的整体性能。SQL性能调优通常涉及对SQL语句进行分析...

    Oracle SQL Tuning Pocket Reference

    综上所述,《Oracle SQL Tuning Pocket Reference》为 Oracle 数据库管理员和开发人员提供了一本宝贵的工具书,不仅涵盖了 SQL 优化器的基本原理,还深入讨论了各种调优技术和实践案例,是进行 Oracle SQL 性能调优...

    Tosska SQL Tuning Expert for Oracle 2.0.3_x64.exe

    Tosska SQL Tuning Expert (TSE™) 是一款优秀的SQL 调优工具,无需用户参与即可优化 SQL 语句。该产品将为您提供最终的 SQL 性能解决方案,只需点击鼠标即可。在整个 SQL 调优过程中,您不必进行分析、猜测或手工...

    SQL Tuning Advisor使用总结

    SQL Tuning Advisor(STA)是Oracle数据库中的一个强大工具,用于优化SQL语句的性能。通过自动化的诊断过程,STA能够帮助数据库管理员(DBA)识别出低效的SQL语句,并提供改进建议。本文将详细介绍如何利用SQL ...

    Apress Oracle SQL Tuning with Oracle SQLTXPLAIN 2013

    《Apress Oracle SQL Tuning with Oracle SQLTXPLAIN 2013》这本书是关于使用Oracle提供的工具SQLTXPLAIN来优化SQL语句的专业指南。SQL优化是提高数据库性能的关键环节,而本书深入介绍了如何分析和解决Oracle SQL...

    高清彩版 oracle sql performance tuning and optimization

    标题提到的 "高清彩版 oracle sql performance tuning and optimization" 指的是一本关于Oracle SQL性能调优和优化的专业书籍。从标题中可以了解到,书籍强调的是“基数(Cardinalities)”在Oracle SQL性能调整中的...

    Oracle SQL Tuning with Oracle SQLTXPLAIN.pdf

    ### Oracle SQL Tuning with Oracle SQLTXPLAIN #### 引言 本书旨在介绍一款非常有用的工具——Oracle SQLTXPLAIN(简称SQLT)。对于从事Oracle数据库优化的人员来说,SQLT是必不可少且极为实用的一款工具,更重要...

    Tosska SQL Tuning Expert for Oracle

    Tosska SQL Tuning Expert for Oracle正是为了解决这一问题而诞生的专业工具,由知名IT专家杜老师RichardTo倾力打造,他不仅在ITPUB社区有着深厚的影响力,也曾担任Dell的首席工程师,拥有超过20年的SQL优化实战经验...

    oracle SQL性能优化

    3本经典oracle sql性能优化的的书,值得一看: Oracle.High.Performance.Tuning.for.9i.and.10g.chm Oracle性能优化技术内幕.pdf SQL Performance Tuning -0201791692.chm

Global site tag (gtag.js) - Google Analytics