oracle实用sql(3)--sql tuning advisor


点击(此处)折叠或打开

  1. --以下是sql tuning advisor调优sql常用脚本,通过coe_xfr_sql_profile调优参见:http://blog.itpub.net/28539951/viewspace-1603192/

  2. --os:centos 6.6
  3. --db:11.2.0.4

  4. --建测试表
  5. create table scott.t_test01 as select * from dba_objects;
  6. --插入数据
  7. insert into scott.t_test01 select * from scott.t_test01;
  8. commit;
  9. insert into scott.t_test01 select * from scott.t_test01;
  10. commit;
  11. insert into scott.t_test01 select * from scott.t_test01;
  12. commit;

  13. --建立生成sql tuning advisor
  14. DECLARE
  15.   ret_val VARCHAR2(4000);
  16.   sqltext CLOB;
  17. BEGIN
  18.   sqltext := 'select * from scott.t_test01 where owner=''SCOTT''';
  19.   --sql标识可以用sql_text也可以用sql_id
  20.   ret_val := DBMS_SQLTUNE.CREATE_TUNING_TASK(
  21.                 sql_text => sqltext,
  22.                 bind_list => NULL,
  23.                 user_name => 'SYS',
  24.                 scope => 'COMPREHENSIVE',
  25.                 time_limit => 1800,
  26.                 task_name => 'sql_tune_002',
  27.                 description => 'SQL Tuning Advisor Task');
  28.   Dbms_Sqltune.EXECUTE_TUNING_TASK(ret_val);
  29. End;

  30. --查看sql tuning advisor report
  31. select Dbms_Sqltune.REPORT_TUNING_TASK('sql_tune_002', 'TEXT', 'ALL') report from dual;
  32. /*
  33. GENERAL INFORMATION SECTION
  34. -------------------------------------------------------------------------------
  35. Tuning Task Name : sql_tune_002
  36. Tuning Task Owner : SYSTEM
  37. Tuning Task ID : 62
  38. Workload Type : Single SQL Statement
  39. Execution Count : 1
  40. Current Execution : EXEC_52
  41. Execution Type : TUNE SQL
  42. Scope : COMPREHENSIVE
  43. Time Limit(seconds): 1800
  44. Completion Status : COMPLETED
  45. Started at : 04/26/2016 19:53:42
  46. Completed at : 04/26/2016 19:53:43

  47. -------------------------------------------------------------------------------
  48. Schema Name: SYS
  49. SQL ID : 7z30ga5js6pvn
  50. SQL Text : select * from scott.t_test01 where owner='SCOTT'

  51. -------------------------------------------------------------------------------
  52. FINDINGS SECTION (2 findings)
  53. -------------------------------------------------------------------------------

  54. 1- Statistics Finding
  55. ---------------------
  56.   Table "SCOTT"."T_TEST01" was not analyzed.

  57.   Recommendation
  58.   --------------
  59.   - Consider collecting optimizer statistics for this table.
  60.     execute dbms_stats.gather_table_stats(ownname => 'SCOTT', tabname =>
  61.             'T_TEST01', estimate_percent => DBMS_STATS.AUTO_SAMPLE_SIZE,
  62.             method_opt => 'FOR ALL COLUMNS SIZE AUTO');

  63.   Rationale
  64.   ---------
  65.     The optimizer requires up-to-date statistics for the table in order to
  66.     select a good execution plan.

  67. 2- Index Finding (see explain plans section below)
  68. --------------------------------------------------
  69.   The execution plan of this statement can be improved by creating one or more
  70.   indices.

  71.   Recommendation (estimated benefit: 99.81%)
  72.   ------------------------------------------
  73.   - Consider running the Access Advisor to improve the physical schema design
  74.     or creating the recommended index.
  75.     create index SCOTT.IDX$$_003E0001 on SCOTT.T_TEST01("OWNER");

  76.   Rationale
  77.   ---------
  78.     Creating the recommended indices significantly improves the execution plan
  79.     of this statement. However, it might be preferable to run "Access Advisor"
  80.     using a representative SQL workload as opposed to a single statement. This
  81.     will allow to get comprehensive index recommendations which takes into
  82.     account index maintenance overhead and additional space consumption.

  83. -------------------------------------------------------------------------------
  84. EXPLAIN PLANS SECTION
  85. -------------------------------------------------------------------------------

  86. 1- Original
  87. -----------
  88. Plan hash value: 3092827266

  89.  
  90. ------------------------------------------------------------------------------
  91. | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
  92. ------------------------------------------------------------------------------
  93. | 0 | SELECT STATEMENT | | 111 | 22977 | 2749 (1)| 00:00:33 |
  94. |* 1 | TABLE ACCESS FULL| T_TEST01 | 111 | 22977 | 2749 (1)| 00:00:33 |
  95. ------------------------------------------------------------------------------
  96.  
  97. Query Block Name / Object Alias (identified by operation id):
  98. -------------------------------------------------------------
  99.  
  100.    1 - SEL$1 / T_TEST01@SEL$1
  101.  
  102. Predicate Information (identified by operation id):
  103. ---------------------------------------------------
  104.  
  105.    1 - filter("OWNER"='SCOTT')
  106.  
  107. Column Projection Information (identified by operation id):
  108. -----------------------------------------------------------
  109.  
  110.    1 - "OWNER"[VARCHAR2,30], "T_TEST01"."OBJECT_NAME"[VARCHAR2,128],
  111.        "T_TEST01"."SUBOBJECT_NAME"[VARCHAR2,30],
  112.        "T_TEST01"."OBJECT_ID"[NUMBER,22], "T_TEST01"."DATA_OBJECT_ID"[NUMBER,22
  113.        ], "T_TEST01"."OBJECT_TYPE"[VARCHAR2,19], "T_TEST01"."CREATED"[DATE,7],
  114.        "T_TEST01"."LAST_DDL_TIME"[DATE,7],
  115.        "T_TEST01"."TIMESTAMP"[VARCHAR2,19], "T_TEST01"."STATUS"[VARCHAR2,7],
  116.        "T_TEST01"."TEMPORARY"[VARCHAR2,1], "T_TEST01"."GENERATED"[VARCHAR2,1],
  117.        "T_TEST01"."SECONDARY"[VARCHAR2,1], "T_TEST01"."NAMESPACE"[NUMBER,22],
  118.        "T_TEST01"."EDITION_NAME"[VARCHAR2,30]
  119.  
  120. Note
  121. -----
  122.    - dynamic sampling used for this statement (level=2)

  123. 2- Using New Indices
  124. --------------------
  125. Plan hash value: 3193164626

  126.  
  127. ----------------------------------------------------------------------------------------------
  128. | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
  129. ----------------------------------------------------------------------------------------------
  130. | 0 | SELECT STATEMENT | | 56 | 11592 | 5 (0)| 00:00:01 |
  131. | 1 | TABLE ACCESS BY INDEX ROWID| T_TEST01 | 56 | 11592 | 5 (0)| 00:00:01 |
  132. |* 2 | INDEX RANGE SCAN | IDX$$_003E0001 | 56 | | 3 (0)| 00:00:01 |
  133. ----------------------------------------------------------------------------------------------
  134.  
  135. Query Block Name / Object Alias (identified by operation id):
  136. -------------------------------------------------------------
  137.  
  138.    1 - SEL$1 / T_TEST01@SEL$1
  139.    2 - SEL$1 / T_TEST01@SEL$1
  140.  
  141. Predicate Information (identified by operation id):
  142. ---------------------------------------------------
  143.  
  144.    2 - access("OWNER"='SCOTT')
  145.  
  146. Column Projection Information (identified by operation id):
  147. -----------------------------------------------------------
  148.  
  149.    1 - "OWNER"[VARCHAR2,30], "T_TEST01"."OBJECT_NAME"[VARCHAR2,128],
  150.        "T_TEST01"."SUBOBJECT_NAME"[VARCHAR2,30], "T_TEST01"."OBJECT_ID"[NUMBER,22],
  151.        "T_TEST01"."DATA_OBJECT_ID"[NUMBER,22], "T_TEST01"."OBJECT_TYPE"[VARCHAR2,19],
  152.        "T_TEST01"."CREATED"[DATE,7], "T_TEST01"."LAST_DDL_TIME"[DATE,7],
  153.        "T_TEST01"."TIMESTAMP"[VARCHAR2,19], "T_TEST01"."STATUS"[VARCHAR2,7],
  154.        "T_TEST01"."TEMPORARY"[VARCHAR2,1], "T_TEST01"."GENERATED"[VARCHAR2,1],
  155.        "T_TEST01"."SECONDARY"[VARCHAR2,1], "T_TEST01"."NAMESPACE"[NUMBER,22],
  156.        "T_TEST01"."EDITION_NAME"[VARCHAR2,30]
  157.    2 - "T_TEST01".ROWID[ROWID,10], "OWNER"[VARCHAR2,30]
  158.  
  159. Note
  160. -----
  161.    - dynamic sampling used for this statement (level=2)

  162. -------------------------------------------------------------------------------
  163. */


