Problemet orsakas av bristen på diskutrymme i /tmp-mappen. /tmp-volymen används i frågor som kräver att temporära tabeller skapas. Dessa tillfälliga tabeller är i MyISAM-format även om frågan endast använder tabeller med InnoDB.
Här är några lösningar:
- optimera frågan så att den inte skapar tillfälliga tabeller (skriv om frågan, dela upp den i flera frågor eller lägg till korrekta index, analysera exekveringsplanen med pt-query-digest
och
EXPLAIN <query>
) Se denna Percona-artikel om tillfälliga bord . - optimera MySQL så att det inte skapar temporära tabeller (sort_buffer_size, join_buffer_size). Se:https://dba.stackexchange.com/questions/53201/mysql-creates-temporary-tables-on-disk-how-do-i-stop-it
- gör tabeller mindre. Om möjligt, ta bort onödiga rader
- använd
SELECT table1.col1, table2,col1 ...
istället förselect *
för att bara använda de kolumner som du behöver i frågan, för att generera mindre temporära tabeller - använd datatyper som tar mindre plats
- lägg till mer diskutrymme på volymen där /tmp-mappen finns
- ändra användaren av den tillfälliga mappen med mysql genom att ställa in
TMPDIR
miljövariabel innan mysqld startar. PekaTMPDIR
till en mapp på en diskvolym som har mer ledigt utrymme. Du kan också användatmpdir
alternativet i/etc/my.cnf
eller--tmpdir
i kommandoraden i mysqld-tjänsten. Se:B.5.3.5 Där MySQL lagrar tillfälliga filer