Problemet er forårsaget af manglen på diskplads i /tmp-mappen. /tmp-volumenet bruges i forespørgsler, der kræver oprettelse af midlertidige tabeller. Disse midlertidige tabeller er i MyISAM-format, selvom forespørgslen kun bruger tabeller med InnoDB.
Her er nogle løsninger:
- optimer forespørgslen, så den ikke opretter midlertidige tabeller (omskriv forespørgslen, opdel den i flere forespørgsler, eller tilføj korrekte indekser, analyser udførelsesplanen med pt-query-digest
og
EXPLAIN
) Se denne Percona-artikel om midlertidige borde . - optimer MySQL, så det ikke vil oprette midlertidige 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 tabellerne mindre. Hvis det er muligt, skal du slette unødvendige rækker
- brug
SELECT table1.col1, table2,col1 ...
i stedet forvælg *
kun at bruge de kolonner, du har brug for i forespørgslen, til at generere mindre midlertidige tabeller - brug datatyper, der tager mindre plads
- tilføj mere diskplads på den diskenhed, hvor /tmp-mappen er
- ændre den midlertidige mappebruger af mysql ved at indstille
TMPDIR
miljøvariabel før opstart af mysqld. PunktTMPDIR
til en mappe på en diskenhed, der har mere ledig plads. Du kan også brugetmpdir
mulighed i/etc/my.cnf
eller--tmpdir
i kommandolinjen i mysqld-tjenesten. Se:B.5.3.5 Hvor MySQL gemmer midlertidige filer