Dépannage et résolution de l'impasse mysql

Quatre conditions qui provoquent un blocage mysql :

1. Condition mutuellement exclusive: une ressource ne peut être occupée que par un processus et ne peut pas être occupée par deux processus ou plus

 

2. Condition non préemptive: les ressources déjà acquises par le processus ne peuvent pas être préemptées avant d'être utilisées et ne peuvent être libérées qu'après utilisation

 

3. Conditions d'application de possession: le processus a déjà maintenu au moins une ressource et demandé d'autres ressources, mais cette ressource est occupée par d'autres processus, et elle ne libère pas les ressources qu'elle a déjà occupées

 

4. Condition d'attente cyclique: lorsqu'un blocage se produit, une boucle de processus-ressources doit être formée. Processus ensemble {p1 , p2 , p3} sont, p1 demande p2 possession des ressources, p2 demande p3 possession des ressources, p3 demande p1 ressources occupées


Solutions pour résoudre l'impasse

Le premier:

1. Demandez s'il faut verrouiller la table

affichez les tableaux ouverts où In_use> 0;

 

2. Processus de requête (si vous avez l' autorisation SUPER , vous pouvez voir tous les threads. Sinon, vous ne pouvez voir que vos propres threads)

afficher la liste complète des processus;

 

3. Tuez l' ID de processus (la colonne id de la commande ci - dessus )

tuer le processus id


Le deuxième type:

1. Affichez la transaction sous verrou

SELECT * FROM INFORMATION_SCHEMA.INNODB_TRX;

 

2. Tuez l' ID de processus (la colonne trx_mysql_thread_id de la commande ci - dessus )

tuer le processus id


Analyse:

1. Affichez le niveau d'isolement de la base de données (généralement RR : REPEATABLE-READ ):

mysql> sélectionnez @@ tx_isolation;

mysql> sélectionnez @@ global.tx_isolation;

 

2 , InnoDB état du moteur --- il y aura une information de blocage ( MyISAM moteur de stockage n'interblocage pas relevé)

mysql> AFFICHER LE STATUT INNODB DU MOTEUR;

3 , mysql est autocommit , il n'y aura pas de mise à jour bloquée, vérifiez la valeur de autocommit

mysql> sélectionnez @@ autocommit;

1 signifie soumission automatique. 0 signifie aucune soumission automatique.

Si vous trouvez votre base de données autocommit = 0 , corrigez-la.

Je suppose que tu aimes

Origine blog.51cto.com/9625010/2486571
conseillé
Classement