Oracle性能优化有感

来源:互联网 发布:质量数据库 编辑:程序博客网 时间:2024/06/06 13:10

最近在网上看到《品悟性能优化》这本书得几个章节,感慨颇深。想想过去的几个项目在进行性能优化后都把最终的瓶颈定位在了Oracle数据库上。为什么会导致这样的结果,其实跟设计人员和开发人员对Oracle数据库了解不透彻或不够深入导致设计和开发阶段数据库设计不够科学,写的SQL不够优化。也就是文中提到2/8 原则。即80%性能问题是由于应用设计不合理导致。20%的修改和优化可以解决80%性能问题。

      原来我所知道基于开发人员的Oracle优化有以下3点:

1.索引建立

2.绑定变量

3.合理参数设置

细化到索引建立,在文中提出索引复合索引,因为我们公司SQL大量需要建立复合索引的查询,所以很有感触!就是复合索引在包括9i至以前的版本where后第一个子字段必须是复合索引的索引字段且必须最靠前,这样写对于SQL整体执行效率有极大的提升。如果where后第一个子字段不在复合索引内,将执行全表搜索。但在9i后的版本就不存在此问题了。

对于变量绑定,采用preparedstatement比statement更高效。而且SQL全部大写也是一个需要遵守的好的习惯。

对于参数合理设置,在一般情况下默认参数适合联机业务,而不适合批量处理业务,所以在特定情况下需要调整参数。感觉这项更应该交给DBA去做。

再来说说文中剖析SQL执行过程:

(1)首先进行语法分析(Parse)。

(2)选择优化器模式(RBO或CBO)Rule Based Optimizer或 Cost-Based Optimizer。

(3)如果没有统计信息,或者用户强行指定RBO,则选择RBO模式。

(4)如果有统计信息,并且用户没有强行指定RBO,则选择CBO模式。

(5)产生结果集。

(6)将结果集返回用户。

SQL解析流程图。这图很好说明SQL解析过程。