Il y a deux choses que vous pouvez faire pour en réduire l'impact
OPTION #1 :Augmenter les variables tmp_table_size et/ou max_heap_table_size
Ces options régiront la taille d'une table temporaire en mémoire avant qu'elle ne soit jugée trop grande, puis les pages sur le disque en tant que table MyISAM temporaire. Plus ces valeurs sont élevées, moins vous aurez de chances d'obtenir une "copie vers la table tmp sur le disque". Veuillez vous assurer que votre serveur dispose de suffisamment de RAM et max_connexions est modérément configuré si une seule connexion DB a besoin de beaucoup de RAM pour ses propres tables temporaires.
OPTION #2 :Utiliser un disque RAM pour les tables tmp
Vous devriez pouvoir configurer un disque RAM sous Linux, puis définir le tmpdir dans mysql pour être le dossier dans lequel le disque RAM est monté.
Pour commencer, configurez un disque RAM dans le système d'exploitation
Créez un dossier dans Linux appelé /var/tmpfs
mkdir /var/tmpfs
Ensuite, ajoutez cette ligne à /etc/fstab (par exemple, si vous voulez un disque RAM de 16 Go)
none /var/tmpfs tmpfs defaults,size=16g 1 2
et redémarrez le serveur.
Note :Il est possible de faire un disque RAM sans rebooter. N'oubliez pas de toujours ajouter la ligne susmentionnée à /etc/fstab pour avoir le disque RAM après un redémarrage du serveur.
Maintenant pour MySQL :
Ajoutez cette ligne dans /etc/my.cnf
[mysqld]
tmpdir=/var/tmpfs
et redémarrez mysql.
OPTION #3 :Obtenez la table tmp dans le disque RAM dès que possible (en supposant que vous appliquiez d'abord l'OPTION #2)
Vous voudrez peut-être forcer les tables tmp dans le disque RAM aussi rapidement que possible afin que MySQL ne fasse pas tourner ses roues en migrant de grandes tables tmp en mémoire vers un disque RAM. Ajoutez simplement ceci à /etc/my.cnf :
[mysqld]
tmpdir=/var/tmpfs
tmp_table_size=2K
et redémarrez mysql. Cela entraînera la création de la plus petite table temporaire directement dans le disque RAM. Vous pouvez périodiquement exécuter ls -l /var/tmpfs
pour regarder les tables temporaires aller et venir.
Essayez-le !!!
MISE EN GARDE
Si vous ne voyez que des tables temporaires dans /var/tmpfs 24h/24 et 7j/7, cela pourrait avoir un impact sur les fonctionnalités/performances du système d'exploitation. Pour vous assurer que /var/tmpfs n'est pas surpeuplé, envisagez de régler vos requêtes. Une fois cela fait, vous devriez voir moins de tables tmp se matérialiser dans /var/tmpfs.