zvvq技术分享网

mysql死锁怎么复现(mysql 死锁处理)

作者:zvvq博客网
导读死锁是指多个进程互相等待而无法执行的情况。在 mysql 中,死锁通常发生在更新同一行或多行数据时。复现死锁的步骤:创建数据表并插入数据。开启两个事务并设置锁。尝试更新同一

死锁是指多个过程互相等候而无法执行的现象。在 mysql 中,死锁通常发生在升级同一行或多行数据时。重现死锁的流程:建立数据表并插入数据。打开2个事务并设置锁。试着升级同一行。递交事务。mysql 根据回滚其中一个事务去解决死锁。避免死锁的方法包括减少事务时长、使用相同的升级次序及使用开朗并发控制。 本文来自zvvq

zvvq

MySQL 死锁的重现 本文来自zvvq

死锁界定

本文来自zvvq

死锁是指两个或多个过程互相等候,最终导致系统没法执行的现象。在 MySQL 中,死锁通常发生在多个进程同时试着升级同一行或多行数据时。

内容来自zvvq,别采集哟

怎样重现死锁

内容来自samhan

您可以通过以下步骤在 MySQL 中重现死锁: zvvq

建立数据表:

zvvq

CREATETABLEtest( 本文来自zvvq

idINTNOTNULLAUTO_INCREMENT, 内容来自zvvq,别采集哟

nameVARCHAR(255)NOTNULL, 内容来自zvvq

PRIMARYKEY(id) zvvq好,好zvvq

);

内容来自samhan666

插入数据:

内容来自zvvq,别采集哟

INSERTINTOtest(name)VALUES(John);

内容来自samhan666

INSERTINTOtest(name)VALUES(Jane);

zvvq好,好zvvq

打开2个事务: 本文来自zvvq

BEGIN;

copyright zvvq

获得锁:

本文来自zvvq

让事务 1 锁住第一行: zvvq好,好zvvq

UPDATEtestSETname=JohnUpdatedWHEREid=1;

本文来自zvvq

让事务 2 锁住第二行:

zvvq.cn

UPDATEtestSETname=JaneUpdatedWHEREid=2; 本文来自zvvq

试着升级同一行:

zvvq.cn

让事务 1 试着升级第二行:

内容来自zvvq

UPDATEtestSETname=JohnUpdatedWHEREid=2;

zvvq好,好zvvq

让事务 2 试着升级第一行:

内容来自samhan666

UPDATEtestSETname=JaneUpdatedWHEREid=1; 本文来自zvvq

递交事务: 内容来自samhan666

COMMIT;

内容来自samhan666

假如一切正常,这俩事务都会成功递交。可是,如果两个事务同时试着升级同一行,也会发生死锁。

copyright zvvq

死锁检验

内容来自zvvq

当出现死锁时,MySQL 会检测到并回滚其中一个事务。您可以通过查询错误日志来确定死锁: 内容来自samhan

innodb_status:lockwaittimeoutexceeded;tryrestarttransaction

zvvq

避免死锁

copyright zvvq

为了避免死锁,您可以采用以下方法:

zvvq好,好zvvq

保证事务尽量短。始终使用相同的次序更新表。应用开朗并发控制,而非消极并发控制。以上就是mysql死锁如何重现的详细内容,大量请关注其他类似文章! copyright zvvq