Il n'y a pas si longtemps, j'ai écrit sur le blocage ici: PDOException: SQLSTATE [40001]: échec de sérialisation: 1213 blocage trouvé lors de la tentative d'obtention du verrouillage;
Malgré tout ce que mon équipe de développement essaie de faire, nous obtenons toujours des erreurs comme celle-ci:
PDOException: SQLSTATE [40001]: échec de sérialisation: 1213 Deadlock trouvé lors de la tentative d'obtention du verrou; essayez de redémarrer la transaction: INSERT INTO {location_instance} (nid, vid, uid, genid, lid) VALUES (: db_insert_placeholder_0,: db_insert_placeholder_1,: db_insert_placeholder_2,: db_insert_placeholder_3,: db_insert_placeholder_4); Array ([: db_insert_placeholder_0] => 1059 [: db_insert_placeholder_1] => 1059 [: db_insert_placeholder_2] => 0 [: db_insert_placeholder_3] => cck: field_item_location: 1059 [: db_insert_placeholder_4] => 1000 ([97) /var/www/website.com/sites/all/modules/location/location.module).
Malgré la table spécifique de cet exemple, nous obtenons cette erreur sur d'autres tables.
Voici ma situation. J'ai pris un grand projet universitaire. À tout moment, 50 000 résidents du campus utilisent quotidiennement le système. En plus de cela, je migre des centaines de milliers d'éléments de contenu à la fois manuellement et via le code de module personnalisé (migration à partir des anciennes données universitaires) vers ce nouveau site Drupal 7.
Cette erreur nous tue, au point que nous sommes presque prêts à abandonner les dernières années de travail et à aller avec autre chose si Drupal ne peut pas gérer ce type de charge.
Mais c'est plus ou moins ma question - Comment Drupal peut-il gérer ce type de charge? Comment puis-je organiser mon flux de travail pour pouvoir gérer autant d'activités? Est-ce un problème Drupal? Un problème de base de données?
Plus précisément, j'utilise Ubuntu, LAMP stack 16GB RAM. Je suis ouvert à toute suggestion que ce soit lié à Drupal, lié à la base de données, lié à la configuration du serveur ou à un flux de travail différent pour travailler selon les capacités de Drupal, alors n'hésitez pas à suggérer quoi que ce soit si vous avez de l'expérience avec autant d'activités.
la source
Réponses:
Je travaille pour l'université de Stanford et j'ai fait des choses similaires. Nous devons constamment charger plus de 100 000 nœuds sur une base régulière. Nous travaillons sur notre propre code de chargement personnalisé depuis 2 ans et nous avons pu accélérer le processus en utilisant pcntl_fork. La seule chose dont vous devez vous souvenir est de fermer toutes les connexions de socket avant d'appeler le fork. Par exemple, vous devez fermer votre connexion mysql, votre connexion memcache et même votre connexion mongo. Drupal créera automatiquement de nouvelles connexions quand il n'en existe pas. En ce qui concerne le problème de blocage, nous avons pu résoudre ce problème en mettant
innodb_locks_unsafe_for_binlog = 1
.la source
La réponse est: configurez correctement votre fichier MySQL my.cnf.
Après un peu plus d'une semaine de recherche, j'ai trouvé que Drupal 7 peut en effet gérer ce trafic d'entrée très simultané.
Ces exceptions PDO Deadlock étaient liées au fait que le fichier MySQL my.cnf n'était pas optimisé correctement. Avec l'aide du groupe Drupal High Performance et d'autres sources, notre équipe n'a eu aucun seul blocage depuis la mise en œuvre des nouveaux paramètres de configuration pour MySQL. Nous avons testé nos scripts batch pour simuler jusqu'à 500 utilisateurs actuels en enregistrant du contenu sans problème. Découvrez le fil ici.
http://groups.drupal.org/node/260938
Plus précisément, Dalin a suggéré d'utiliser un assistant pour obtenir un fichier de configuration de base basé sur les spécifications du serveur et les types de table. Après avoir utilisé cela, même sans peaufiner davantage, les blocages se sont arrêtés. Voici un lien vers l'assistant si vous souhaitez l'essayer: https://tools.percona.com/wizard
Je serai heureux de publier le fichier my.cnf si quelqu'un le trouve utile.
Bien que le problème de blocage ne soit plus un problème, nous obtenons maintenant cette erreur très fréquemment:
Serait-ce également un problème de configuration mysql?
la source
http://dev.mysql.com/doc/refman/5.0/en/innodb-deadlocks.html cette page mysql suggère quoi faire lorsque vous rencontrez l'impasse.
En optimisant votre configuration mysql, vous pourrez résoudre ce problème.
la source