Row versioning & Page splits

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

Row versioning var något som kom i och med SQL Server 2005. Kort sagt innebär det att man undviker låsningar vid läsning genom att lyfta versioner av rader till tempdb.

Det finns två properties man kan sätta på databasen för att åstadkomma detta: ALTER DATABASE XXXX SET READ_COMMITTED_SNAPSHOT ON Eller ALTER DATABASE XXXX SET ALLOW_SNAPSHOT_ISOLATION ON

Tanken med detta bloginlägg är inte att förklara skillnaden på dessa varianter, utan snarare att belysa två saker man bör tänka på innan man bestämmer sig för någon av dessa:

Tempdb: Eftersom databasen lyfter versioner av rader till tempdb kommer tempdb att växa, och därmed kommer även lasten på tempdb att öka. Man bör alltså ha koll på hur tempdb mår extra noga efter att man enablat någon av ovanstående.

Radstorlek i databasen: Internt kommer SQL Server att lägga på 14 byte på varje rad som pekare till radversionerna i tempdb. Databasen kommer alltså att växa och i och med att raderna ökar i storlek kan man även råka ut för page splits om man har välfyllda “pages”. Man bör alltså hålla koll på fragmentering efter att man slagit på någon av snapshot varianterna. Som vanligt så beror ju detta på hur stor databas man har, vilken fill factor man använt sig av osv.