SQL Server 2016 Temporal tables

Oopps! Upgrade your browser pretty please.Oopps! Upgrade your browser pretty please.

 

SQL Server 2016 har bara precis presenterats och en ”public preview” är utlovad någon gång i sommar. När den är produktionsklar har Microsoft inte sagt något om än, men som DBA är det bra att veta lite om vad som kommer. Men redan nu kan den som vill prova på den nya versionen i Microsofts Virtual Labs! Det är alltså fråga om väldigt tidiga versioner, så det finns buggar och inga garantier för vad hur det kommer att se ut i den slutliga versionen, men man kan nog räkna med att den övergripande funktionalitet som beskrivs i labbarna kommer med.

En av de riktigt spännande nyheterna kallas ”Temporal Database” och gör det möjligt att ha automatisk historikhantering av tabeller. Det kan vara användbart vid t.ex. krav på ändringslogg, men även i vissa fall för ”slowly changing dimensions” i datalager. Funktionaliteten innebär att det skapas en extra tabell som innehåller alla tidigare versioner av tabellens rader tillsammans med två fält för start- och sluttid. Den ordinarie tabellen fungerar precis som vanligt, med tillägget att dessa två fält måste finnas i den tabellen också. För historiktabellen gäller bland annat;

  • SQL Server hanterar den helt själv i bakgrunden.
  • SQL Server använder den när du ställer frågor mot den vanliga tabellen men begär en annan tidpunkt än den aktuella.
  • SQL Server kan skapa historiktabellen själv, men den får då ett lite kryptiskt namn. Det går också att skapa historiktabellen själv och då använda den namnstandard man själv väljer.
  • Historiktabellerna kan administreras separat och till exempel ha komprimering påslagen även om den vanliga tabellen inte har det (perfekt för ändringslogg!). De kan också indexeras annorlunda Column Store Index!

Hur använder man då historiken? Det är det riktigt fina – när historiken är konfigurerad glömmer man bort den! Alla frågor ställs mot den vanliga tabellen! 🙂

Vi tittar på några poster i den vanliga tabellen.

Temporal tables -  bild 1

 

Vi ser att en post har en senare starttid än de andra. Hur såg posterna ut tidigare, t.ex. kl 19:00?

Temporal tables -  bild 2

 

Vi ser nu posterna som de såg ut vid just den tidpunkten. De två första posterna hämtas från den vanliga tabellen eftersom de fortfarande är aktuella medan den sista posten kommer från historiktabellen. Vi kan verifiera att det är så på åtminstone två sätt. Dels ser vi det i exekveringsplanen (som också visar att historiktabellen behöver indexeras!)…

Temporal tables -  bild 3

 

… eller också tittar vi helt enkelt efter hur den ser ut i historiktabellen!

Temporal tables -  bild 4

 

Förutom att titta på enskilda tidpunkter kan olika typer av intervall anges, t.ex. så kan vi visa samtliga versioner av posterna som gällt mellan två tidpunkter.

Temporal tables -  bild 5

 

Den här texten var bara tänkt att ge en översikt av SQL Servers nya historiktabeller, en grundligare test och utvärdering av funktionaliteten återkommer vi till när det finns en stabilare version av SQL Server 2016 som går att ladda ner. Har du några frågor eller tankar så tveka inte att skriva en rad nedan – eller hör av dig direkt till oss på SQL Service!