Problem spowodowany jest brakiem miejsca na dysku w folderze /tmp. Wolumin /tmp jest wykorzystywany w zapytaniach wymagających tworzenia tabel tymczasowych. Te tymczasowe tabele są w formacie MyISAM, nawet jeśli zapytanie używa tylko tabel z InnoDB.
Oto kilka rozwiązań:
- optymalizuj zapytanie, aby nie tworzyło tabel tymczasowych (przepisz zapytanie, podziel je na wiele zapytań lub dodaj odpowiednie indeksy, przeanalizuj plan wykonania za pomocą pt-query-digest
i
EXPLAIN <query>
) Zobacz ten Artykuł Percony o tymczasowych stołach . - optymalizuj MySQL, aby nie tworzył tabel tymczasowych (sort_buffer_size, join_buffer_size). Zobacz:https://dba.stackexchange.com/questions/53201/mysql-creates-temporary-tables-on-disk-how-do-i-stop-it
- zmniejszenie rozmiarów stołów. Jeśli to możliwe, usuń niepotrzebne wiersze
- użyj
SELECT table1.col1, table2,col1 ...
zamiastselect *
aby użyć tylko tych kolumn, które są potrzebne w zapytaniu, aby wygenerować mniejsze tabele tymczasowe - używaj typów danych, które zajmują mniej miejsca
- dodaj więcej miejsca na dysku na woluminie, na którym znajduje się folder /tmp
- zmień użytkownika folderu temp przez mysql, ustawiając
TMPDIR
zmienna środowiskowa przed uruchomieniem mysqld. PunktTMPDIR
do folderu na woluminie dyskowym, który ma więcej wolnego miejsca. Możesz także użyćtmpdir
opcja w/etc/my.cnf
lub--tmpdir
w wierszu poleceń usługi mysqld. Zobacz:B.5.3.5 Gdzie MySQL przechowuje pliki tymczasowe