利用Oracle 10g SQL优化器优化语句.docx
《利用Oracle 10g SQL优化器优化语句.docx》由会员分享,可在线阅读,更多相关《利用Oracle 10g SQL优化器优化语句.docx(21页珍藏版)》请在三一办公上搜索。
1、SQL优化器(SQL Tuning Advisor STA)是Oracle10g中推出的帮助DBA优化工具, 它的特点是简单、智能,DBA值需要调用函数就可以给出一个性能很差的语句的优化结果。 下面介绍一下它的使用。使用STA 一定要保证优化器是CBO模式下。一、利用STA优化语句对于问题语句的收集,可以通过Oracle10g的另一个自动化工具:数据库自动诊断 监视工具(ADDM)。它的使用可以参照我的另一篇文章Oracle10g数据库自动诊断监视工 具(ADDM )使用指南。我们下面简单介绍一下如何优化一条找到的问题语句。正如前面所述说的,STA是 用起来很简单(只要你会调用存储过程,都能使
2、用这个工具),三个步骤就可以完成一次语 句调优。执行DBMS_SQLTUNE包进行sql优化需要有advisor的权限:SYSninggrant advisor to ning;Grant succeeded.使用DBMS_SQLTUNE包进行SQL优化,大致可以分为四个步骤:创建优化任务执行优化任务显示优化任务的结果按照建议执行优化测试环境创建:SQL CREATE TABLE bigtab AS SELECT rownum as id, a.* FROM dba_objects a;Table created.SQL create table smalltab as select rown
3、um as id, a.* FROM dba_tables a;Table created.SQL ALTER TABLE bigtab MODIFY (empno NUMBER);Table altered.SQL DECLARE2 n NUMBER;3 BEGIN4 FOR n IN 1.100LOOPINSERT INTO bigtab SELECT rownum as id, a.* FROM dba_objects a;COMMIT;8 END LOOP;9 END;PL/SQL procedure successfully completed.这里创建一张大表和一张小表,并且都没有
4、索引,下面执彳丁一个查询:SQL set timing onSQL set autot onSQL select count(*) from bigtab a, smalltab b where a.object_name=b.table_name;Plan hash value: 3089226980I 0 I SELECT STATEMENT |I 11 SORT AGGREGATE |I 1 I 36 I 3550 (2)I 00:00:431I 11 361 I II* 21 HASH JOINI 155KI 5462KI 3550 (2)100:00:431I 31 TABLE AC
5、CESS FULL SMALLTAB | 12231 22014 |11 (0)I 00:00:011I 41 TABLE ACCESS FULLI BIGTAB | 1205KI 20MI 3526 (1)100:00:431Predicate Information (identified by operation id):2 - access(A.OBJECT_NAME=B.TABLE_NAME)Statistics0 recursive calls0 db block gets16013 consistent gets14491 physical reads0 redo size412
6、 bytes sent via SQL*Net to client385 bytes received via SQL*Net from client2 SQL*Net roundtrips to/from client0 sorts (memory)0 sorts (disk)1 rows processed可以看出这个语句执行性能很差:16013 consistent gets。第一步:创建优化任务并执行通过调用函数CREATE_TUNING_TASK来创建优化任务,调用存储过程 EXECUTE_TUNING_TASK 执行该任务:SQL set autot offSQL set timi
7、ng offSQL DECLARE2 my_task_name VARCHAR2(30);3 my_sqltext CLOB;4 BEGIN5 my_sqltext := select count(*) from bigtab a, smalltab b where a.object_name=b.table_name;6 my_task_name := DBMS_SQLTUNE.CREATE_TUNING_TASK(7 sql_text = my_sqltext,8 user_name = DEMO,9 scope= COMPREHENSIVE,10 time_limit = 60,11 t
8、ask_name = tuning_sql_test,12 description = Task to tune a query on a specified table);1314 DBMS_SQLTUNE.EXECUTE_TUNING_TASK( task_name = tuning_sql_test);15 END;16 /PL/SQL procedure successfully completed.在函数CREATE_TUNING_TASK, sql_text是需要优化的语句,user_name是该语句通 过哪个用户执行,scope是优化范围(limited或comprehensiv
9、e), time_limit优化过程的 时间限制,task_name优化任务名称,description优化任务描述。可以通过视图USER_ADVISOR_LOG和USER_ADVISOR_LOG来查看创建过的优化任务。SQL select task_name, status from USER_ADVISOR_LOG where task_name=tuning_sql_ test;ITASK_NAMESTATUStuning_sql_testCOMPLETED第二步:查看优化结果通过函数可以查看优化结果。SQL set long 10000SQL set longchunksize 100
10、0SQL set linesize 100SQL SELECTDBMS_SQLTUNE.REPORT_TUNING_TASK( tuning_sql_test) from DUAL;DBMS_SQLTUNE.REPORT_TUNING_TASK(TUNING_SQL_TEST)GENERAL INFORMATION SECTION:tuning_sql_test:DEMOTuning Task NameTuning Task OwnerScope: COMPREHENSIVETime Limit(seconds)Completion StatusStarted at:60:COMPLETED:
11、11/30/2005 13:16:43Completed at:11/30/2005 13:16:44Number of Index Findings : 1ISchema Name: DEMOSQL ID : 6p64dnnsqf9pmSQL Text : select count(*) from bigtab a, smalltab b wherea.object_name=b.table_nameFINDINGS SECTION (1 finding)1- Index Finding (see explain plans section below)The execution plan
12、of this statement can be improved by creating one or more indices.IRecommendation (estimated benefit: 100%)-Consider running the Access Advisor to improve the physical schema design or creating the recommended index.create index DEMO.IDX$_06C50001 on DEMO.SMALLTAB(TABLE_NAME);-Consider running the A
13、ccess Advisor to improve the physical schema design or creating the recommended index.create index DEMO.IDX$_06C50002 on DEMO.BIGTAB(OBJECT_NAME);RationaleCreating the recommended indices significantly improves the execution plan of this statement. However, it might be preferable to run Access Advis
14、or using a representative SQL workload as opposed to a single statement. This will allow to get comprehensive index recommendations which takes into account index maintenance overhead and additional space consumption.EXPLAIN PLANS SECTION1- OriginalPlan hash value: 3089226980I Id I Operation / Name
15、/ Rows / Bytes / Cost (%CPU)I Time /I 0 I SELECT STATEMENT II 11 SORT AGGREGATE II 1 I 361 3550 (2)100:00:43 /I 11 361/* 2 / HASH JOINI 155KI 5462KI 3550 (2)100:00:431/ 31 TABLE ACCESS FULLI SMALLTAB I 1223122014 I 11 (0)I 00:00:011TABLE ACCESS FULLI BIGTAB I 1205KI 20MI 3526 (1)I 00:00:431Predicate
16、 Information (identified by operation id):2 - access(A.OBJECT_NAME=B.TABLE_NAME)2- Using New IndicesPlan hash value: 494801882I Id I OperationI NameI Rows I Bytes I Cost (%CPU)I Time II 1 I 361 1108 (3)100:00:141I 1 I 361 I II 0 I SELECT STATEMENT II 11 SORT AGGREGATE II* 21 HASH JOINII 155KI 5462KI
17、 1108 (3)100:00:141I 31 INDEX FAST FULL SCAN IDX$06C500011 1223122014 I 3 (0)I 00:00:011I 4 I INDEX FAST FULL SCANI IDX$_06C500021 1205KI 20MI 1093 (2)I 00:00:14 IPredicate Information (identified by operation id):2 - access(A.OBJECT_NAME=B.TABLE_NAME)看一下这个优化建议报告:第一部分是关于这次优化任务的基本信息:如任务名称、执行时间、范围、涉及到
18、 的语句等等。第二部分是关于这次优化任务的所找到的问题以及给出的优化建议。前面先给出了 问题描述:可以通过建立更多的所引来提高性能;然后是建议的具体内容:在表smalltab 的字段table_name上创建索引,在表bigtab的字段object_name上创建索引;最后是相关 注意事项:此次优化虽然给出了创建索引的建议,但是最好通过SQL访问建议器(SQL Access Advisor SAA)结合整个数据库的工作量来深入分析,那样就能给出考虑了索引维护和空间消 耗等因素的更加合理的建议。最后,报告还给出了原有的查询计划,以及采用优化建议以后的查询计划的对比。 可以看出COST值大大下降。
19、第三步:按照优化建议进行优化首先要说明一点的是,最好不要直接按照优化器给出的建议直接优化。因为像建索 引这种操作影响可不是这一条语句。二是可以利用sql profile这对某条语句优化或者针对某 些会话进行优化(下一章会给出sql profile如何使用)。我们这里只是验证一下优化建议的效 果。按照建议,创建两个索引:SQL create index smalltab_idx1 on smalltab(table_name);IIndex created.SQL create index bigtab_idx1 on bigtab(object_name);Index created.SQL
20、analyze table smalltab compute statistics;Table analyzed.SQL analyze table bigtab compute statistics;Table analyzed.SQL set timing onSQL set autot onSQL select count(*) from bigtab a, smalltab b where a.object_name=b.table_name;Plan hash value: 2594317117I/ Id I Operation / Name / Rows / Bytes / Cos
21、t (%CPU)I Time /I 0 / SELECT STATEMENT/1 / 36 / 1119 (3)/ 00:00:14 / 1 / SORT AGGREGATE /1 / 36 /* 2 / HASH JOIN/ 155K/ 5463K/ 1119 (3)/ 00:00:14 / 3 / INDEX FAST FULL SCAN/ SMALLTAB_IDX1 / 1223 / 22014 / 3 (0)/ 00:00:01 / 4 / INDEX FAST FULL SCAN/ BIGTAB_IDX1 / 1205K/ 20M/ 1104 (2)/ 00:00:14 /Predi
22、cate Information (identified by operation id):2 - access(A”.”OBJECT_NAME=B”.”TABLE_NAME)Statistics332 recursive calls0 db block gets4999 consistent gets1 physical reads0 redo size412 bytes sent via SQL*Net to client385 bytes received via SQL*Net from client2 SQL*Net roundtrips to/from client12 sorts
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 利用Oracle 10g SQL优化器优化语句 利用 Oracle 10 SQL 优化 语句

链接地址:https://www.31ppt.com/p-5044242.html