Tabel fragmentatie in SQL Server 2000 en 2005
Afgelopen week las ik iets over tabel fragmentatie. Hier had ik eigenlijk nog nooit van gehoord. Wel van bestandsfragmentatie en dergelijke, maar nog nooit dat tabellen ook gefragmenteerd kunnen raken.
Op zich wel logisch natuurlijk als er veel in wordt gewijzigd.
Belangrijke punten waaraan je tabel fragmentatie aan kunt herkennen zijn:
- Langzame performance
- Veel disk activiteit
- Weinig gebruik van caching
Fragmentatie treedt op wanneer er data wordt gewijzigd met INSERT
, UPDATE
en DELETE
statements.
Deze queries kunnen ervoor zorgen dat er ‘gaten’ in de pages van SQL ontstaan. Met de query
DBCC SHOWCONTIG` kun je controleren hoeveel fragmentatie in de tabellen van je database is.
Zelf was ik geschokt toen ik de resultaten zag. Er was nu al redelijk wat fragmentatie ontstaan in de tabellen van dit weblog. Dit is dan wel in de ontwikkel omgeving, maar toch.
Om de fragmentatie te reduceren kan er gebruik worden gemaakt van twee populaire queries, namelijk DBCC INDEXDEFRAG
en DBCC DBREINDEX
.
Deze twee statements kunnen in een Maintenance Plan
worden opgenomen die bijvoorbeeld iedere week of maand (afhankelijk van het gebruik van de database) kan worden uitgevoerd. Zodoende blijven de indexen up-to-date en zal de fragmentatie minimaal blijven. Belangrijk om te weten is dat het DBCC SHOWCONTIG
-statement in SQL Server 2005 is vervangen door sys.dm_db_index_physical_stats
De bovenstaande informatie heb ik grotendeels gehaald (en vertaald) van de SQL Server Performance website, https://www.sql-server-performance.com/articles/per/detect_fragmentation_sql2000_sql2005_p1.aspx Ook heb ik hier een kleine vertaling van gedaan. Meer informatie is op die website te lezen.