是什么让Oracle更具可扩展性?

时间:2010-01-24 13:29:01

标签: oracle scalability rdbms

Oracle似乎比其他RDBMS具有更高的可扩展性。稍微使用它之后,我可以说它比其他RDBMS更复杂,但我还没有真正看到任何使其比其他RDBMS更多可扩展的东西。但话说回来,我还没有真正深入研究它。

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

3 个答案:

答案 0 :(得分:4)

Oracle的RAC架构使其可以在可以跨节点进行负载平衡的地方进行扩展,并且可以将并行查询拆分并推送到其他节点进行处理。

一些技巧,比如从另一个节点的缓冲区缓存中加载块而不是去光盘,可以使性能更具可扩展性。

此外,RAC与滚动升级的可维护性有助于使大型系统的运行更加清晰。

可扩展性还有一个不同的方面 - 存储可扩展性。 ASM使存储容量增加非常简单。一个精心设计的基于ASM的解决方案,应该可以扩展到超过100 TB的TB级,而无需做任何特别的事情。

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

答案 1 :(得分:4)

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

Oracle有一个查询计划缓存,旧的/较少使用的计划会因为需要新计划而老化。

如果您不缓存查询计划,那么优化程序的智能程度就会受到限制,因为您编写的智能程序越聪明,您对每个处理的查询的影响就越大。缓存查询意味着您第一次看到查询时只会产生这种开销。

'缺点'是要使游标共享生效,您需要使用绑定变量。有些程序员没有意识到这一点并编写了不能共享的代码,然后抱怨Oracle没有mySQL那么快。

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

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

答案 2 :(得分:2)

来自Apress的Tom Kyte的“专家Oracle数据库架构”很好地描述了Oracle的架构,并与其他rDBMS进行了一些比较。值得阅读。