sql >> Base de Datos >  >> RDS >> Oracle

Oracle RAC y secuencias

¿Qué quiere decir exactamente con "ordenado" en este contexto?

De forma predeterminada, cada nodo del clúster tiene una memoria caché independiente de números de secuencia. Entonces, el nodo 1 puede estar entregando valores 1-100 mientras que el nodo 2 está entregando valores 101-200. Los valores devueltos desde un solo nodo son secuenciales, pero la sesión A en el nodo 1 puede obtener un valor de 15 mientras que la sesión B en el nodo 2 obtiene un valor de 107, por lo que los valores devueltos en las sesiones aparecen desordenados.

Si especifica que se debe ordenar la secuencia, básicamente está anulando el propósito de la caché de secuencia porque Oracle ahora tiene que comunicarse entre los nodos cada vez que solicita un nuevo valor de secuencia. Eso tiene el potencial de crear una cantidad decente de gastos generales de rendimiento. Si está utilizando la secuencia como una especie de marca de tiempo, esa sobrecarga puede ser necesaria, pero generalmente no es deseable.

La diferencia de gastos generales en términos prácticos dependerá en gran medida de la aplicación:será inconmensurablemente pequeña para algunas aplicaciones y un problema significativo para otras. La cantidad de nodos RAC, la velocidad de la interconexión y la cantidad de tráfico de interconexión también contribuirán. Y dado que esto es principalmente un problema de escalabilidad, el efecto práctico limitará qué tan bien se escala su aplicación, que es inherentemente no lineal. Duplicar el volumen de transacciones que maneja su aplicación va a más que duplicar los gastos generales.

Si especifica NOCACHE, la elección de ORDER o NOORDER es básicamente irrelevante. Si especifica ORDER, la elección de CACHE o NOCACHE es básicamente irrelevante. Entonces, CACHE NOORDER es, con mucho, el más eficiente, los otros tres son relativamente intercambiables. Todos van a involucrar la coordinación entre nodos y el tráfico de red cada vez que solicite un valor de secuencia que, obviamente, es un cuello de botella potencial.

Por lo general, sería preferible agregar una columna TIMESTAMP a la tabla para almacenar la marca de tiempo real en lugar de depender de la secuencia para proporcionar un orden de marca de tiempo.