woensdag 2 december 2009

Trage Microsoft SQL server

SQL server-problemen

Er wordt veel gebruik gemaakt van het product Microsoft SQL-servers door bedrijven. Administratie-pakketten, CRM, HRM, facturatie, CMS, ..... kortom bijna alles wat op dotnet draait maakt er gebruik van.

Als databases langer in gebruik zijn ontstaat er vaan onvrede over de performance. Deze onvrede is moeizaam op te sporen en weg te nemen.



Een oorzaak van vele problemen is SQL Server index-fragmentatie.


Wat is een SQL Server index?

Binnen Microsoft SQL server wordt er gebruik gemaakt van zogenaamde indexen. Indexen kunnen worden vergeleken met een woordenlijst in een boek. In een woordenlijst staan alle woorden die in het boek voorkomen met het bijbehorende pagina nummer. Voor Microsoft SQL server geldt hetzelfde. Voor elke kolom in een tabel kan een index worden aangemaakt. In deze index komen de waarde uit de desbetreffende kolom met een nummer van de bladzijde waar de regel in kwestie op staat. Op deze manier kan Microsoft SQL server de regel snel terug vinden aan de hand van een waarde in een kolom.


Wat is index fragmentatie

Indexen kunnen niet realtime in perfecte staat worden bijgehouden. Door het gebruik van de database zal de index gefragmenteerd raken. Hierdoor neemt het positieve effect van de index af en kan het zelfs een negatief effect geven.


Index niet geordend

Bij de meeste tabellen binnen een database worden er veel regels aangemaakt en verwijderd. Hierdoor moet de index van die tabel telkens bijgewerkt worden. Het kost teveel tijd om nieuwe waardes in de index op de hardeschijf tussen te voegen. De nieuwe waardes worden dus achteraan de index toegevoegd. Als Microsoft SQL server de index uitleest sorteert hij deze. Dit fenomeen heet index fragmentatie. Het sorteren van een index kost extra tijd waardoor een index uiteindelijk een negatief effect heeft op de snelheid van Microsoft SQL server.
Missende delen van een index

Wanneer er veel regels uit een tabel worden verwijderd vallen er gaten in de index. Deze gaten worden bij het lezen van de index wel gelezen. Echter staat er geen informatie in. Daardoor is het dus zonde van leestijd.


Wat zijn vulfactoren?

Bij het aanmaken / herindexeren van een index kan de vulfactor worden opgegeven. Dit zorgt ervoor dat er op elke bladzijde binnen de index ruimte wordt vrijgehouden voor woorden die later nog worden toegevoegd. De standaard vulfactor kan in Microsoft SQL Server worden ingesteld. Ook kan per index een vulfactor worden ingevuld. Door het instellen van een vulfactor wordt voorkomen dat een index gefragmenteerd raakt.


Microsoft SQL Server index onderhoud

Om fragmentatie tegen te gaan dient er een taak op de SQL server aangemaakt te worden die periodiek indexen gefragmenteerd. Door indexen te defragmenteren wordt er zeker gesteld dat indexen altijd een positief effect hebben en er altijd het meeste uit SQL server wordt gehaald.

Geen opmerkingen:

Een reactie posten