来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/28539951/viewspace-2113752/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/28539951/viewspace-2113752/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Oracle数据库SQL优化是提高查询性能和优化数据库响应时间的关键步骤。下面是一些常见的Oracle数据库SQL优化技巧: 1. 使用合适的索引:根据查询需求创建合适的索引,索引可以加速数据检索操作。确保索引的选择和创建是基于查询的列、表大小和查询频率等因素综合考虑的结果。 2. 优化查询语句:分析查询语句的执行计划,使用EXPLAIN PLAN工具或者使用Oracle提供的SQL调优工具,如SQL Tuning Advisor等来查看和优化查询计划。可以考虑重写查询语句,使用更有效的查询方式,避免不必要的连接、子查询和函数等。 3. 避免全表扫描:尽量使用索引访问数据,避免全表扫描。确保表有适当的索引,并且查询语句中使用索引列作为过滤条件。 4. 优化连接和子查询:对于连接操作,使用合适的连接方式,如INNER JOIN、LEFT JOIN等,并根据数据分布情况考虑连接顺序。对于子查询,可以考虑使用内联子查询或者存在性子查询来优化性能。 5. 使用合适的数据类型和大小:选择合适的数据类型和长度,避免过大或者不必要的列长度,减少存储和查询开销。 6. 统计信息更新:定期收集和更新表和索引的统计信息,保持统计信息的准确性,以便Oracle优化器能够进行更好的执行计划选择。 7. 优化物理存储结构:考虑使用分区表、索引组织表等物理存储结构来提高查询性能。合理设置表空间和数据文件大小,避免性能瓶颈。 8. 避免使用数据库隐式转换:在查询语句中避免使用隐式转换,确保查询语句中的数据类型一致,以避免性能损耗。 9. 避免过多的重复查询:对于重复查询的结果,可以考虑使用缓存或者临时表来避免重复计算。 10. 避免不必要的排序和聚合操作:尽量避免不必要的排序和聚合操作,不仅可以减少查询时间,还可以减轻服务器负载。 综上所述,通过合理的索引设计、优化查询语句、更新统计信息等手段,可以有效地提高Oracle数据库的SQL查询性能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值