Gerelateerde artikelen
Snelle optimalisaties voor MySQL
Armijn Hemel,
2 augustus 2009,
2792 views.
Als data weggegooid wordt uit een MySQL database wordt er vaak (afhankelijk van de gebruikte storage engine) nog een beetje ruimte in beslag genomen. Deze ruimte wordt bij het optimaliseren van de database weer vrijgegeven. Met een simpel script kan je dit door cron laten doen.
Als je een MySQL database beheert en er wel eens data uit hebt weggehaald dan ben je ongetwijfeld wel eens tegen 'overhead' aangelopen. Overhead is de ruimte waar de data bewaard werd, maar die nog niet is vrijgegeven of is hergebruikt. Als je de database optimaliseert wordt deze data weer vrijgegeven, wat weer diskruimte en geheugen scheelt. Met een paar kleine databases zal je dit niet echt merken, maar met veel databases, of een paar grote databases kan het flink aantikken.
Met het mysqlcheck commando kan je databases makkelijker optimaliseren. Met een simpel script automatiseer je dit voor alle databases op je systeem:
#!/bin/sh
DATABASES=`mysql --defaults-file=/home/mysql/.my.cnf -B -e "show databases" | \
grep -v Database | grep -v information_schema`
for DB in $DATABASES; do
mysqlcheck --defaults-file=/home/mysql/.my.cnf -o $DB | \
grep -v "already up to date" | grep -v "OK" | \
grep -v "The storage engine for the table doesn't support optimize"
done
Het script vraagt eerst aan de MySQL server welke databases er zijn en optimaliseert ze vervolgens, ongeacht of er wel overhead is of niet en of de storage engine optimalisatie ondersteunt. Draai dit scriptje vanuit cron (wij draaien het één keer per week) en problemen met gigantische hoeveelheden overhead zouden zich niet meer voor moeten doen.
Op dit werk is een Creative Commons Licentie van toepassing.










