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

Forkert nøglefil til tabellen '/tmp/#sql_3c51_0.MYI' prøv at reparere den

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 for væ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. Punkt TMPDIR til en mappe på en diskenhed, der har mere ledig plads. Du kan også bruge tmpdir mulighed i /etc/my.cnf eller --tmpdir i kommandolinjen i mysqld-tjenesten. Se:B.5.3.5 Hvor MySQL gemmer midlertidige filer


  1. Hjælpeprogram:Generer PL/SQL-procedure til eksport af data fra en tabel på 2 minutter

  2. Opret forbindelse til mysql på Amazon EC2 fra en fjernserver

  3. Multiple indsæt SQL oracle

  4. Sådan gør du limit offset dynamisk ved kun at bruge (My)SQL