Mysql
 sql >> Database >  >> RDS >> Mysql

File chiave errato per la tabella '/tmp/#sql_3c51_0.MYI' prova a ripararlo

Il problema è causato dalla mancanza di spazio su disco nella cartella /tmp. Il volume /tmp viene utilizzato nelle query che richiedono la creazione di tabelle temporanee. Queste tabelle temporanee sono in formato MyISAM anche se la query utilizza solo tabelle con InnoDB.

Ecco alcune soluzioni:

  • ottimizza la query in modo che non crei tabelle temporanee (riscrivi la query, suddividila in più query o aggiungi indici appropriati, analizza il piano di esecuzione con pt-query-digest e EXPLAIN <query> ) Vedi questo Articolo Percona sulle tabelle temporanee .
  • ottimizza MySQL in modo che non crei tabelle temporanee (sort_buffer_size, join_buffer_size). Vedi:https://dba.stackexchange.com/questions/53201/mysql-creates-temporary-tables-on-disk-how-do-i-stop-it
  • rimpicciolire i tavoli. Se possibile, elimina le righe non necessarie
  • usa SELECT table1.col1, table2,col1 ... invece di select * per utilizzare solo le colonne di cui hai bisogno nella query, per generare tabelle temporanee più piccole
  • utilizza tipi di dati che occupano meno spazio
  • aggiungi più spazio su disco sul volume in cui risiede la cartella /tmp
  • cambia l'utente della cartella temporanea con mysql impostando il TMPDIR variabile di ambiente prima dell'avvio di mysqld. Punto TMPDIR in una cartella su un volume del disco che dispone di più spazio libero. Puoi anche usare tmpdir opzione in /etc/my.cnf o --tmpdir nella riga di comando del servizio mysqld. Vedere:B.5.3.5 Dove MySQL memorizza i file temporanei