Maison > base de données > tutoriel mysql > 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
Libérer: 2023-05-26 19:07:05
avant
2863 Les gens l'ont consulté

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';
Copier après la connexion

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

-- on为开启,off为关闭
set autocommit=off;
-- 或者1为开启,0为关闭
set autocommit=0;
Copier après la connexion

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;
Copier après la connexion

Interrogez la transaction en cours d'exécution :

SELECT * FROM information_schema.INNODB_TRX;
Copier après la connexion

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;
Copier après la connexion

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;)
Copier après la connexion

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;
Copier après la connexion

Supprimer les enregistrements de verrouillage

ALTER system KILL session 'SID,serial#';
Copier après la connexion

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!

Étiquettes associées:
source:yisu.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal