当前位置: 首页 > news >正文

mysql 如何解锁_Mysql如何解锁?

概述

以下资料是网络收集外加部分个人理解,当前数据库版本:MySQL Ver 14.14 Distrib 5.7.11, for Win64 (x86_64)。

记得以前,当出现:ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction,要解决是一件麻烦的事情。特别是当一个SQL执行完了,但未COMMIT,后面的SQL想要执行就是被锁,超时后结束,DBA光从数据库无法着手找出源头是哪个SQL锁住了。有时候看看 show engine innodb status, 并结合 show full processlist 能暂时解决问题,但一直不能精确定位。

在5.5中,information_schema 库中增加了三个关于锁的表(MEMORY引擎)

Innodb锁

Innodb存储引擎实现了如下2种标准的行级锁:

共享锁(S lock),允许事务读取一行数据,select语句后加lock in share mode。

排它锁(X lock),允许事务删除或者更新一行数据,select语句后加for update。

当一个事务获取了行r的共享锁,那么另外一个事务也可以立即获取行r的共享锁,因为读取并未改变行r的数据,这种情况就是锁兼容。但是如果有事务想获得行r的排它锁,则它必须等待事务释放行r上的共享锁—这种情况就是锁不兼容,二者兼容性如下表格所示:

X 排它锁

S 共享锁

X 排它锁

冲突

冲突

S 共享锁

冲突

兼容

另外,为了允许行锁和表锁共存,实现多粒度锁机制,InnoDB还有两种内部使用的意向锁(Intention Locks),不需要我们代码控制,这两种意向锁都是表锁。

意向共享锁(IS):事务打算给数据行加行共享锁,事务在给一个数据行加共享锁前必须先取得该表的IS锁。

意向排他锁(IX):事务打算给数据行加行排他锁,事务在给一个数据行加排他锁前必须先取得该表的IX锁。

意向锁的作用:

因为表锁覆盖了行锁的数据,所以表锁和行锁也会产生冲突。比如A事务申请表锁,B事务申请行级锁,或者A事务申请行级锁,B事务申请表锁。这时候B事务的申请是需要被阻塞的。那么怎么判断B事务该阻塞呢?遍历表的每一行看看是否有行级锁吗?这样效率非常差。这时候就引入了意向锁。在申请行锁前,数据库自动为我们申请了对应的意向锁,因为意向锁是表锁,这时候如果再申请表锁,就自然会阻塞了。

innodb_locks

当前出现的锁

lock_id

InnoDB内部的唯一锁ID

lock_trx_id

拥有这个锁的事务ID

lock_mode

锁模式,S, X, IS, IX等

lock_type

锁类型,RECORD或者TABLE

lock_table

被锁的表或包含被锁记录的表

lock_index

被锁的索引,不是行级锁时为NULL

lock_space

被锁的表空间号,不是行级锁时为NULL

lock_page

被锁的页号,不是行级锁时为NULL

lock_rec

被锁的Heap号,不是行级锁时为NULL

lock_data

被锁的记录的主键,不是行级锁时为NULL

innodb_lock_waits

当前等待的锁

requesting_trx_id

正在请求的、受阻的事务ID

requested_lock_id

事务正在等待的锁ID

blocking_trx_id

阻塞其他事务的事务ID

blocking_lock_id

阻塞其他事务的事务持有的锁ID

innodb_trx

当前所有事务

trx_id

InnoDB内部的唯一事务ID

trx_state

事务状态,RUNNING, LOCK WAIT等

trx_started

事务开始时间

trx_requested_lock_id

事务正在等待的锁ID

trx_wait_started

事务开始等待的时间

trx_weight

事务的权重,当发生死锁回滚的时候,优先选择该值最小的进行回滚

trx_mysql_thread_id

事务线程ID,即show full processlist中的ID

trx_query

执行的SQL语句

trx_operation_state

事务当前操作状态

trx_tables_in_use

执行当前SQL时有多少个表被使用

trx_tables_locked

执行当前SQL时有多少个表有行锁

trx_lock_structs

事务保留的锁的数量

trx_lock_memory_bytes

事务锁占据的内存大小(B)

trx_rows_locked

事务锁定的大概行数

trx_rows_modified

