- 浏览: 21617 次
- 性别:
- 来自: 杭州
最新评论
作者: fuyuncat
来源: www.HelloDBA.com
SQL优化器(SQL Tuning Advisor STA)是Oracle10g中推出的帮助DBA优化工具,它的特点是简单、智能,DBA值需要调用函数就可以给出一个性能很差的语句的优化结果。下面介绍一下它的使用。
使用STA一定要保证优化器是CBO模式下。
一、利用STA优化语句
对于问题语句的收集,可以通过Oracle10g的另一个自动化工具:数据库自动诊断监视工具(ADDM)。它的使用可以参照我的另一篇文章《Oracle10g数据库自动诊断监视工具(ADDM)使用指南》。
我们下面简单介绍一下如何优化一条找到的问题语句。正如前面所述说的,STA是用起来很简单(只要你会调用存储过程,都能使用这个工具),三个步骤就可以完成一次语句调优。
测试环境创建:
SQL> CREATE TABLE bigtab AS SELECT rownum as "id", a.* FROM dba_objects a;
Table created. SQL> create table smalltab as select rownum as "id", a.* FROM dba_tables a;
Table created.SQL> ALTER TABLE bigtab MODIFY (empno NUMBER);
Table altered. SQL> DECLARE 2 n NUMBER; 3 BEGIN 4 FOR n IN 1..100 5 LOOP 6 INSERT INTO bigtab SELECT rownum as "id", a.* FROM dba_objects a; 7 COMMIT; 8 END LOOP; 9 END;
/
PL/SQL procedure successfully completed.
这里创建一张大表和一张小表,并且都没有索引,下面执行一个查询:
SQL> set timing on
SQL> set autot on
SQL> select count(*) from bigtab a, smalltab b where a.object_name=b.table_name;
COUNT(*)
----------
135000
Elapsed: 00:00:05.59
Execution Plan
----------------------------------------------------------
Plan hash value: 3089226980
--------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
--------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | 36 | 3550 (2)| 00:00:43 |
| 1 | SORT AGGREGATE | | 1 | 36 | | |
|* 2 | HASH JOIN | | 155K| 5462K| 3550 (2)| 00:00:43 |
| 3 | TABLE ACCESS FULL| SMALLTAB | 1223 | 22014 | 11 (0)| 00:00:01 |
| 4 | TABLE ACCESS FULL| BIGTAB | 1205K| 20M| 3526 (1)| 00:00:43 |
--------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
2 - access("A"."OBJECT_NAME"="B"."TABLE_NAME")
Statistics
----------------------------------------------------------
0 recursive calls
0 db block gets
16013 consistent gets
14491 physical reads
0 redo size
412 bytes sent via SQL*Net to client
385 bytes received via SQL*Net from client
2 SQL*Net roundtrips to/from client
0 sorts (memory)
0 sorts (disk)
1 rows processed
可以看出这个语句执行性能很差:16013 consistent gets。
第一步:创建优化任务并执行
通过调用函数CREATE_TUNING_TASK来创建优化任务,调用存储过程EXECUTE_TUNING_TASK执行该任务:
SQL> set autot off
SQL> set timing off
SQL> DECLARE
2 my_task_name VARCHAR2(30);
3 my_sqltext CLOB;
4 BEGIN
5 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 task_name => 'tuning_sql_test',
12 description => 'Task to tune a query on a specified table');
13
14 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或comprehensive),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';
TASK_NAME STATUS
------------------------------ -----------
tuning_sql_test COMPLETED
第二步:查看优化结果
通过函数可以查看优化结果。
SQL> set long 10000
SQL> set longchunksize 1000
SQL> set linesize 100
SQL> SELECT DBMS_SQLTUNE.REPORT_TUNING_TASK( 'tuning_sql_test') from DUAL;
DBMS_SQLTUNE.REPORT_TUNING_TASK('TUNING_SQL_TEST')
----------------------------------------------------------------------------------------------------
GENERAL INFORMATION SECTION
-------------------------------------------------------------------------------
Tuning Task Name : tuning_sql_test
Tuning Task Owner : DEMO
Scope : COMPREHENSIVE
Time Limit(seconds) : 60
Completion Status : COMPLETED
Started at : 11/30/2005 13:16:43
Completed at : 11/30/2005 13:16:44
Number of Index Findings : 1
Schema Name: DEMO
SQL ID : 6p64dnnsqf9pm
SQL Text : select count(*) from bigtab a, smalltab b where
a.object_name=b.table_name
-------------------------------------------------------------------------------
FINDINGS SECTION (1 finding)
-------------------------------------------------------------------------------
1- Index Finding (see explain plans section below)
The execution plan of this statement can be improved by creating one or more
indices.
Recommendation (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 Access Advisor to improve the physical schema design
or creating the recommended index.
create index DEMO.IDX$$_06C50002 on DEMO.BIGTAB('OBJECT_NAME');
Rationale
---------
Creating the recommended indices significantly improves the execution plan
of this statement. However, it might be preferable to run "Access Advisor"
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 SECTION
-------------------------------------------------------------------------------
1- Original
-----------
Plan hash value: 3089226980
--------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
--------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | 36 | 3550 (2)| 00:00:43 |
| 1 | SORT AGGREGATE | | 1 | 36 | | |
|* 2 | HASH JOIN | | 155K| 5462K| 3550 (2)| 00:00:43 |
| 3 | TABLE ACCESS FULL| SMALLTAB | 1223 | 22014 | 11 (0)| 00:00:01 |
| 4 | TABLE ACCESS FULL| BIGTAB | 1205K| 20M| 3526 (1)| 00:00:43 |
--------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
2 - access("A"."OBJECT_NAME"="B"."TABLE_NAME")
2- Using New Indices
--------------------
Plan hash value: 494801882
-----------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
-----------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | 36 | 1108 (3)| 00:00:14 |
| 1 | SORT AGGREGATE | | 1 | 36 | | |
|* 2 | HASH JOIN | | 155K| 5462K| 1108 (3)| 00:00:14 |
| 3 | INDEX FAST FULL SCAN| IDX$$_06C50001 | 1223 | 22014 | 3 (0)| 00:00:01 |
| 4 | INDEX FAST FULL SCAN| IDX$$_06C50002 | 1205K| 20M| 1093 (2)| 00:00:14 |
-----------------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
2 - access("A"."OBJECT_NAME"="B"."TABLE_NAME")
-------------------------------------------------------------------------------
看一下这个优化建议报告:
第一部分是关于这次优化任务的基本信息:如任务名称、执行时间、范围、涉及到的语句等等。
第二部分是关于这次优化任务的所找到的问题以及给出的优化建议。前面先给出了问题描述:可以通过建立更多的所引来提高性能;然后是建议的具体内容:在表smalltab的字段table_name上创建索引,在表bigtab的字段object_name上创建索引;最后是相关注意事项:此次优化虽然给出了创建索引的建议,但是最好通过SQL访问建议器(SQL Access Advisor SAA)结合整个数据库的工作量来深入分析,那样就能给出考虑了索引维护和空间消耗等因素的更加合理的建议。
最后,报告还给出了原有的查询计划,以及采用优化建议以后的查询计划的对比。可以看出COST值大大下降。
发表评论
-
Java反射Reflection--运行时生成instance
2009-11-18 10:17 1361文章来自: 博客浙江(blog.zj.com) 原文参考:ht ... -
Java反射经典实例 Java Reflection
2009-11-18 10:12 779http://jeplove.blog.zj.com/blog ... -
JProfiler试用手记
2009-04-13 16:00 840JProfiler是一款Java的性能监控工具。可以查看当前应 ... -
优化SQL的另一种思维1 性能调整综述
2009-04-12 17:34 1301作者: Peak Wong, 出处:IT专家网, 责任编辑: ... -
JAVA基础--JAVA中的反射机制详解
2009-02-25 22:41 778JAVA反射机制 JAVA反射机制是在运行状态中,对于任 ... -
Java中int和Integer的区别详解
2009-02-23 21:18 1168Java中int和Integer关系是比较微妙的。关系如下: ... -
Portal(门户)是什么--IT术语
2009-02-23 21:12 3125Portal 的组成可以分为 ... -
StringBuilder类
2009-02-20 21:40 13211.3 StringBuilder类 一个String对象 ... -
Java的内存泄漏
2009-02-20 18:13 794一 问题的提出 Java ... -
JDK核心API:Java1.5语言新特性简单总结
2009-02-20 18:05 10241. 自动装箱与拆箱 对应C# 例1.1 ... -
优秀Java程序员必须了解GC的工作原理
2009-02-20 17:57 895一个优秀的Java程序员必 ... -
转:大型互联网网站架构心得之一
2009-02-06 22:10 1135我们知道,对于一个大 ... -
一 CVS服务器的安装:
2008-12-28 18:43 1383一 CVS服务器的安装: 1。查看你的操作系统上是否安装了C ... -
Jive论坛与Spring框架的经典结合
2008-12-28 15:42 975没有一种新技术是凭空诞生的,它的萌芽或胚胎总是或多或少显现于以 ... -
开源技术分析:AOP和Spring事务处理
2008-12-27 22:01 793一.为什么要用框架 ...
相关推荐
SQL Tuning Advisor是Oracle 11g中的一个关键组件,它能够自动分析SQL语句的执行计划,并提供优化建议。STA的工作原理主要是通过模拟不同的执行计划来评估其对性能的影响,从而找出最佳方案。 ##### 2. SQL Access ...
### Oracle 10G 性能调整与优化 #### 一、引言 在数据库管理领域,Oracle 10G 是一个重要的版本,它不仅带来了众多功能上的改进,还为性能优化提供了更多可能性。《Oracle 10G性能调整与优化》这本书由Oracle...
该课程旨在帮助用户理解并掌握如何有效地优化 SQL 语句在 Oracle 10g 数据库中的性能。通过本课程的学习,参与者将能够识别、分析和解决 SQL 性能问题,从而提高数据库的整体响应速度和吞吐量。 #### 课程目标 - **...
Oracle SQLHC,全称为SQL Health Check,是一款针对Oracle数据库的SQL优化分析工具。它通过深入分析SQL查询的执行计划和性能指标,帮助DBA(数据库管理员)找出性能瓶颈,优化数据库查询,提升系统整体性能。 SQL...
STA 是 Db10g 中的一个自动化工具,它可以自动识别并优化执行计划不佳的 SQL 语句。STA 会分析 SQL 语句的执行情况,并提供改进建议。 ### 四、高级 SQL Tuning 技巧 #### 1. 使用 Bind Peak Bind Peak 是一种...
通过对上述内容的学习,我们了解到在ORACLE 10G环境下进行SQL调优的重要性,以及如何通过各种技术和工具来优化SQL性能。这些知识点不仅有助于提升个人的技术能力,也能帮助企业提高数据库的整体性能和稳定性。 总之...
文档为oracle调优的STA无脑命令,直接安装命令贴到sqlplus里面就好,sql_id号从awr报告里面获得,想调优的语句找到sql_id,替换到文档里面的sql_id位置,最后无脑贴进去就可以使用STA调优助手了。
6. **SQL优化顾问(SQL Tuning Advisor, STA)**:这个特性提供了自动化SQL调优,分析查询性能并提供改进建议,包括重写SQL语句、创建索引等。 7. **安全管理增强**:10g引入了统一认证、访问控制和审计功能,加强...
其次,SQL Tuning Advisor (STA) 是用于优化SQL查询的工具。它能够分析慢速执行的SQL语句,提供改进建议,如创建索引、修改查询语句或者调整执行计划。通过应用这些建议,可以显著提高查询速度。 再者,Database ...
- **SQL Tuning Advisor (STA)**:自动分析SQL语句并提出优化建议。 - **SQL Access Advisor (SAA)**:提供关于索引、分区等结构调整的建议。 - **SQL Performance Analyzer (SPA)**:评估SQL语句性能的变化情况。 ...
1. **自动检测**:利用如ADDM(Automatic Database Diagnostic Monitor)等自动化工具来识别性能较差的SQL语句。 2. **手动检查**:通过查看V$视图(如V$SQL、V$SQLAREA等)以及Statspack报告,来定位那些执行时间过...
3. **SQL Tuning Advisor (STA)**:利用Oracle的SQL Tuning Advisor工具对性能较差的SQL进行自动优化建议。 #### 六、应用层面优化 1. **批处理**:尽可能将多个操作合并成一个批处理操作,减少网络传输次数。 2. ...
SQL Tuning Advisor(STA)是Oracle数据库中的一个强大工具,用于优化SQL语句的性能。通过自动化的诊断过程,STA能够帮助数据库管理员(DBA)识别出低效的SQL语句,并提供改进建议。本文将详细介绍如何利用SQL ...
Oracle 10g之后的优化器支持两种模式,一个是normal模式,一个是tuning模式。在大多数情况下,优化器处于normal模式。基于CBO的normal模式只考虑很小部分的执行计划集合用于选择哪个执行计划,因为它需要在尽可能短...
Oracle10g数据库自动诊断监视工具(ADDM)是Oracle数据库10g版本引入的一个重要特性,用于自动化数据库性能问题的诊断和优化建议。ADDM与SQL优化建议工具(SQL Tuning Advisor, STA)共同工作,极大地减轻了DBA的...
9. **Performance Enhancements**:Oracle 10g在查询优化器、并行执行、内存管理等方面做了很多改进,提高了数据库的整体性能。 10. **Management Pack**:提供了一系列的管理工具和打包解决方案,如Database ...
### SQL Turning Advise (STA) 的使用 #### 一、简介 SQL Turning Advise (STA) 是Oracle数据库中的...通过合理利用STA提供的建议,不仅可以减少手动优化SQL语句的时间消耗,还能显著提高系统的整体响应速度和稳定性。
- **SQL Tuning Advisor**和**SQL Access Advisor**:这两个工具都是Oracle企业管理器的一部分,主要用于优化SQL语句和数据访问策略。 - **Memory Advisor**:同样作为企业管理器的功能之一,用于监控和优化数据库...
- `start`、`sta`、`@`:执行指定文件中的SQL语句,不同写法但效果相同。 - `edit`或`ed`:将sqlplus缓冲区内容复制到afiedt.buf文件,并启动默认文本编辑器。 - `spool`:将sqlplus输出结果重定向到文件,可以...