gpt4 book ai didi

sql - Oracle RAC 和序列

转载 作者:行者123 更新时间:2023-12-02 03:56:05 25 4
gpt4 key购买 nike

我有各种使用序列的数据库应用程序,我正在将这些应用程序从不带 RAC 的 10g 迁移到带 RAC 的 11g。我需要有序的序列并且可以容忍间隙。

我正在考虑按顺序进行缓存序列,我不知道对性能有何影响。您认为这是一个好的选择吗?您对序列和 RAC 有什么经验?

谢谢

最佳答案

在这种情况下,“有序”到底是什么意思?

默认情况下,集群中的每个节点都有一个单独的序列号缓存。因此,节点 1 可能正在分发值 1-100,而节点 2 可能正在分发值 101-200。从单个节点返回的值是连续的,但节点 1 上的 session A 可能会得到值 15,而节点 2 上的 session B 得到的值可能是 107,因此跨 session 返回的值看起来是乱序的。

如果您指定必须对序列进行排序,那么您基本上就违背了序列缓存的目的,因为 Oracle 现在必须在每次请求新序列值时在节点之间进行通信。这有可能产生相当大的性能开销。如果您使用该序列作为一种时间戳,则该开销可能是必要的,但通常并不可取。

实际上,开销差异将高度依赖于应用程序——对于某些应用程序来说,开销差异将小得无法测量,而对于其他应用程序来说,开销差异将是一个重大问题。 RAC 节点的数量、互连的速度以及互连流量的多少也会有所贡献。由于这主要是一个可扩展性问题,因此实际效果将限制应用程序的扩展程度,这本质上是非线性的。将应用程序处理的交易量加倍将导致开销增加一倍以上。

如果指定NOCACHE,则选择ORDER或NOORDER基本上是无关紧要的。如果指定ORDER,则选择CACHE或NOCACHE基本上是无关紧要的。所以CACHE NOORDER是目前为止效率最高的,其他三个相对来说是可以互换的。每次您请求序列值时,它们都会涉及节点间协调和网络流量,这显然是一个潜在的瓶颈。

通常最好在表中添加一个 TIMESTAMP 列来存储实际时间戳,而不是依赖序列来提供时间戳顺序。

关于sql - Oracle RAC 和序列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4866959/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com