sql >> Database >  >> RDS >> Oracle

Oracle RAC en sequenties

Wat bedoel je precies met "besteld" in deze context?

Standaard heeft elk knooppunt in het cluster een aparte cache met volgnummers. Dus knooppunt 1 deelt mogelijk waarden 1-100 uit, terwijl knooppunt 2 waarden 101-200 uitdeelt. De waarden die door een enkel knooppunt worden geretourneerd, zijn sequentieel, maar sessie A op knooppunt 1 kan een waarde van 15 krijgen, terwijl sessie B op knooppunt 2 een waarde van 107 krijgt, zodat de waarden die in sessies worden geretourneerd, niet in de juiste volgorde worden weergegeven.

Als u opgeeft dat de reeks moet worden geordend, gaat u in feite voorbij aan het doel van de reekscache omdat Oracle nu moet communiceren tussen knooppunten telkens wanneer u een nieuwe reekswaarde aanvraagt. Dat heeft het potentieel om een ​​behoorlijke hoeveelheid prestatieoverhead te creëren. Als je de reeks als een soort tijdstempel gebruikt, is die overhead misschien nodig, maar over het algemeen niet wenselijk.

Het overheadverschil in praktische termen zal sterk afhankelijk zijn van de toepassing - het zal voor sommige toepassingen onmeetbaar klein zijn en voor andere een groot probleem. Het aantal RAC-knooppunten, de snelheid van de interconnect en hoeveel interconnectieverkeer er is, zullen ook bijdragen. En aangezien dit in de eerste plaats een schaalbaarheidsprobleem is, zal het praktische effect beperken hoe goed uw toepassing kan worden opgeschaald, wat inherent niet-lineair is. Het verdubbelen van het transactievolume dat uw applicatie afhandelt, zal de overhead veel meer dan verdubbelen.

Als u NOCACHE specificeert, is de keuze voor ORDER of NOORDER in principe irrelevant. Als u ORDER opgeeft, is de keuze voor CACHE of NOCACHE in principe irrelevant. CACHE NOORDER is dus verreweg het meest efficiënt, de andere drie zijn relatief uitwisselbaar. Ze zullen allemaal coördinatie tussen knooppunten en netwerkverkeer met zich meebrengen telkens wanneer u een sequentiewaarde aanvraagt, wat uiteraard een potentieel knelpunt is.

Het zou over het algemeen de voorkeur hebben om een ​​TIMESTAMP-kolom aan de tabel toe te voegen om de werkelijke tijdstempel op te slaan in plaats van te vertrouwen op de volgorde om een ​​tijdstempelvolgorde te geven.



  1. Verbinding maken met MySQL met behulp van Python

  2. Hoe van database te wisselen met PostgreSQL

  3. DISTINCT voor slechts één kolom

  4. Waarom is het resultaat van de rijen met explain niet gelijk aan count()?