sql >> Databasteknik >  >> RDS >> Mysql

Fel nyckelfil för tabellen '/tmp/#sql_3c51_0.MYI' försök reparera den

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ör select * 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. Peka TMPDIR till en mapp på en diskvolym som har mer ledigt utrymme. Du kan också använda tmpdir 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


  1. Hur man ställer in intervallutdataformatet i PostgreSQL

  2. SQL ORDER BY-klausul för nybörjare

  3. Någon anledning att fortfarande använda ormfodral för databastabeller och kolumner?

  4. Vad är LEN() i SQL Server?