Het probleem wordt veroorzaakt door het gebrek aan schijfruimte in de /tmp-map. Het /tmp-volume wordt gebruikt in query's waarvoor tijdelijke tabellen moeten worden gemaakt. Deze tijdelijke tabellen hebben de MyISAM-indeling, zelfs als de query alleen tabellen met InnoDB gebruikt.
Hier zijn enkele oplossingen:
- optimaliseer de query zodat er geen tijdelijke tabellen worden gemaakt (herschrijf de query, splits deze in meerdere query's of voeg de juiste indexen toe, analyseer het uitvoeringsplan met pt-query-digest
en
EXPLAIN <query>
) Zie deze Percona-artikel over tijdelijke tabellen . - optimaliseer MySQL zodat het geen tijdelijke tabellen maakt (sort_buffer_size, join_buffer_size). Zie:https://dba.stackexchange.com/questions/53201/mysql-creates-temporary-tables-on-disk-how-do-i-stop-it
- maak tabellen kleiner. Verwijder indien mogelijk onnodige rijen
- gebruik
SELECT table1.col1, table2,col1 ...
in plaats vanselect *
om alleen de kolommen te gebruiken die u in de query nodig hebt, om kleinere tijdelijke tabellen te genereren - gebruik gegevenstypen die minder ruimte innemen
- voeg meer schijfruimte toe op het volume waar de map /tmp zich bevindt
- wijzig de tijdelijke mapgebruiker door mysql door de
TMPDIR
in te stellen omgevingsvariabele voorafgaand aan het opstarten van mysqld. PuntTMPDIR
naar een map op een schijfvolume met meer vrije ruimte. U kunt ooktmpdir
. gebruiken optie in/etc/my.cnf
of--tmpdir
in de opdrachtregel van de mysqld-service. Zie:B.5.3.5 Waar MySQL tijdelijke bestanden opslaat