Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Oracle RAC e sequências


Exatamente o que você quer dizer com "ordenado" neste contexto?

Por padrão, cada nó no cluster tem um cache separado de números de sequência. Portanto, o nó 1 pode estar distribuindo valores de 1 a 100, enquanto o nó 2 está distribuindo valores de 101 a 200. Os valores retornados de um único nó são sequenciais, mas a sessão A no nó 1 pode obter um valor de 15, enquanto a sessão B no nó 2 obtém um valor de 107, de modo que os valores retornados nas sessões aparecem fora de ordem.

Se você especificar que a sequência deve ser ordenada, basicamente estará anulando o propósito do cache de sequência, porque o Oracle agora precisa se comunicar entre os nós toda vez que você solicita um novo valor de sequência. Isso tem o potencial de criar uma quantidade razoável de sobrecarga de desempenho. Se você estiver usando a sequência como uma espécie de carimbo de data/hora, essa sobrecarga pode ser necessária, mas geralmente não é desejável.

A diferença de sobrecarga em termos práticos será altamente dependente do aplicativo - será incomensuravelmente pequena para alguns aplicativos e um problema significativo para outros. O número de nós RAC, a velocidade da interconexão e a quantidade de tráfego de interconexão existente também contribuirão. E como isso é principalmente um problema de escalabilidade, o efeito prático vai limitar o quão bem seu aplicativo é dimensionado, o que é inerentemente não linear. Dobrar o volume de transações que seu aplicativo lida com muito mais do que dobrar a sobrecarga.

Se você especificar NOCACHE, a escolha de ORDER ou NOORDER é basicamente irrelevante. Se você especificar ORDER, a escolha de CACHE ou NOCACHE é basicamente irrelevante. Então CACHE NOORDER é de longe o mais eficiente, os outros três são relativamente intercambiáveis. Todos eles envolverão coordenação entre nós e tráfego de rede toda vez que você solicitar um valor de sequência que é, obviamente, um gargalo potencial.

Geralmente, seria preferível adicionar uma coluna TIMESTAMP à tabela para armazenar o carimbo de data/hora real em vez de depender da sequência para fornecer uma ordem de carimbo de data/hora.