千家信息网

MySQL InnoDB设置死锁检测的方法

发表于:2025-02-07 作者:千家信息网编辑
千家信息网最后更新 2025年02月07日,死锁是指两个或两个以上的进程在执行过程中,因争夺资源而造成的一种互相等待的现象,可以认为如果一个资源被锁定,它总会在以后某个时间被释放。而死锁发生在当多个进程访问同一数据库时,其中每个进程拥有的锁都是
千家信息网最后更新 2025年02月07日MySQL InnoDB设置死锁检测的方法死锁是指两个或两个以上的进程在执行过程中,因争夺资源而造成的一种互相等待的现象,可以认为如果一个资源被锁定,它总会在以后某个时间被释放。而死锁发生在当多个进程访问同一数据库时,其中每个进程拥有的锁都是其他进程所需的,由此造成每个进程都无法继续下去。
InnoDB的并发写操作会触发死锁,InnoDB也提供了死锁检测机制,可以通过设置innodb_deadlock_detect参数可以打开或关闭死锁检测:


innodb_deadlock_detect = on 打开死锁检测,数据库发生死锁时自动回滚(默认选项)
innodb_deadlock_detect = off 关闭死锁检测,发生死锁的时候,用锁超时来处理,通过设置锁超时参数innodb_lock_wait_timeout可以在超时发生时回滚被阻塞的事务


还可以通过设置InnDB Monitors来进一步观察锁冲突详细信息
设置InnoDB Monitors方法
建立test库
mysql>create database test;
Query OK, 1 row affected (0.20 sec)
mysql> use test
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A


Database changed
mysql> create table innodb_monitor(a INT) engine=innodb;
Query OK, 0 rows affected (1.04 sec)


mysql> create table innodb_tablespace_monitor(a INT) engine=innodb;
Query OK, 0 rows affected (0.70 sec)


mysql> create table innodb_lock_monitor(a INT) engine=innodb;
Query OK, 0 rows affected (0.36 sec)


mysql> create table innodb_table_monitor(a INT) engine=innodb;
Query OK, 0 rows affected (0.08 sec)


可以通过show engine innodb status命令查看死锁信息
mysql> show engine innodb status \G
*************************** 1. row ***************************
Type: InnoDB
Name:
Status:
=====================================
2018-05-10 09:17:10 0x7f1fbc21a700 INNODB MONITOR OUTPUT
=====================================
Per second averages calculated from the last 46 seconds
-----------------
BACKGROUND THREAD
-----------------
srv_master_thread loops: 53 srv_active, 0 srv_shutdown, 240099 srv_idle
srv_master_thread log flush and writes: 0
----------
SEMAPHORES
----------
OS WAIT ARRAY INFO: reservation count 2007
OS WAIT ARRAY INFO: signal count 1987
RW-shared spins 3878, rounds 5594, OS waits 1735
RW-excl spins 3, rounds 91, OS waits 4
RW-sx spins 1, rounds 30, OS waits 1
Spin rounds per wait: 1.44 RW-shared, 30.33 RW-excl, 30.00 RW-sx
------------
TRANSACTIONS
------------
Trx id counter 78405
Purge done for trx's n:o < 78404 undo n:o < 10 state: running but idle
History list length 21
LIST OF TRANSACTIONS FOR EACH SESSION:
---TRANSACTION 421249967052640, not started
0 lock struct(s), heap size 1136, 0 row lock(s)
--------
FILE I/O
--------
I/O thread 0 state: waiting for completed aio requests (insert buffer thread)
I/O thread 1 state: waiting for completed aio requests (log thread)
I/O thread 2 state: waiting for completed aio requests (read thread)
.............................................................................
.............................................................................
.............................................................................

死锁 进程 检测 可以通过 两个 信息 参数 数据 数据库 资源 方法 事务 命令 多个 总会 时候 时间 机制 现象 由此 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 如何取消服务器连接密码 龙头朋雄网络技术工作室 2005数据库注册表怎么删除 锐捷嵌入式软件开发加班多么 小茶解说中国版服务器 web软件开发团队介绍 不可部分别的数据库 ssm 测试查询的数据库 游戏数据库工程师 文科能考网络安全专业吗 上海本地网络技术 网络安全小卫士手抄报初中 山西省网络安全职业技能大赛笔试 局域网用一台电脑做服务器 数据库的边界方案 cod16经常服务器连接中断 网络安全数据泄露法规 最近网络安全法律 国产上市办公软件开发公司 为什么进行网络安全教育活动 软件开发方面的证书 盲人软件开发公司口号 网络安全清朗行动实施方案 日新月异的网络技术改变了 将owl文件导入数据库 美测服云顶之弈内部服务器错误 手机总是显示服务器安全证书 软件开发版本计划时间轴图 生活中网络安全相关事情 数据库树协议
0