Comment se débarrasser des problèmes de type Deadlocks et Lock time out?

17

J'ai lu plusieurs blogs, essayé de google, mais je n'ai trouvé aucune satisfaction dans aucune solution. J'ai les problèmes suivants:

PDOException: SQLSTATE[40001]: Serialization failure: 1213 Deadlock found when trying to get lock; try restarting transaction: DELETE FROM {cache_field} WHERE (cid LIKE :db_condition_placeholder_0 ESCAPE '\\') ; Array ( [:db_condition_placeholder_0] => field\_info:% ) in cache_clear_all() (line 163 of \includes\cache.inc).

PDOException: SQLSTATE[HY000]: General error: 1205 Lock wait timeout exceeded; try restarting transaction: SELECT 1 AS expression FROM {sessions} sessions WHERE ( (sid = :db_condition_placeholder_0) AND (ssid = :db_condition_placeholder_1) )

J'ai essayé de résoudre ce problème en augmentant innodb_pool_buffer_sizeet wait_timeoutdans my.ini, mais cela n'a pas fonctionné.

J'ai changé le moteur de ma table de cache d'Innodb en MyIasm. Le problème a disparu mais ce n'est pas une solution parfaite. Le moteur de table sera modifié après une mise à niveau de drupal. Ce problème n'affecte rien sur le site mais je ne veux pas que cela se produise.

Des gars de solution?

Sumit Madan
la source
Exécutez-vous périodiquement cron? Se termine-t-il avec succès?
mpdonadio
Oui, cron fonctionne correctement.
Sumit Madan
Qu'est-ce qui vous fait penser que le moteur de table de cache sera modifié lors de la mise à niveau? Ce n'est pas mon expérience.
Keithm
Je veux dire que si je mets à jour le Drupal, la table de cache sera changée de MyIasm à Innodb. Non???
Sumit Madan

Réponses:

16

Lisez et suivez ce post ; cela suppose InnoDB.

En particulier, voir la partie disant d'ajouter ce qui suit au fichier settings.php.

$databases['default']['default']['init_commands'] = array('isolation' => "SET SESSION tx_isolation='READ-COMMITTED'");
mikeytown2
la source
Dans le lien donner, il ne parle que de blocage cache_field. Mais sur mon site, le blocage et le délai d'attente de verrouillage se produisent sur toutes les tables de cache.
Sumit Madan
Hé Mike, merci pour le lien. J'ai vérifié votre autre message et l'ajout à settings.php a $databases['default']['default']['init_commands'] = array('isolation' => "SET SESSION tx_isolation='READ-COMMITTED'");résolu mon problème sur mon serveur local. Je ne l'ai pas encore vérifié sur le serveur en direct. Veuillez confirmer qu'il ne posera aucun problème à l'avenir s'il est testé par vous? J'utilise Commerce kickstart.
Sumit Madan
J'utilise toutes les recommandations en direct, les rapports entendus que drupal.org utilise read engagés. Assurez-vous également d'utiliser la dernière version de d7 car elle a également un correctif de blocage.
mikeytown2
1
Mikeytown2 D'après ce que vous dites, j'ai compris que maintenant les versions drupal 7 ont résolu ce problème? Je me pose des questions à ce sujet car je rencontre toujours le même problème dans la dernière version.
Marko Blazekovic
1
@MarkoBlazekovic La plupart des principaux problèmes de blocage sont à moitié résolus dans D7. Il existe encore des problèmes de blocage et de verrouillage des métadonnées avec les tables de cache de base de données. Je travaille sur un module pour les résoudre: drupal.org/project/apdqc . APDQC de mes tests résout à peu près tous les problèmes de verrouillage de base de données en ce qui concerne les tables de cache. Assurez-vous de résoudre tous les problèmes sur le rapport d'état une fois qu'il a été installé. Notez que le module est toujours en cours de développement, car je n'ai pas encore publié de version non-dev de celui-ci.
mikeytown2
4

Le meilleur moyen de se débarrasser des erreurs de blocage une fois pour toutes est le module Asynchronous Prefetch Database Query Cache .

Je ne le recommanderai jamais assez. Brillamment écrit et de grands gains de performances.

bmunslow
la source