问题 我的系统以600tps的速率将记录插入oracle rac DB。在插入过程调用期间,为每个记录分配一个序列,以便每个记录应分布在20个不同的批处理ID中(循环机制的实现)。 以下是选择批次的步骤 1)记录来了。从序列中分配nextValue。 2)做MOD(序列,20)。它给出0到19之间的值。
问题: 3个记录同时到达DB并在RAC中命中3个不同的节点 推出序列2,102,1002。 所有人的MOD都是相同的。 所有人都试图进入同一批次。
Round Robin在这里失败了。
请帮助解决问题。
答案 0 :(得分:0)
这是由于在RAC上实现了Sequences。当一个节点首次被要求提供一个序列的下一个值时,它会得到一堆它们(例如100到119),然后将它们移出,直到它需要一个新的批次,当它得到另一个串(160-179)时。当节点1分发100然后101时,节点2将分发121,122等等。
'束'的大小由我记住在序列上定义的缓存大小来控制。如果将缓存大小设置为0,则不会进行缓存,序列将按顺序分发。然而,这样做将涉及节点是管理开销,而他们确定下一个实际是什么,并且600tps这可能不是一个好主意:你必须尝试它,看看,