我们关注数据库系统的性能,进行数据库调优的主要工作就是进行sql的优化。良好的数据架构设计、配合应用系统中间件和写一手漂亮的
我们关注数据库系统的性能,进行数据库调优的主要工作就是进行sql的优化。良好的数据架构设计、配合应用系统中间件和写一手漂亮的sql,是未来系统上线后不出现致命性能问题的有力保证。
在cbo时代,一个sql的执行计划是多样的。影响执行计划的因素也从过去rbo时代的sql书写规则变为综合性因素。这为我们生成更加优秀执行计划提供了基础,同时也给我们进行调优带来的很多麻烦。
目前我们通常的做法,是通过awr报告或者调试手段,发现某某sql有问题,之后从library cache(或者awr)中抽取出执行计划。同时相对应的各种统计信息也需要手工收集。
在mos[id 1366133.1]中,发现一个oracle非公开使用的脚本,可以帮助我们一次性的将执行sql相关的健康信息全部收集,,并且输出为html格式文件。本篇就介绍这个脚本工具,也当作是一种推广。
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
构造一个实验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