Exactamente lo qué se refiere con "ordenados" en este contexto?
De forma predeterminada, cada nodo del clúster tiene un caché separado de números de secuencia. Por lo tanto, el nodo 1 puede estar distribuyendo los valores del 1 al 100, mientras que el nodo 2 está distribuyendo los valores del 101 al 200. Los valores devueltos por 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 la secuencia tiene que ser ordenada, básicamente está derrotando el propósito de la secuencia de caché 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 en general no es deseable.
La diferencia de gastos generales en términos prácticos va a ser altamente dependiente de la aplicación: será inmensurablemente pequeña para algunas aplicaciones y un problema importante 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á la adecuación de su aplicación, que es inherentemente no lineal. Duplicar el volumen de transacción que maneja su aplicación va a ser más del doble de la sobrecarga.
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. Así que CACHE NOORDER es de lejos el más eficiente, los otros tres son relativamente intercambiables. Todos van a involucrar la coordinación entre nodos y el tráfico de la red cada vez que solicite un valor de secuencia que es, obviamente, un posible cuello de botella.
Por lo general, sería preferible agregar una columna TIMESTAMP a la tabla para almacenar la marca de tiempo real en lugar de confiar en la secuencia para proporcionar una orden de fecha y hora.
Gracias Justin, necesito mantener el orden de la secuencia de acuerdo con la solicitud. Desde Oracle: ORDER Especifique ORDER para garantizar que los números de secuencia se generen por orden de solicitud. Esta cláusula es útil si está utilizando los números de secuencia como marcas de tiempo. Garantizar el orden generalmente no es importante para las secuencias utilizadas para generar claves primarias. – odew
Entonces, la especificación de un caché probablemente no tenga sentido-- Simplemente seguiría adelante y especificaría NOCACHE y aceptaría que agregará sobrecarga a la generación de su secuencia. Deberá probar cómo se comporta su aplicación bajo carga en RAC para garantizar que esta sobrecarga adicional sea aceptable. –
Tengo alguna aplicación que usa las secuencias como un tipo de marcas de tiempo. Lo que quiero saber es si alguien tiene experiencia con los parámetros NOCAHCE, CACHE, ORDER, NOORDER y las diferencias generales en cada caso. – odew