oracle 调优
- 格式:doc
- 大小:39.00 KB
- 文档页数:6
oracle数据库性能调优⼀:注意WHERE⼦句中的连接顺序:ORACLE采⽤⾃下⽽上的顺序解析WHERE⼦句,根据这个原理,表之间的连接必须写在其他WHERE条件之前, 那些可以过滤掉最⼤数量记录的条件必须写在WHERE⼦句的末尾.尤其是“主键ID=?”这样的条件。
⼆: SELECT⼦句中避免使⽤ ‘ * ‘:ORACLE在解析的过程中, 会将'*' 依次转换成所有的列名, 这个⼯作是通过查询数据字典完成的, 这意味着将耗费更多的时间。
简单地讲,语句执⾏的时间越短越好(尤其对于系统的终端⽤户来说)。
⽽对于查询语句,由于全表扫描读取的数据多,尤其是对于⼤型表不仅查询速度慢,⽽且对磁盘IO造成⼤的压⼒,通常都要避免,⽽避免的⽅式通常是使⽤索引Index。
三:使⽤索引的优势与代价。
优势:1)索引是表的⼀个概念部分,⽤来提⾼检索数据的效率,ORACLE使⽤了⼀个复杂的⾃平衡B-tree结构. 通常,通过索引查询数据⽐全表扫描要快. 当ORACLE找出执⾏查询和Update语句的最佳路径时, ORACLE优化器将使⽤索引. 同样在联结多个表时使⽤索引也可以提⾼效率. 2)另⼀个使⽤索引的好处是,它提供了主键(primary key)的唯⼀性验证.。
那些LONG或LONG RAW数据类型, 你可以索引⼏乎所有的列. 通常, 在⼤型表中使⽤索引特别有效. 当然,你也会发现, 在扫描⼩表时,使⽤索引同样能提⾼效率.代价:虽然使⽤索引能得到查询效率的提⾼,但是我们也必须注意到它的代价. 索引需要空间来存储,也需要定期维护, 每当有记录在表中增减或索引列被修改时, 索引本⾝也会被修改. 这意味着每条记录的INSERT , DELETE , UPDATE将为此多付出4 , 5 次的磁盘I/O . 因为索引需要额外的存储空间和处理,那些不必要的索引反⽽会使查询反应时间变慢.。
⽽且表越⼤,影响越严重。
使⽤索引需要注意的地⽅:1、避免在索引列上使⽤NOT , 我们要避免在索引列上使⽤NOT, NOT会产⽣在和在索引列上使⽤函数相同的影响. 当ORACLE”遇到”NOT,他就会停⽌使⽤索引转⽽执⾏全表扫描.2、避免在索引列上使⽤计算.WHERE⼦句中,如果索引列是函数的⼀部分.优化器将不使⽤索引⽽使⽤全表扫描.举例:代码如下:低效:SELECT … FROM DEPT WHERE SAL * 12 > 25000;⾼效:SELECT … FROM DEPT WHERE SAL > 25000/12;3、避免在索引列上使⽤IS NULL和IS NOT NULL避免在索引中使⽤任何可以为空的列,ORACLE性能上将⽆法使⽤该索引.对于单列索引,如果列包含空值,索引中将不存在此记录. 对于复合索引,如果每个列都为空,索引中同样不存在此记录. 如果⾄少有⼀个列不为空,则记录存在于索引中.举例: 如果唯⼀性索引建⽴在表的A列和B列上, 并且表中存在⼀条记录的A,B值为(123,null) , ORACLE将不接受下⼀条具有相同A,B值(123,null)的记录(插⼊). 然⽽如果所有的索引列都为空,ORACLE将认为整个键值为空⽽空不等于空. 因此你可以插⼊1000 条具有相同键值的记录,当然它们都是空! 因为空值不存在于索引列中,所以WHERE⼦句中对索引列进⾏空值⽐较将使ORACLE停⽤该索引.代码如下:低效:(索引失效) SELECT … FROM DEPARTMENT WHERE DEPT_CODE IS NOT NULL;⾼效:(索引有效) SELECT … FROM DEPARTMENT WHERE DEPT_CODE >=0;4、注意通配符%的影响使⽤通配符的情况下Oracle可能会停⽤该索引。
一、修改oracle系统参数建库时选择手工建库,设置db_block_size=16k (一旦建库,无法修改)alter system set sga_max_size=1640M scope=spfile;(Total physical RAM *80%*50%)alter system set sga_target=1640M scope=spfile;alter system set pga_aggregate_target=650M scope=spfile;(Total physical RAM *80%*20%)alter system set pre_page_sga=true scope=spfile;alter system set shared_pool_size=128M scope=spfile;alter system set open_cursors=2000 scope=spfile;alter system set session_cached_cursors=50 scope=spfile;alter system set cursor_sharing=exact scope=spfile;alter system set cursor_space_for_time=true scope=spfile;SDE的性能取决于:第一操作系统的性能;第二是Oracle的性能,再次是SDE的性能。
第一:操作系统,无非是内存、CPU、带宽等。
能够有待提高的地址:第一、硬件升级;第二、磁盘速度,用RAID集中存储会比效劳器硬盘速度快。
第三、做LB,负载均衡。
比如能够用Orcle RAC。
第二:Oracle的性能Oracle能够调优的地址就太多了,有时数据库效劳器本身硬件专门好,可是oracle的参数设置不够好,Oracle也不能专门好地发挥效劳器的硬件性能。
我本身对Oracle只是入门水平,也就简单地给点建议:、OS的参数设置内核参数名说明bufpages 对buffer空间不按静态分派,采纳动态分派,使bufpages值随nbuf一路对buffer空间进行动态分派。
oracle 之使⽤OracleDeveloper 对SQL 进⾏简单调优(⼆)使⽤Oracle Developer 对SQL 进⾏简单进⾏简单调优调优Oracle Developer 是Oracle 提供的免费数据库连接⼯具,⾏内数据中⼼⽣产操作间默认使⽤该⼯具执⾏SQL ,如遇到现场需要对⽣产SQL 进⾏优化查询的需要熟悉Oracle Developer 的基本使⽤,本⽂结合Oracle Developer ⼯具展⽰如何查看SQL ,如果进⾏基本优化。
⼀、 Oracle Developer 和 Oracle 命令1. Oracle DeveloperSQL 解释Oracle Developer ⼯具⾥⾯的“解释”功能只针对当前的sql 进⾏了⼀个预估的资源消耗以及执⾏路径,参考数据是系统⾥存在的表统计信息。
结果显⽰与实际执⾏可能存在差异,且表的详细信息,在其它功能下显⽰更为详细。
SQL 优化指导Oracle Developer ⼯具⾥⾯的sql 优化指导功能,对要优化分析的sql 进⾏了真实的执⾏,该功能展⽰的结果,包含了部分解释功能的结果,也就是根据表⾥⾯的统计信息预估的执⾏计划;它⼀般还包含优化建议;另外还展⽰了该sql 的实际执⾏计划和并⾏执⾏时的sql 性能结果。
SQL 跟踪Oracle Developer ⼯具⾥⾯的sql 跟踪功能,对要优化分析的sql 进⾏了实际的执⾏,详细的展⽰了执⾏过程中对 索引 CPU 缓存IO 和块的改变情况,也列出了执⾏过程中涉及的数据量和资源消耗;此功能包含了sql 解释中的表统计信息。
2. Oracle 命令autotraceOracle 命令 autotrace 是分析sql 的真实执⾏计划,查看sql 执⾏效率的⼀个⽐较简单⼜⽅便的⼯具。
它实际上是对sql 实际执⾏过程信息的⼀个收集和信息统计。
set autotrace on 开启autotrace ,后⾯执⾏sql 语句会⾃动显⽰sql 执⾏结果和跟踪信息。
性能调优---------------------方法:一、检查日志是否有错误二、检查参数是否设置正确三、检查系统IO、CPU、内存等利用率,查看哪些占用较高四、检查哪些SQL语句大量占用IO或CPU权衡性能与安全的方面:一、多个控制文件二、一个日志文件组中有多个日志文件三、频繁的执行检查点四、备份数据文件五、频繁的归档六、块检查七、同时执行操作与统计性能调优工具:查看ALTER.LOG中的信息:1、用/ORA- 能查找文件中的错误信息2、要想让ALTER.LOG文件中产生检查点开始与结束信息,得修改参数LOG_CHECKPOINTS_TO_ALERT,将之修改为TRUE。
默认为FALSE。
SQL>ALTER SYSTEM SET LOG_CHECKPOINTS_TO_ALERT = TRUE SCOPE=BOTH;在用户UDUMP目录下的文件中产生监控用户执行信息:方法1、监控自己的操作。
在自己的session中设置参数,这样就能在用户udump目录下生成执行的SQL语句信息SQL>ALTER SESSION SET SQL_TRACE=TRUE;在pl/sql或者sqlplus中,打开一个sql_window。
(1)先运行:alter session set sql_trace=true;(2)再运行你那个返回结果不正确的SQL(3)再运行:alter session set sql_trace=false;(4)马上登陆到机器上,到$ORACLE_BASE/admin/sid/udump目录下。
(5)找到刚生成的.trc文件(假设文件名是 xxx.trc),执行命令转储跟踪文件:tkprof xxx.trc aa.txt。
查看aa.txt文件。
这个文件里面有执行计划。
看看执行计划每一步返回的结果集记录数是不是正确。
方法2、SYS用户监控别的用户执行情况方法3、对所有SESSION进行监控SQL>ALTER SESSION SET SQL_TRACE=TURE;安装STATSPACK一、创建表空间,最少100M二、安装在安装时默认创建了一个用户PERFSTAT,所以密码也可以输入这个选择要将快照存放于哪个表空间使用STATSPACK手动执行生成一次快照,间隔一般为10几分钟为益,中间不要有停机。
千里之行,始于足下。
Oracle数据库参数优化Oracle数据库参数优化是指通过调整数据库的配置参数,提高数据库的性能和稳定性。
下面是一些常见的Oracle数据库参数优化技巧:1. SGA参数优化:- 调整sga_target参数以控制SGA的大小。
SGA包括数据库缓冲区、共享池、重做日志缓冲区等,适当调整SGA的大小可以减少IO操作,提高数据库性能。
- 调整db_cache_size参数以增大数据库缓冲区的大小,提高数据块的访问速度。
- 调整shared_pool_size参数以增大共享池的大小,提高SQL语句的解析和执行效率。
2. PGA参数优化:- 调整pga_aggregate_target参数以控制PGA的大小。
PGA是用于处理SQL查询和排序的内存区域,适当调整PGA的大小可以减少磁盘IO操作,提高查询和排序的性能。
3. Redo日志参数优化:- 调整log_buffer参数以增大重做日志缓冲区的大小,减少频繁的重做日志刷新操作,提高数据库的写入性能。
- 调整log_checkpoint_timeout参数以控制重做日志刷新的频率,避免过于频繁的刷新。
4. 并行处理参数优化:- 调整parallel_max_servers参数以增大并行处理的资源限制,提高并行查询和并行DML操作的性能。
第1页/共2页锲而不舍,金石可镂。
- 调整parallel_min_servers参数以设置最小的并行处理资源数,避免并行操作的启动延迟。
5. SQL优化:- 使用合适的索引和优化的SQL语句,优化查询的执行计划。
- 使用绑定变量而不是直接将参数传递到SQL语句中,避免SQL重解析,提高性能。
6. 服务器参数优化:- 调整processes参数以增加数据库的并发连接数。
- 调整sessions参数以控制数据库的最大会话数。
- 调整open_cursors参数以增大打开游标的数量,避免游标溢出。
以上是一些常见的Oracle数据库参数优化技巧,但具体的优化策略需要根据实际情况进行调整,可以参考Oracle官方文档和专业的DBA建议。
Oracle 性能优化目录1.Oracle优化概述 (2)2.访问Table的方式 (2)3.索引优化 (3)4.SQL语句的优化 (3)4.1.共享SQL语句 (3)4.2.FROM子句的表名顺序 (4)4.3.WHERE子句中的连接顺序 (5)4.4.SELECT子句中避免使用' * ' (5)4.5.减少访问数据库的次数 (5)4.6.使用DECODE函数来减少处理时间 (5)4.7.整合简单,无关联的数据库访问 (5)4.8.数据删除用TRUNCATE替代DELETE (5)4.9.尽量多使用COMMIT (6)4.10.计算记录条数 (6)4.11.用WHERE子句替换HA VING子句 (6)4.12.减少对表的查询 (6)4.13.通过内部函数提高SQL效率 (6)4.14.使用表的别名(Alias) (6)4.15.用EXISTS替代IN (6)4.16.用NOT EXISTS替代NOT IN (7)4.17.用表连接替换EXISTS (7)4.18.用EXISTS替换DISTINCT (7)4.19.用索引提高效率 (7)4.20.用“>=”替代“>” (7)4.21.用UNION替换OR (适用于索引列) (7)4.22.用UNION ALL 替换UNION ( 如果有可能的话): (8)4.23.避免在索引列上使用IS NULL和IS NOT NULL (8)4.24.需要注意WHERE条件中不使用索引的情况 (8)4.25.避免在索引列上使用函数 (9)4.26.减少排序语句 (9)4.27.优化GROUP BY: (9)1.Oracle优化概述Oracle可以从以下几个方面进行优化:(1)应用程序级调优:* SQL语句调优* 管理变化调优(2)实例级调优* 内存* 数据结构* 实例配置(3)操作系统交互* I/O* SWAP* Parameters2.访问Table的方式ORACLE 采用两种访问表中记录的方式:A、全表扫描全表扫描就是顺序地访问表中每条记录。
oracle性能优化面试题一、概述Oracle性能优化是数据库管理中的重要环节,通过合理的调整和优化,可以提升数据库的运行效率和响应速度,提高系统的稳定性和可用性。
在面试中,常常会涉及到Oracle性能优化相关的问题,下面是一些常见的Oracle性能优化面试题。
二、索引优化1. 请说明什么是索引?索引是一种特殊的数据库对象,它能够加快数据库的查询速度。
索引由一个或多个列组成,它们的值会按照一定的顺序进行排序,并建立索引数据结构以支持快速查找。
2. 如何确定何时创建索引?创建索引需要权衡查询的速度和更新的效率。
一般来说,当查询的频率远远大于更新的频率时,可以考虑创建索引。
同时也需要考虑查询的字段是否经常被使用,以及查询的覆盖度等因素。
3. 请说明常见的索引类型?常见的索引类型包括唯一索引、非唯一索引、主键索引、聚簇索引和非聚簇索引等。
4. 如何选择合适的索引?选择合适的索引需要考虑查询的频率、更新的频率、查询的覆盖度等因素。
同时还需要考虑索引的大小以及对于查询的影响。
三、SQL优化1. 请说明常见的SQL调优手段?常见的SQL调优手段包括使用合适的索引、优化SQL语句的写法、使用合适的连接方式、减少数据库的访问次数等。
2. 如何使用执行计划进行SQL优化?执行计划是Oracle数据库为了优化查询语句而生成的查询执行计划,其中包含了查询的操作步骤、连接方式、访问路径等信息。
可以通过查看执行计划来判断查询是否需要进行优化,并通过优化查询的方式来提升性能。
3. 如何优化大表查询?优化大表查询可以通过分页查询、增加条件过滤、创建合适的索引等方式来进行。
同时也可以考虑对大表进行分区或者分表的方式来提高查询效率。
四、资源优化1. 如何优化内存资源?优化内存资源可以通过调整SGA和PGA的大小来实现。
SGA包括共享池、数据库缓存和重做日志缓冲等,可以通过调整参数来合理分配内存。
PGA是为每个会话分配的私有内存区域,可以通过调整PGA_AGGREGATE_TARGET参数来优化。
ORACLE数据库性能调优课程说明一、课程介绍本课程根据Oracle数据库在我国企事业单位信息化建设中的战略影响作用,结合国内外成熟理论体系与众多企事业单位的信息化实际情况,重点关注Oracle 数据库在性能诊断和调优等方面的内容,帮助用户建立性能调优的整体方案及介绍具体实施的可行方法,有效解决用户在使用Oracle数据库中遇到的问题。
二、预期目标通过本课程的学习,使学员掌握Oracle数据库调优的思路和技巧、掌握多种优化工具的使用和优化方法,能够进行性能故障分析,掌握各种优化算法的优劣,根据应用需求选择合适的算法等等。
三、培训对象各行政单位、企事业单位、部队、学校、城市公共服务系统、大型银行等从事信息系统开发、网络建设的数据信息主管、技术总监,数据库管理、数据分析、网络维护的相关人员等。
四、预备知识●Windows操作系统使用经验●数据库基础知识五、授课时间4天6小时/天六、具体课程安排模块内容第一单元1、Oracle10G体系架构2、数据库应用调优数据库优化的总体思路和原则,从整体上对性能优化的各个阶段进行分析描述,确定性能优化的基本方法3、优化工具●最根本的性能信息工具:数据库数据字典和动态性能视图●Alert Log与Trace Files对性能故障诊断的帮助●诊断性能问题的法宝:Statspack与awr●Oracle性能诊断的又一利器:等待事件●10g新增加的自动化监控、调优工具——ADDM●基于自动化收集的性能指导工具介绍第二单元1、SGA的内存调整动态的SGA与10g自动管理的SGA2、数据高速缓存区的优化数据高速缓存区的性能指标和判断依据,以及如何在各种情况下执行针对性的优化工作3、共享池的优化共享池的库高速缓存、字典高速缓存的性能指标和判断依据,以及如何进行各种情况的优化工作4、其他SGA组件的优化重做日志缓冲区的优化考虑以及各个内存区大小的经验判断方法5、数据文件I/O的优化数据库数据文件、重做日志文件、归档文件的I/O性能特点分析和优化原则,存储级的I/O性能考虑,检测点的原理及优化,使用多DBWR进程增加I/O 能力,异步I/O的性能考虑,LGWR与ARC进程的优化,加速归档的方法第三单元1、锁存器(LATCH)竞争优化2、锁竞争的解决3、回滚段竞争优化判断回滚段竞争以及如何解决回滚段竞争,对回滚段使用中Ora-01555故障的分析与处理4、应用存储参数的优化5、选择合适的数据存储方法●了解数据库应用的特点,知道各种数据存储的方式对性能的影响,合理的选择分区表、索引组织表、聚簇表或者普通表存储数据●对用于存储海量数据的分区表的概念和维护进行详细描述,确定如何使用分区表加快查询性能第四单元1、SQL语句的处理过程2、SQL语句解析的优化3、排序操作的优化4、优化SQL语句的相关工具●提供SQL优化集的Statspack与awr●使用Explain plan分析执行计划●通过autotrace分析故障语句的执行计划和统计信息●通过Sql trace查找有性能问题的SQL语句●通过10g的Sql tunning advise自动分析语句性能●通过10g的Sql access advise自动分析语句算法5、CBO和RBO介绍6、数据访问方法第五单元1、收集统计信息2、强制执行计划修改参数值影响CBO生成的执行计划,通过hints直接强制执行计划3、Sql语句优化经验判断语句性能的问题4、稳定调整好的语句执行计划通过存储概要确保执行计划的稳定性5、备份恢复概述对比常见的几种备份恢复方法本文出自《中培教育》。
1.初始参数调整数据库●SGA_MAX_SIZE●PGA_AGGREGATE_TARGET●DB_CACHE_SIZE●SHARED_POOL_SIZEORACLCE 里有SGA_TARGET参数(自动共享内存管理),注意当SGA_TARGET=0的时候ASMM( Automatic Shared Memory Management)被禁用的,所以上面的参数需要手工定义,当SGA_TARGET=SGA_MAX_SIZE时说明所有的SGA内存都可以被使用。
sqlplus /nolog <<EOFconn system/systemcol name for a25;col value for a50;select name,value from v$parameter where name in ('sga_max_size','pga_aggregate_target','db_cache_size','shared_pool_size','sga_target');EOF1.1 D B_CACHE_SIZE 参数这个参数主要是用来调整数据缓存命中率的重要参数1.1.1 计算命中率col phys format 999,9999,999 heading 'Physical Reads'col gets format 999,9999,999 heading 'DB Block Gets'col con_gets format 999,9999,999 heading 'Consistent Gets'col hitratio format 999,9999,999 heading 'Hit Ratio'select sum(decode(name,'physical reads',value,0)) phys,sum(decode(name,'db block gets',value,0)) gets,sum(decode(name,'consistent gets',value,0)) con_gets,(1 - sum(decode(name,'physical reads',value,0)) /(sum(decode(name,'db block gets',value,0)) +(sum(decode(name,'consistent gets',value,0))))) * 100 hitratiofrom v$sysstat;1.1.2 V$DB_CACHE_ADVICE这个视图可以对修改DB_CACHE_SIZE后对数据缓存命中率影响进行评估select name,size_for_estimate,size_factor,estd_physical_read_factor from v$db_cache_advice 1.1.3 监控V$SQLAREA查找比较慢的查询执行磁盘读取量最大的sqlselect ername username,a.disk_reads reads,a.executions exec,a.disk_reads /decode(a.executions,0,1,a.executions) rds_exec_ratio,a.sql_text statement from v$sqlarea a, dba_users b where a.parsing_user_id=er_id and a.disk_reads >10000 order by a.disk_reads desc执行占用内存最多的sqlselect ername username,a.buffer_gets reads,a.executions exec,a.buffer_gets /decode(a.executions,0,1,a.executions) rds_exec_ratio,a.sql_text statement from v$sqlarea a, dba_users b where a.parsing_user_id=er_id and a.buffer_gets >10000000 order by a.buffer_gets desc;1.1.4 V$SQL单独查看共享SQL区域中的每条语句select * from(select address, rank() over(order by buffer_gets desc) as rank_bufgets,to_char(100 * ratio_to_report(buffer_gets) over(),'999.99') pct_bufgets from v$sql)where rank_bufgets <11;如果需要查看sqlcol sql_text for a50select * from(select sql_text, rank() over(order by buffer_gets desc) as rank_bufgets,to_char(100 * ratio_to_report(buffer_gets) over(),'999.99') pct_bufgets from v$sql)where rank_bufgets <11;1.1.5 V$sessmetric选出当前最占资源的会话selectto_char(m.end_time,'DD-MON-YYYY HH24:MI:SS') e_dttm,m.intsize_csec/100 ints,ername usr,m.session_id sid,m.session_serial_num ssn,round(m.cpu) cpu100,m.physical_reads prds,m.logical_reads lrds,m.pga_memory pga,m.hard_parses hp,m.soft_parses sp,m.physical_read_pct prp,m.logical_read_pct lrp,s.sql_idfrom v$sessmetric m, v$session swhere (m.physical_reads >100or m.cpu>100or m.logical_reads>100)and m.session_id=s.sidand m.session_serial_num=s.serial#order by m.physical_reads desc,m.cpu desc,m.logical_reads desc;1.1.6 DBA_HIST_SQLSTAT查询7天内最占资源的查询select snap_id,disk_reads_delta reads_delta,executions_delta exec_delta,disk_reads_delta /decode(executions_delta,0,1,executions_delta) rds_exec_ratio,sql_idfrom dba_hist_sqlstatwhere disk_reads_delta >10000order by disk_reads_delta desc;然后用v$dba_hist_sqltext查询文本select command_type,sql_text from dba_hist_sqltextwhere sql_id='4cgdn77m8jnzb';1.2 S HARED_POOL_SIZE 参数该参数功能是为那些数据字典缓存和共享SQL语句指定了在SGA里所分配的内存cursor_sharing=force 避免sql语句由于大小写的不同需要重新解析。
1.2.1 检测数据字典的缓冲命中率select ((1 - (sum(GetMisses)/(sum(gets)+sum(GetMisses)))) * 100) "Hit ratio"from v$rowcachewhere gets + GetMisses <> 01.2.2 检查重载率如果重载率超过1%需要加大shared_pool_sizeselect sum(pins) "hits",sum(reloads) "Misses",((sum(reloads)/sum(pins)) *100 ) "Reload %"from v$librarycache;1.2.3 X$KSMSP观察共享池select sum(ksmchsiz) Bytes,ksmchcls satusfrom x$ksmspgroup by ksmchcls;通常规则把SHARED_POOL_SIZE定位DB_CACHE_SIZE 的50%~150%如果没有任何存储过程,应该为10%~20%1.3 P GA_AGGREGATE_TARGET分配的会话PGA的总量。
当设置PGA_AGGREGATE_TARGET时,需要WORKARER_SIZE_POLICY设置为AUTO估算其最小值select min(pga_target_for_estimate)from v$pga_target_advicewhere estd_pga_cache_hit_percentage >95;优化建议使用方法及结果:运行优化分析(plsql在SQL窗口运行)declarei_task_id varchar2(100);i_sql varchar2(4000);begini_sql:='select Count(*) from MV_WORKITEM where status!=9 and status!=8 and status!=7 and formset_inst_id=15134';dbms_sqltune.drop_tuning_task('MVWORKITEMSQL');i_task_id:=dbms_sqltune.create_tuning_task(sql_text=>i_sql,user_name=>'DB_EXOA',SCOPE=>'COMPREHENSIVE',task_name=>'MVWORKITEMSQL');dbms_sqltune.execute_tuning_task('MVWORKITEMSQL');end;查看结果:select dbms_sqltune.report_tuning_task('MVWORKITEMSQL') from dual;结果:GENERAL INFORMATION SECTION-------------------------------------------------------------------------------Tuning Task Name : MVWORKITEMSQLTuning Task Owner : DB_EXOAWorkload Type : Single SQL StatementScope : COMPREHENSIVETime Limit(seconds): 1800Completion Status : COMPLETEDStarted at : 05/07/2012 19:50:53Completed at : 05/07/2012 19:50:56-------------------------------------------------------------------------------Schema Name: DB_EXOASQL ID : 8kv574cm2hdn3SQL Text : select Count(*) from MV_WORKITEM where status!=9 andstatus!=8 and status!=7 and formset_inst_id=15134-------------------------------------------------------------------------------FINDINGS SECTION (3 findings)-------------------------------------------------------------------------------1- Restructure SQL finding (see plan 1 in explain plans section)----------------------------------------------------------------谓词"MV_WORKITEM"."STATUS"<>9 (在执行计划的行ID 2 处使用) 是索引列"STATUS" 的不等式条件。