Oracle SQL 调优健康检查脚本

2014-11-24 19:00:56 · 作者: · 浏览: 28

我们关注数据库系统的性能,进行数据库调优的主要工作就是进行SQL的优化。良好的数据架构设计、配合应用系统中间件和写一手漂亮的SQL,是未来系统上线后不出现致命性能问题的有力保证。


在CBO时代,一个SQL的执行计划是多样的。影响执行计划的因素也从过去RBO时代的SQL书写规则变为综合性因素。这为我们生成更加优秀执行计划提供了基础,同时也给我们进行调优带来的很多麻烦。


目前我们通常的做法,是通过AWR报告或者调试手段,发现某某SQL有问题,之后从Library Cache(或者AWR)中抽取出执行计划。同时相对应的各种统计信息也需要手工收集。


1、环境准备


我们选择Oracle 10g作为实验环境。


SQL> select * from v$version;



BANNER


----------------------------------------------------------------


Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Prod


PL/SQL Release 10.2.0.1.0 - Production


CORE 10.2.0.1.0 Production


TNS for 32-bit Windows: Version 10.2.0.1.0 - Production


NLSRTL Version 10.2.0.1.0Production


构造一个实验SQL,用来进行演示。




SQL> select /*+ demo */ emp.empno, emp.ename, dept.dname


2 from emp, dept


3 where emp.deptno=dept.deptno;



EMPNO ENAME DNAME


----- ---------- --------------


7369 SMITH RESEARCH


7934 MILLER ACCOUNTING


(篇幅原因,结果集合省略……



--此时,该SQL已经存在于Library Cache中;


SQL> select sql_id from v$sqlarea where sql_text like 'select /*+ demo */%';



SQL_ID


-------------


auurp0v54vjgc