技术头条 - 一个快速在微博传播文章的方式     搜索本站
您现在的位置首页 --> Oracle --> Oracle cluster使用场景分析

Oracle cluster使用场景分析

浏览:2565次  出处信息

   Oracle中普通的表称为堆表(heap table),堆表中的数据是无序存放的,往往在使用一段时间后,数据就变得非常无序。如下图所示,索引中相同的key对应的数据存放在不同的block中,这时,如果要通过索引查询某个key的数据,就需要访问很多不同的block,代价非常高。

   

   Oracle中有一个统计信息clustering factor,它就是用来反映索引中键值在表中的有序程度,clustering factor的值如果接近表的blocks的数量,表明数据在表中的是有序的,而如果这个值接近表的行数,则表明表中的数据是无序存放的。因为clustring factor对于索引查询的影响很大,所以在CBO计算cost时,这个值非常重要。

   我们可以通过创建一个单表的hash cluster,将相同键值的数据物理存放在一起,达到提高性能的目的。创建cluster有两个最重要的参数:HASHKEYS和SIZE,前者表示cluster中有多少个不同的键值,后者表示每个键值需要分配的空间。因为hash cluster的空间是预先分配的,这两个值的正确设置对cluster的性能影响非常大。hashkeys设置过大,会造成空间浪费,而如果设置过小,则会产生大量的hash碰撞,极大影响性能。size也是一样,设置过大会浪费空间,而设置过小,数据超过预先分配的空间时,会通过链接方式存放在溢出段中,影响性能。而这两个值一旦设置,就无法更改。

   hash cluster简单的说就是通过预先分配空间的方式,将相同key的数据存放在一起,以提高查询性能的一种手段,所以准确的设置hashkeys和size参数是使用hash cluster的关键,使用的前提是key的数量是可以估算的,而且每个key的数据是基本平均的。但是,在实际使用的环境中,数据量的变化往往是不可预知的,这也造成hash cluster的应用场景非常有限。

   Index cluster和hash cluster类似,只不过index cluster是通过索引实现数据定位,而且index cluster的空间是动态分配的,但是同样存在正确设置size参数的问题,设置过大过小都会产生性能问题。

   个人观点:Oracle cluster更适合相对静态数据的存储,对于OLTP应用来说,cluster在大部分情况下都不太适用,因为我们都无法预估到数据量的变化,根本无法合理设置cluster的参数。

   任何技术都要找到合适的应用场景,有利一定有弊,有些技术确实是看上去很美,但是并不实用,而有些方案看上去很土,但是可以解决问题,找到最合适的就好。

   -EOF-

   如果哪位兄弟有oracle cluster解决实际问题方面的案例,也请和我一起交流。

建议继续学习:

  1. 数据库的堆表与索引组织表的数据存储格式讨论    (阅读:4649)
  2. LVS & MySQL NDB Cluster    (阅读:3713)
  3. 利用MySQL Cluster 7.0 + LVS 搭建高可用环境    (阅读:3364)
  4. MySQL Cluster 与 MongoDB 复制及分片设计及原理    (阅读:3209)
  5. MySQL Cluster致命缺点    (阅读:2936)
  6. MySQL Cluster Manager 工作原理、安装及使用    (阅读:2910)
  7. MySQL Cluster集群探索与实践    (阅读:2804)
  8. Two-phase commit(2PC) 与MySQL Cluster    (阅读:2613)
  9. Blob/Text字段类型在MySQL Cluster中的处理    (阅读:2413)
QQ技术交流群:445447336,欢迎加入!
扫一扫订阅我的微信号:IT技术博客大学习
<< 前一篇:Oracle 冷备份
© 2009 - 2024 by blogread.cn 微博:@IT技术博客大学习

京ICP备15002552号-1