web-dev-qa-db-fra.com

quelle est une valeur raisonnable pour max_allowed_packet pour Drupal 7 avec un trafic modéré?

J'ai besoin de connaître un certain nombre de paramètres pour cette variable pour mon site drupal 7. J'ai récemment reçu une exception PDO "drupal": SQLSTATE [08S01]: Erreur de liaison de communication: 1153 ". Je suis un débutant à mysql et utilise l'hébergement mutualisé. J'ai probablement besoin de demander à l'administrateur de le faire pour moi.

Merci d'avance.

12
Patrick Cheung

J'ai vu une réponse intéressante à une question sur le plus gros BLOB que vous pourriez avoir. Voici la déclaration que j'ai vue dans ServerFault: innodb_log_file_size et innodb_log_buffer_size combinés doivent être plus grands que dix fois votre plus grand objet blob si vous en avez beaucoup de gros .

Sur la base de cette publication ServerFault de Nils-Anders Nøttseter , vous devez interroger le tableau et découvrir quel BLOB est le plus grand, multipliez ce nombre par 11 ou plus, et utilisez cette réponse comme max_allowed_packet à l'avenir.

C'est drôle que J'ai adressé une autre question où j'ai suggéré de dimensionner le paquet max_allowed pour résoudre le problème .

CAVEAT

Selon le livre

TheBookImage

Voici ce que la page 99 paragraphes 1-3 dit à propos des paquets MySQL:

Le code de communication réseau MySQL a été écrit en supposant que les requêtes sont toujours raisonnablement courtes, et peuvent donc être envoyées et traitées par le serveur en un seul morceau, qui est appelé paquet dans la terminologie MySQL. Le serveur alloue la mémoire à un tampon temporaire pour stocker le paquet, et il en demande suffisamment pour l'adapter entièrement. Cette architecture nécessite une précaution pour éviter que le serveur manque de mémoire --- un plafond sur la taille du paquet, ce que cette option accomplit.

Le code d'intérêt par rapport à cette option se trouve dans sql/net_serv.cc . Jetez un œil à my_net_read () , puis suivez l'appel à my_real_read () et portez une attention particulière à net_realloc () .

Cette variable limite également la longueur d'un résultat de nombreux fonctons de chaîne. Voir sql/field.cc et sql/intem_strfunc.cc pour plus de détails .

En sachant cela sur les paquets MySQL, un administrateur de base de données peut les dimensionner pour accueillir plusieurs BLOB dans un même paquet MySQL, même s'ils sont odieusement volumineux.

En ce qui concerne votre situation, vous devez savoir quel est le plus gros BLOB de votre base de données, multiplier ce nombre par 11 et définir votre max_allowed_packet = à ce nombre. Vous devriez pouvoir le définir pour le serveur sans redémarrer mysql (Personnellement, je le définirais 256M car cela résoudrait d'autres problèmes concernant la migration et la réplication, ce qui dépasse le cadre de ce forum). Pour le définir sur 256M pour votre base de données pour toutes les connexions entrantes, veuillez exécuter ceci:

SET GLOBAL max_allowed_packet = 1024 * 1024 * 256;

Ensuite, ajoutez ce paramètre à my.cnf sous le [mysqld] section:

[mysqld]
max_allowed_packet = 256M
12
RolandoMySQLDBA

Tiré de Drupal's Database Server Requirements page:

Il peut être nécessaire de définir la variable système max_allowed_packet sur au moins 16M. Certains plans d'hébergement peu coûteux définissent cette valeur trop bas (la valeur par défaut de MySQL n'est que de 1M). Dans ce cas, vous devrez peut-être choisir un meilleur plan d'hébergement. Une valeur de 1M peut être suffisante pour Drupal 5.

Cela devrait convenir à un site d'hébergement mutualisé.

4
Phizes

Il peut être un peu difficile de définir max_allowed_packet . Je n'ai pas encore trouvé de méthode pour calculer cette valeur. En général, je le rencontre lorsque j'essaie de restaurer un instantané de base de données qui inclut des lignes de {cache} les tables.

Quand j'ai ce problème, je choisirai une valeur entre 4M et 8M. Je continue à augmenter la valeur jusqu'à ce qu'elle s'arrête. Cependant, je ne sais pas si un hôte partagé changera cette valeur pour vous.

2
mpdonadio