欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Oracle性能优化笔记——并行&位图索引 博客分类: Coding建议 Oracle 

程序员文章站 2024-03-20 18:46:22
...

  自打2003掉进某公司的DB维护项目组,到今天断断续续接触Oracle已经是十年了。尽管它依然是数一数二的RDBMS,但Oracle数据库在我这里的声望始终是仇恨。这次遇到的性能调试如下:

 

  一个业务表,数据级别在千万行,检索条件只有一个业务年月字段,但是有多达十个的group by,且掺杂了roll_up及cube。客户要调优建议。

 

  SQL文很简单,select where group by连个结合都没,索引也建了一大票。一方面受限于时间,环境和...一些因素,另一方面还是因为有趣,仅仅尝试了下面两个方向。

 

==============

= 并行

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

测试数据量较小,只找到个百万级别的,也贴了索引。

本地跑下SQL,只有大概10秒左右。

试着尝试并行,根本没变化!

 

尝试改变条件,估计是由于目标数据量的缘故,从index range scan变成了table access full。

再次尝试并行,有用了。并行度设置成3(本地虚拟机只4核)时,从120秒降到60秒。

SELECT  /*+ parallel(tbl, 3) */ ... from tbl

尝试增加并行度,

- 4的时候最优。

- 6的时候开始下降。

听那老爷机发出的种种奇怪的呻吟声,想来是资源到了极限。

 

 

==============

= bitmap index

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

由于业务字段是年月,按道理讲基数(cardinality)应该比较小。5年共60个月除以千万,应该适合bitmap才对。

但加上后,效果不理想。结果如下

 

1. 只加bitmap —— 110秒加。

2. 只并行(度=4) —— 55秒加。

3. 并行 + bitmap —— 75秒加。

4. 无 —— 115秒加

 

查了下测试数据,百万条的测试数据里有150+的年月,按理讲基数也不大。可是效果如上,不给力!

我估摸着性能开销不在检索数据上,而是在统计上的缘故。

去掉统计,只留下检索时,并行就慢于bitmap。

 

 

除了上述的简单优化外,还提了些架构方面的建议,不过那是另个话题了。

 

 

注:这测试是在PC机上跑的VM进行的,差不多也就只能做个参考。

注:这两个功能都是需要企业版。正如M大人所言,一方面讨厌Oracle,一方面还研究昂贵的企业版。真.矫情!

 

相关标签: Oracle