SQL server partitionering – defragmentering av index

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

Fragmentering av index uppstår vid INSERT, DELETE och UPDATE. Denna fragmentering påverkar prestandan negativt i SELECT satser, ju mer fragmentering desto långsammare SELECTs. För att åter öka prestandan så finns det två sätt att defragmentera index, med REBUILD eller REORGANIZE. Av dessa två så går det bara att exekvera REORGANIZE online i SQL server Standard, medan i SQL server 2005/2008 Enterprise går båda att exekvera online.  Utöver online REBUILD är det möjligt att partitionera index i Enterprise edition för att öka prestandan tack vare partitionseliminering, dvs att med horisontella partitioner så minskas mängden information som måste sökas igenom vid index scan/seek som bara berör ett fåtal partitioner.  Genom partitionerade index öppnas också möjligheten att defragmentera delar av index genom de enskilda partitionerna.

MEN se upp! Då är inte REBUILD en online operation längre! Detta innebär att indexet är låst för under tiden det tar att defragmentera indexet. Okej, då tänker du kanske: “Ska jag då fortsätta att bygga om hela indexet online med REBUILD även fast det bara är sista partitionen som är fragmenterad?” Som vanligt är svaret: “It depends!”  Det beror på hur lång tid det tar att bygga om de enskilda partitionerna, hur lång tid det får ta och hur långt service fönster du har.

Som konsult på SQL service har jag implementerat partitionerade index hos en kund med mer än 500 000 000 rader i den största tabellen. Att bygga om samtliga index på sista partitionen som innehåller ca 20 000 000 rader tog enbart 30 sekunder! Innan partitioneringen tog det 1,5h  att bygga om samma index för hela tabellen. Valet i detta läge är ganska uppenbart, att låta hela systemet belastas hårt under 1,5h medan index byggdes om online var inte att tänka på.  

Läs mer om partitionering på: http://msdn.microsoft.com/en-us/library/ms345146(SQL.90).aspx http://msdn.microsoft.com/en-us/library/ms188388.aspx /Håkan Winther