Maison  >  Article  >  base de données  >  Comment résoudre le problème de la base de données MySQL bloquée lors de l'exécution de la mise à jour

Comment résoudre le problème de la base de données MySQL bloquée lors de l'exécution de la mise à jour

WBOY
WBOYavant
2023-05-26 19:07:052772parcourir

Analyse des problèmes

Habituellement, la transaction de base de données n'est pas soumise, ce qui entraîne le blocage de la mise à jour ou de la suppression.

Solution

  1. Après avoir effectué des mises à jour ou des suppressions, n'oubliez pas de soumettre la transaction à valider ;

  2. Trouvez le client de la base de données et effectuez l'opération de validation.

Si ça ne marche toujours pas. Lorsque la base de données ne parvient pas à effectuer une opération sur les données ou que la transaction n'est pas validée, elle verrouille l'instruction SQL qui doit être exécutée.

Processus de reproduction et solution

Affichez l'état de soumission automatique de la base de données via la commande suivante

show variables like 'autocommit';

Désactivez la soumission automatique automatique de la base de données via SQL

-- on为开启,off为关闭
set autocommit=off;
-- 或者1为开启,0为关闭
set autocommit=0;

Les données du tableau sont les suivantes :

Comment résoudre le problème de la base de données MySQL bloquée lors de lexécution de la mise à jour

Ouvrez deux fenêtres pour exécuter la mise à jour séparément Opération

update car set color ='银色' where id = 1;
update car set color ='红色' where id = 1;

Interrogez la transaction en cours d'exécution :

SELECT * FROM information_schema.INNODB_TRX;

Comment résoudre le problème de la base de données MySQL bloquée lors de lexécution de la mise à jour

Selon l'ID de thread (trx_mysql_thread_id) de la transaction dans l'image, nous pouvons voir le thread mysql correspondant : un est 1084 (la mise à jour attend le verrou) et l'autre est 1089 (les transactions de mise à jour sont en cours d'exécution sans validation)

Vous pouvez utiliser la commande mysql pour tuer le thread : kill thread id

kill 1089;

Si le thread tient le verrou n'est pas supprimé pendant la période : la deuxième instruction de mise à jour vous demandera d'attendre l'expiration du délai du verrou.

Comment résoudre le problème de la base de données MySQL bloquée lors de lexécution de la mise à jour

Commandes associées :

-- 查看正在锁的事务
SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCKS; 

-- 查看等待锁的事务
SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCK_WAITS;
-- 查询mysql数据库中存在的进程
select * from information_schema.`PROCESSLIST`(show processlist;)

Extended

Méthode d'opération Oracle :

Requête des enregistrements de verrouillage

SELECT s.sid, s.serial# FROM v$locked_object lo, dba_objects ao, v$session s WHERE ao.object_id = lo.object_id AND lo.session_id = s.sid;

Supprimer les enregistrements de verrouillage

ALTER system KILL session 'SID,serial#';

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer