SQL优化

来源:互联网 发布:aix 修改ssh端口 编辑:程序博客网 时间:2024/05/27 00:45

d数据库系统性能调整SQL优化包括三个步骤

1.通过查看系统中过去执行的历史可用信息,根据系统资源和应用程序确定高负载的SQL语句;

2.根据AWR报告结合系统动态视图确定高负载的SQL;

3.通过检查高负载SQL语句的执行计划,并提出优化方案。


确定高负载的SQL

高负载的SQL一般性能比较差,并且耗费系统中更多资源,可以通过下面的方法来确定

1.SQL TRACE

2.I/O统计,系统统计,SQL统计动态视图(v$filestat,v$segstat,v$sysstat,v$sesstat,v$sqlarea,v$sql,v$sqlstat,v$sqltext,v$sql_plan);

3.自动工作负荷库(AWR);

4.自动性能诊断监控工具(ADDM);


SQL TRACE

ORACLE企业管理器提供资源消耗过多的SQL语句方法,并产生只和评估SQL性能。

如果无法确定SQL语句,可以通过检查占用主机CPU较高开销的语句或v$sqlstat.buffer_gets,v$sqlstats.disk_reads

I/O开销并结合使用SQL TRACE产生包含该SQL语句的执行跟踪文件,然后使用TKPROFT生成输出文件。


可以使用下面的步骤确定消耗资源的SQL并获取其执行计划

1.收集ORACLE统计信息I/O(v$filestat)统计,系统的统计信息(v$sysstat)和SQL统计信息(v$sqlarea,v$sql/v$sqlstat

v$sql_plan和v$sql_plan_statistics)

2.根据上一步收集的数据,确定高负载的SQL。v$sqlstat包含共享池中所有SQL语句使用的资源信息:

Buffer Gets(v$sqlstats.buffer_gets占用较高CPU开销的语句)

磁盘读(v$sqlstat.disk_reads占用较高I/O开销的语句)

排序(v$sqlstat.sorts针对不多数排序操作)

     同样可以通过自动工作负荷哭AWR报告进行确定

3.通过上述步骤收集信息在一段时期内检查buffer_gets最大的SQL语句,或者检查执行disk_reads最多的SQL语句,

同时从v$sqltext视图获取完整的SQL文本。

4.通过EXPLAN PLAN和v$SQL_PLAN获取该SQL语句优化器的执行计划

eg:

显示当前会话中最后一个执行SQL的执行计划

select * from table(dbms_xplan.display_cursor)

显示SQL ID 为‘6fvfsoohcsooo’的所有子游标的执行计划

select * from table(dbms_xplan.display_cursor('6fvfspphcsooo'));

显示游标的执行度划及其最近一次的统计信息

select * from

table(dbms_xplan.display_cursor('6fvfsoohcsooo',null,'allstats last'))

通过执行计划进行比较来确定性能下降的原因

0 0