Mysql
 sql >> Base de données >  >> RDS >> Mysql

Fichier de clé incorrect pour la table '/tmp/#sql_3c51_0.MYI' essayez de le réparer

Le problème est causé par le manque d'espace disque dans le dossier /tmp. Le volume /tmp est utilisé dans les requêtes qui nécessitent de créer des tables temporaires. Ces tables temporaires sont au format MyISAM même si la requête n'utilise que des tables avec InnoDB.

Voici quelques solutions :

  • optimisez la requête afin qu'elle ne crée pas de tables temporaires (réécrivez la requête, divisez-la en plusieurs requêtes ou ajoutez des index appropriés, analysez le plan d'exécution avec pt-query-digest et EXPLAIN <query> ) Voir ceci Article Percona sur les tables temporaires .
  • optimisez MySQL pour qu'il ne crée pas de tables temporaires (sort_buffer_size, join_buffer_size). Voir :https://dba.stackexchange.com/questions/53201/mysql-creates-temporary-tables-on-disk-how-do-i-stop-it
  • rendre les tables plus petites. Si possible, supprimez les lignes inutiles
  • utilisez SELECT table1.col1, table2,col1 ... au lieu de select * pour n'utiliser que les colonnes dont vous avez besoin dans la requête, pour générer des tables temporaires plus petites
  • utiliser des types de données qui occupent moins d'espace
  • ajouter plus d'espace disque sur le volume où réside le dossier /tmp
  • modifiez l'utilisateur du dossier temporaire par mysql en définissant le TMPDIR variable d'environnement avant le démarrage de mysqld. Point TMPDIR vers un dossier sur un volume de disque disposant de plus d'espace libre. Vous pouvez également utiliser tmpdir option dans /etc/my.cnf ou --tmpdir dans la ligne de commande du service mysqld. Voir :B.5.3.5 Où MySQL stocke les fichiers temporaires