PDA

Voir la version complète : Table session pleine


Sophocle
06/01/2004, 16h28
J'ai lu à plusieurs reprises que certains forums se retrouvaient bloqués avec un message d'erreur du type "Table session full". Cette erreur indique que la table session est pleine. Or, quand on va consulter la base, on s'aperçoit que la table ne contient pas énormément d'enregistrements. Qu'est-ce qui peut bien justifier un tel message d'erreur ?

En fait, il existe deux types de tables dans MySQL.

Le type par défaut est le type MyISAM. Les tables au format MyISAM sont stockées dans un répertoire, sur le disque dur du serveur.
Les tables de type HEAP sont, à l'inverse, uniquement stockées en mémoire vive. Elles sont très utiles pour stocker des données temporaires, telles que celles relatives aux sessions. La technique de hashage et de stockage des données les rend accessible beaucoup plus rapidement (gain moyen d'environ 30% sur toutes les requêtes).

L'inconvénient des tables HEAP, c'est qu'elles peuvent disparaître en cas de redémarrage du serveur, d'où la nécessité de n'y stocker que des données temporaires, en tout cas non indispensables. En outre, ces tables étant chargées en mémoire vive, elles peuvent rapidement mettre à genou un serveur (imaginez un serveur mutualisé avec 50 sites dessus).

Afin d'éviter les risques de ralentissement, MySQL a imposé certaines contraintes pour la création des tables HEAP (pas de champs Blob par exemple). Certains hébergeurs ajoutent en plus un plafond de nombre d'enregistrements aux tables HEAP pour ne pas saturer leurs serveurs (c'est le cas d'ovh en mutualisé).

Si vous recevez un message d'erreur causé par une session pleine, vous avez deux possibilités.

Soit vous videz manuellement la table session pour rendre votre forum à nouveau accessible. C'est la solution brutale qui ne résoud que temporairement le problème. Dès que latalbe sera pleine, il faudra renouveler l'opération.
Soit vous changez le type de la table session pour la passer en MyISAM. La perte de rapidité sera en moyenne inférieure à 2% étant donné que les requêtes représentes environ 1/5 du temps de création de la page et que sur ces 20%, il y a plusieurs requêtes dont une seule sur une table HEAP.

Pour changer le type de la table, voici l'instruction MySQL à exécuter :
"ALTER table session TYPE=MyISAM"

Si vous trouvez que votre forum est trop ralenti, il suffit d'exécuter l'instruction inverse :
"ALTER TABLE session TYPE=HEAP"

N'oubliez pas de toujours procéder à une sauvegarde avant d'intervenir sur vos bases :)