sql >> Databasteknik >  >> RDS >> Oracle

Oracle RAC och sekvenser

Exakt vad menar du med "beställt" i sammanhanget?

Som standard har varje nod i klustret en separat cache med sekvensnummer. Så nod 1 delar ut värdena 1-100 medan nod 2 delar ut värdena 101-200. Värdena som returneras från en enskild nod är sekventiella, men session A på nod 1 kan få värdet 15 medan session B på nod 2 får värdet 107 så att värdena som returneras över sessioner visas ur funktion.

Om du anger att sekvensen måste beställas, motverkar du i princip syftet med sekvenscachen eftersom Oracle nu måste kommunicera mellan noder varje gång du begär ett nytt sekvensvärde. Det har potential att skapa en anständig mängd prestanda omkostnader. Om du använder sekvensen som en sorts tidsstämpel kan den omkostnaden vara nödvändig men det är generellt sett inte önskvärt.

Omkostnadsskillnaden i praktiska termer kommer att vara mycket applikationsberoende - den kommer att vara omätligt liten för vissa applikationer och ett betydande problem för andra. Antalet RAC-noder, hastigheten på sammankopplingen och hur mycket sammanlänkningstrafik det finns kommer också att bidra. Och eftersom detta i första hand är en skalbarhetsfråga kommer den praktiska effekten att begränsa hur väl din applikation skalas upp, vilket i sig är icke-linjärt. Att fördubbla transaktionsvolymen som din applikation hanterar kommer att bli mycket mer än fördubblad omkostnaden.

Om du anger NOCACHE är valet av ORDER eller NOORDER i princip irrelevant. Om du anger ORDER är valet av CACHE eller NOCACHE i princip irrelevant. Så CACHE NOORDER är den absolut mest effektiva, de andra tre är relativt utbytbara. De kommer alla att involvera inter-nod-koordinering och nätverkstrafik varje gång du begär ett sekvensvärde som uppenbarligen är en potentiell flaskhals.

Det skulle i allmänhet vara att föredra att lägga till en TIMESTAMP-kolumn i tabellen för att lagra den faktiska tidsstämpeln i stället för att förlita sig på sekvensen för att tillhandahålla en tidsstämpelordning.



  1. Tips för att migrera från proprietära till öppen källkodsdatabaser

  2. Automatisk skalning med Amazon Aurora Serverless

  3. Behöver lista alla triggers i SQL Server-databasen med tabellnamn och tabellens schema

  4. SQL Left Join