什么使Oracle更具可扩展性?

什么使Oracle更具可扩展性?,oracle,scalability,rdbms,Oracle,Scalability,Rdbms,Oracle似乎以比其他RDBMS更具可扩展性而闻名。在使用它一点之后,我可以说它比其他RDBMS更复杂,但我还没有看到任何东西使它比其他RDBMS更具可伸缩性。但话说回来,我还没有真正深入研究它 Oracle具有哪些更具可扩展性的功能?Oracle的RAC体系结构使其具有可扩展性,它可以跨节点进行负载平衡,并行查询可以拆分并推送到其他节点进行处理 一些技巧,比如从另一个节点的缓冲缓存加载块,而不是将其放入磁盘,可以使性能更具可伸缩性 此外,RAC的可维护性和滚动升级有助于使大型系统的运行更加正

Oracle似乎以比其他RDBMS更具可扩展性而闻名。在使用它一点之后,我可以说它比其他RDBMS更复杂,但我还没有看到任何东西使它比其他RDBMS更具可伸缩性。但话说回来,我还没有真正深入研究它


Oracle具有哪些更具可扩展性的功能?

Oracle的RAC体系结构使其具有可扩展性,它可以跨节点进行负载平衡,并行查询可以拆分并推送到其他节点进行处理

一些技巧,比如从另一个节点的缓冲缓存加载块,而不是将其放入磁盘,可以使性能更具可伸缩性

此外,RAC的可维护性和滚动升级有助于使大型系统的运行更加正常

可伸缩性还有一个不同的方面——存储可伸缩性。ASM使增加存储容量变得非常简单。一个设计良好的基于ASM的解决方案,应该可以扩展到超过100 TB的大小,而不需要做任何特别的事情

我不知道这些是否使Oracle比其他RDBMS更具可扩展性。但我认为,如果尝试扩展非Oracle数据库,我会感到不太高兴。

光标共享是(或曾经是)与竞争对手相比的一大优势。 基本上,相同的查询计划用于匹配查询。应用程序将有一组标准的查询(例如获取此客户id的订单)。简单的方法是单独处理每个查询,因此,如果看到“SELECT*FROM ORDERS WHERE CUSTOMER_ID=:b1”,您可以查看表ORDERS是否有关于CUSTOMER_ID等的索引。因此,查找元数据以获得查询计划的工作量与实际检索数据的工作量相同。通过简单的键控查找,查询计划很容易。在倾斜列上连接多个表的复杂查询比较困难

Oracle有一个查询计划缓存,旧的/使用较少的计划会随着需要新计划而过时

如果不缓存查询计划,那么优化器的智能化程度是有限的,因为编码到优化器中的智能越多,对处理的每个查询的影响就越大。缓存查询意味着您只有在第一次看到查询时才会产生这种开销

“缺点”是,要使光标共享有效,您需要使用绑定变量。一些程序员没有意识到这一点,编写了无法共享的代码,然后抱怨Oracle不如mySQL快

Oracle的另一个优点是撤销日志。更改完成后,数据的“旧版本”将写入撤消日志。其他数据库将记录的旧版本保留在与记录相同的位置。这需要进行真空式清理操作,否则会遇到空间和组织问题。这在具有高更新或删除活动的数据库中最为相关

而且Oracle没有中央锁注册表。锁位存储在每个单独的数据记录上。选择不带锁。在SELECT锁定的数据库中,您可以让多个用户读取数据并相互锁定或阻止更新,从而引入可伸缩性限制。其他数据库在执行选择时会锁定一条记录,以确保其他人无法更改该数据项(因此,如果同一查询或事务再次查看该表,则该记录将保持一致)。Oracle使用UNDO作为其读取一致性模型(即查找在特定时间点出现的数据)

Tom Kyte在Apress中的“专家Oracle数据库体系结构”很好地描述了Oracle的体系结构,并与其他RDBMS进行了一些比较。值得一读