当oracle出现性能缓慢、执行效率低下时,分析调优需从多个角度切入,并逐一优化:
1、SQL语句层面上
A 注意语句中数据查询表的的顺序调整,大表在前(接近where)小表在后,若多个表关联情况下,应选择当中的关联表作为基表。
B 语句中尽少使用函数或自定义,尽量避免group by 、having等字句。
C 过于复杂的逻辑关系语句应分拆成多个sql。
D 动态SQL时应积极使用绑定变量。(数据量越大,提高的效率越明显)
2、数据库优化器的使用
A 建议尽量避免使用‘选择优化器(CHOOSE)’,而应使用成本(CBO)或规则(RULE)优化器。
B 针对某些特定SQL可以使用HINT(提示)来指定使用优化器的类型;
如: select /* +RULE */ from emp;
3、查询分析器(执行计划)及锁对象跟踪
A 通过查询分析器(Trace) 或者 查询计划sql(1 EXPLAIN PLAN FOR <SQL> ; 2 SELECT * TABLE(XPLAN.display) )来查看执行计划(路径),
找出消耗较大的几个位置,根据实际情况作调整。
B 查看是否数据库存在锁对象,存在则酌情将锁对象解决掉。
4、索引使用
A 对于经常需要全表扫描的数据表,则避免使用索引,这种情况下,索引的存在反而是增加消耗影响效率;
B 在增删改操作较频繁的表也应该避免使用索引;这种情况下索引会增加15%左右 的消耗,大大的降低效率。
C 在以查询为主的表中,全表扫描较少使用,的情况下则视实际情况在查询列上建立索引、组合索引、甚至反向索引。
D 此外需要注意的是,索引列上出现函数或者运算符或空、like 等情况下,将会打破索引,因此在sql语句编写上需注意函数、运算、关键字的使用。
5、分区表
A 在数据量庞大表时,需考虑分区存放,这涉及到无论是查询还是增删改都将会大大提高效率。
B 至于使用范围分区、列表分区、散列分区(hash) 还是复合分区,这需要实际的情况而定,详见我另外博文《Oracle 分区简述》。
6、缓冲区(Database buffer cache)
以上情况外,再者就是适当扩充数据缓冲区,以提高命中率(ratio)。
7、业务逻辑优化
再后,其实也是最重要点,应考虑是否可在业务逻辑层面上作适当优化,所谓,聪明的懒人一向都是这样,先从高层面上去想问题。
Oracle数据库优化要点总结
猜你喜欢
转载自kelivenlin.iteye.com/blog/1702803
今日推荐
周排行