如何有效的诊断和监控高负载的SQL对于DBA来说并非是件容易的事情,对SQL语句手工调优需要很多的经验和技巧,
结合个人经验常见如下问题:
. 对SQL语句本身进行优化以便获得更优的执行计划;
. 合理地调整数据读取方式(例如通过索引)以便能更快地访问数据;
. 合理的设计SQL实现方式以实现最优的架构(例如:使用静态SQL还是动态SQL)
当然,手工调优又是一件非常耗时的工作(我还是更喜欢手工调优),因为:
. 每条SQL可能都是唯一的,这意味着你需要分别优化不同的SQL;
. 系统可能是很复杂的系统,SQL代码非常非常多;
. SQL调整可能是一件永远看不到终点的任务,因为系统中的SQL workload可能经常在变化;
SQL Tuning Advisor的出现减少了DBA的优化压力,尤其是对经验不够丰富甚至完全不懂调优的人来说,
使用STA一定要保证优化器是CBO模式下。个人感觉使用这样的工具,仅适合全然不懂SQL的调优的人群或者DBA作参考,工具未必能解决好问题。
SQL是业务表达的一种方式,工具不可能完全理解业务。SQL调优还是要结合用autotrace,10046,10053,display_cursor等这些优秀的工具做诊断。
然后依据业务和所具备的oracle基础的知识进行调优,个人认为这是最好的方法