Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Oracle RAC und Sequenzen

Was genau meinen Sie in diesem Zusammenhang mit "bestellt"?

Standardmäßig verfügt jeder Knoten im Cluster über einen separaten Cache mit Sequenznummern. Knoten 1 kann also die Werte 1–100 ausgeben, während Knoten 2 die Werte 101–200 ausgibt. Die von einem einzelnen Knoten zurückgegebenen Werte sind sequentiell, aber Sitzung A auf Knoten 1 erhält möglicherweise einen Wert von 15, während Sitzung B auf Knoten 2 einen Wert von 107 erhält, sodass die sitzungsübergreifend zurückgegebenen Werte in der falschen Reihenfolge erscheinen.

Wenn Sie angeben, dass die Sequenz geordnet werden muss, vereiteln Sie im Grunde den Zweck des Sequenz-Caches, da Oracle jetzt jedes Mal zwischen den Knoten kommunizieren muss, wenn Sie einen neuen Sequenzwert anfordern. Das hat das Potenzial, eine anständige Menge an Performance-Overhead zu erzeugen. Wenn Sie die Sequenz als eine Art Zeitstempel verwenden, ist dieser Overhead möglicherweise erforderlich, aber im Allgemeinen nicht wünschenswert.

Der Overhead-Unterschied in der Praxis wird stark anwendungsabhängig sein – er wird für einige Anwendungen unermesslich klein und für andere ein signifikantes Problem sein. Die Anzahl der RAC-Knoten, die Geschwindigkeit der Verbindung und die Menge des Verbindungsverkehrs werden ebenfalls beitragen. Und da dies in erster Linie ein Problem der Skalierbarkeit ist, wird der praktische Effekt einschränken, wie gut Ihre Anwendung skaliert werden kann, was von Natur aus nicht linear ist. Das Verdoppeln des Transaktionsvolumens, das Ihre Anwendung handhabt, wird den Overhead weit mehr als verdoppeln.

Wenn Sie NOCACHE angeben, ist die Wahl von ORDER oder NOORDER grundsätzlich irrelevant. Wenn Sie ORDER angeben, ist die Wahl von CACHE oder NOCACHE grundsätzlich irrelevant. CACHE NOORDER ist also mit Abstand am effizientesten, die anderen drei sind relativ austauschbar. Sie alle werden jedes Mal, wenn Sie einen Sequenzwert anfordern, die Koordination zwischen den Knoten und den Netzwerkverkehr beinhalten, was offensichtlich einen potenziellen Engpass darstellt.

Es wäre im Allgemeinen vorzuziehen, der Tabelle eine TIMESTAMP-Spalte hinzuzufügen, um den tatsächlichen Zeitstempel zu speichern, anstatt sich auf die Sequenz zu verlassen, um eine Zeitstempelreihenfolge bereitzustellen.