事务修改和插入的行数

trx_concurrency_tickets

即innodb_concurrency_tickets系统变量

trx_isolation_level

事务隔离级别

trx_unique_checks

是否唯一性检查

trx_foreign_key_checks

是否外键检查

trx_last_foreign_key_error

最后的外键错误详细信息

trx_adaptive_hash_latched

trx_adaptive_hash_timeout

trx_is_read_only

1表示事务是只读的

trx_autocommit_non_locking

1表示事务是不包含FOR UPDATE或者LOCK IN SHARE MODE语句,并且autocommit是enable的

以上翻译并不完整,如果有疑问的可以参考官网。

步骤

首先:

SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCK_WAITS;

获取到blocking_trx_id

然后:

SELECT * FROM INFORMATION_SCHEMA.INNODB_TRX;

查找trx_id和上面获取到的blocking_trx_id一样的记录,获取这条记录的trx_mysql_thread_id

最后:

kill 上面获取到的trx_mysql_thread_id

这样就把阻塞其他事务的事务线程杀掉了。

相关文章:

  • mysql left a 10_MySQL语法基础
  • demonstration记忆_英语背诵方法之一:意群断句法
  • mysql8分区_mysql8中的表分区
  • ztree 后台异步加载_Ztree 分批异步加载
  • linux执行mysql表_linux shell命令执行sql(mysql入门)
  • python 数组逆序重放_OpenJudge计算概论-找最大数序列
  • python爬虫处理滑块验证_python爬虫基础(9:验证识别之滑块验证)
  • qmediaplayer进度_QMediaPlayer的duration问题
  • java timer定时执行一次_Java Timer(定时调用、实现固定时间执行)
  • java字串数组_java字符串数组
  • java swing 拖拽文件夹_Java Swing 鼠标拖放文件 代码1
  • java treemap 降序排序_Java TreeMap 升序|降序排列
  • java 流关闭顺序_JAVA的节点流和处理流以及流的关闭顺序
  • java 多层结构故障_多层构架在实践中一些问题
  • java项目提高安全性_Java线程安全与程序性能
  • 《剑指offer》分解让复杂问题更简单
  • 03Go 类型总结
  • C++入门教程(10):for 语句
  • gitlab-ci配置详解(一)
  • IndexedDB
  • Java IO学习笔记一
  • Js基础知识(四) - js运行原理与机制
  • mysql innodb 索引使用指南
  • node学习系列之简单文件上传
  • Perseus-BERT——业内性能极致优化的BERT训练方案
  • Solarized Scheme
  • sublime配置文件
  • Vim Clutch | 面向脚踏板编程……
  • Vue 动态创建 component
  • yii2权限控制rbac之rule详细讲解
  • 对JS继承的一点思考
  • 爬虫进阶 -- 神级程序员:让你的爬虫就像人类的用户行为!
  • 前端技术周刊 2019-02-11 Serverless
  • 前端路由实现-history
  • 如何正确配置 Ubuntu 14.04 服务器?
  • 算法-图和图算法
  • 它承受着该等级不该有的简单, leetcode 564 寻找最近的回文数
  • 温故知新之javascript面向对象
  • 想使用 MongoDB ,你应该了解这8个方面!
  • 想写好前端,先练好内功
  • 一个JAVA程序员成长之路分享
  • 字符串匹配基础上
  • 国内唯一,阿里云入选全球区块链云服务报告,领先AWS、Google ...
  • ​Python 3 新特性:类型注解
  • #鸿蒙生态创新中心#揭幕仪式在深圳湾科技生态园举行
  • (附源码)springboot掌上博客系统 毕业设计063131
  • (附源码)计算机毕业设计ssm高校《大学语文》课程作业在线管理系统
  • (转)Oracle 9i 数据库设计指引全集(1)
  • (转)Spring4.2.5+Hibernate4.3.11+Struts1.3.8集成方案一
  • (转)为C# Windows服务添加安装程序
  • (转)详解PHP处理密码的几种方式
  • .naturalWidth 和naturalHeight属性,
  • .NET Compact Framework 多线程环境下的UI异步刷新
  • .net 无限分类
  • .Net高阶异常处理第二篇~~ dump进阶之MiniDumpWriter