Saturday, April 28, 2007

Optimering utav SQL server. Underhålla Indexen

Underhålla indexen
För att hålla indexen optimerade krävs att man frekvent kör optimeringsjobb för att indexen skall vara uppdaterade. Beroende på hur mycket som ändras och läggs till i en tabell så måste dessa jobb köras mer eller mindra ofta. Vilka index behöver då underhåll? Ett bra sätt att se detta är att kolla vilka querys som tar tid och används frekvent. Detta kan vi göra i SQL Profilern med hjälp utav templaten SQLProfilerTSQL_Duration. Querys som tar tid är ett bra alternativ för att se över indexen för.
I SQL 2000 kör vi dbcc dbreindex eller dbcc indexdefrag för att optimera indexen. Skillnaden mellan dessa två är att indexdefrag går att köra online, dvs indexet är tillgängligt under operationen. Dbcc dbreindex är att föredra om det är hög fragmentering i indexet och du kan även välja fyllnadsgrad.

Kommandon för SQL 2000:
DBCC DBREINDEX ('tabellnamn', '',80);
DBCC INDEXDEFRAG ('databasnamn', 'tabellnamn', 'indexnamn')


I SQL 2005 har man ersatt dbcc dbreindex och indexdefrag med Alter index och rebuild eller reorganize. Man har även möjlighet att göra rebuild online och att välja att sorteringen skall göras i tempdb, vilket kan vara bra ur prestandard synpunkt. Kräver dock att tempdb ligger på en egen diskyta annars gör det ingen nytta.

Kommandon för SQL 2005:
Alter index all (för alla index i tabellen)
On tabellnamnet
Rebuild with (fillfactor = 80, SORT_IN_TEMPDB = ON, ONLINE = ON);



Är avg_fragmentation_in_percent value mindre än 30% så välj REORGANIZE.
Alter index all (för alla index i tabellen)
On tabellnamnet
Reorganize;

No comments: