Een trage website is vaak terug te voeren op inefficiënte databasequeries. Het MySQL slow query log registreert welke queries langer duren dan een ingestelde drempel, zodat je precies ziet waar de vertraging ontstaat. In dit artikel lees je hoe je het log inschakelt, hoe je de inhoud interpreteert met tools als mysqldumpslow en pt-query-digest, en welke stappen je zet om trage queries daadwerkelijk te verbeteren.
Wat is het slow query log en wanneer gebruik je het
Het slow query log is een logbestand waarin MySQL (of MariaDB) elke query vastlegt die langer duurt dan een door jou ingestelde drempelwaarde, de zogeheten long_query_time. Standaard staat deze functie uit, omdat logging altijd een kleine overhead met zich meebrengt. Toch is het inschakelen zeer de moeite waard zodra je merkt dat pagina’s traag laden, een CMS als WordPress of Magento trager reageert dan verwacht, of je server onder hoge CPU-belasting staat terwijl het bezoekersaantal niet is gestegen.
Het log geeft per query onder andere de uitvoeringstijd, het aantal onderzochte rijen en de daadwerkelijke SQL-statement. Daarmee kun je onderscheid maken tussen incidentele pieken en structureel slecht presterende queries, bijvoorbeeld door een ontbrekende index of een query die een volledige tabel scant in plaats van gebruik te maken van een index.
Slow query log inschakelen en configureren
Op de meeste servers pas je de MySQL-configuratie aan in het bestand my.cnf of via een beheerinterface zoals Plesk. De belangrijkste instellingen zijn:
slow_query_log = 1om logging in te schakelenslow_query_log_file = /pad/naar/slow-query.logvoor de locatie van het logbestandlong_query_time = 1om queries langer dan 1 seconde te loggen, pas dit aan naar een waarde die past bij jouw situatielog_queries_not_using_indexes = 1om ook queries te loggen die geen index gebruiken, zelfs als ze snel zijn
Na het aanpassen van de configuratie herstart je de MySQL-service. Houd er rekening mee dat het log snel kan groeien op een drukke server, dus controleer de bestandsgrootte regelmatig of roteer het log automatisch via logrotate.
Het log lezen en analyseren
Een ruw slow query log is lastig in één oogopslag te overzien, zeker bij veel verkeer. Gelukkig zijn er tools die het log samenvatten en de meest problematische queries bovenaan zetten.
mysqldumpslow is standaard meegeleverd en groepeert vergelijkbare queries, zodat je in één overzicht ziet welke query het vaakst voorkomt en gemiddeld het langst duurt. Een voorbeeldcommando is mysqldumpslow -s t -t 10 /pad/naar/slow-query.log, dit toont de tien traagste query-groepen gesorteerd op tijd.
pt-query-digest, onderdeel van Percona Toolkit, geeft een uitgebreidere analyse met onder meer het percentage van de totale tijd dat een querytype inneemt en details over rijen die zijn onderzocht versus geretourneerd. Dit is handig als je dieper wilt graven dan mysqldumpslow biedt.
Let bij het analyseren vooral op queries met een hoog aantal onderzochte rijen ten opzichte van het aantal geretourneerde rijen. Dat is vaak een signaal dat er een index ontbreekt. Ook herhaalde identieke queries vanuit bijvoorbeeld een CMS kunnen wijzen op een plugin of module die inefficiënt met de database omgaat.
Trage queries oplossen
Zodra je weet welke queries problematisch zijn, volgt de fase van optimalisatie. Dit is vaak maatwerk, maar onderstaande stappen vormen een goed startpunt.
Analyseer de query met EXPLAIN
Plaats EXPLAIN voor de query om te zien welk uitvoeringsplan MySQL kiest en of er een index wordt gebruikt.
Voeg ontbrekende indexen toe
Voeg indexen toe op kolommen die veel voorkomen in WHERE-, JOIN- en ORDER BY-clausules, maar vermijd overmatig indexeren omdat dit schrijfacties vertraagt.
Herschrijf inefficiënte queries
Vermijd SELECT *, beperk subqueries waar mogelijk en gebruik LIMIT bij grote resultaatsets.
Controleer tabelonderhoud
Voer regelmatig OPTIMIZE TABLE uit op tabellen met veel updates en verwijderingen om fragmentatie te beperken.
Monitor na aanpassing
Houd het slow query log aan na een wijziging om te controleren of de aanpassing daadwerkelijk effect heeft gehad.
Op serverniveau helpt het ook om te zorgen voor snelle opslag en voldoende resources. Op een server met NVMe-opslag en LiteSpeed verwerk je queries sowieso al sneller, maar structurele query-problemen los je alleen op met goede indexering en efficiënte SQL. In Plesk, zoals gebruikt bij webhosting van Tandata, vind je databasebeheertools en kun je bij twijfel altijd via support om hulp vragen bij het interpreteren van een log.
Veelgestelde vragen
Waar vind ik het slow query log bestand?
De locatie staat in de MySQL-configuratie bij slow_query_log_file. Standaard staat dit vaak in de MySQL datadirectory, maar op gedeelde hosting kan de locatie afwijken.
Beïnvloedt het slow query log de serverprestaties?
Logging brengt een kleine overhead met zich mee, maar bij een redelijke drempelwaarde is dit effect doorgaans verwaarloosbaar vergeleken met de voordelen van inzicht in trage queries.
Wat is een goede waarde voor long_query_time?
Dit hangt af van je toepassing. Voor de meeste websites is 1 tot 2 seconden een goed startpunt, waarna je kunt verfijnen op basis van wat je in het log terugziet.
Kan ik het slow query log gebruiken op gedeelde hosting?
Dat hangt af van de rechten die je hebt op de server. Bij beheerde hosting kan de provider dit vaak voor je inzien of inschakelen via het beheerpaneel.
Helpt een index altijd tegen trage queries?
Niet altijd. Een index helpt bij het sneller vinden van rijen, maar bij complexe joins of slecht geschreven queries is herschrijven van de query soms effectiever dan alleen indexeren.
Conclusie
Het MySQL slow query log is een krachtig hulpmiddel om trage queries op te sporen voordat ze je website merkbaar vertragen. Door het log correct in te schakelen, te analyseren met tools als mysqldumpslow of pt-query-digest, en vervolgens gericht indexen toe te voegen of queries te herschrijven, verbeter je de databaseprestaties structureel. Combineer dit met snelle infrastructuur voor het beste resultaat.