# 当前运行的所有事务

SELECT * FROM information_schema.INNODB_TRX;

# 当前出现的锁

SELECT * FROM information_schema.INNODB_LOCKs; 

# 锁等待的对应关系

SELECT * FROM information_schema.INNODB_LOCK_waits;

# PROCESSLIST表记录了每个MySql线程的用户,地址以及操作的db等其他信息。

SELECT * FROM information_schema.PROCESSLIST;

或者

SHOW PROCESSLIST

一、information_schema.INNODB_TRX表详情

innodb_trx 表的每个字段解释如下:

trx_id:事务ID。
trx_state:事务状态,有以下几种状态:RUNNING、LOCK WAIT、ROLLING BACK 和 COMMITTING。
trx_started:事务开始时间。
trx_requested_lock_id:事务当前正在等待锁的标识,可以和 INNODB_LOCKS 表 JOIN 以得到更多详细信息。
trx_wait_started:事务开始等待的时间。
trx_weight:事务的权重。
trx_mysql_thread_id:事务线程 ID,可以和 PROCESSLIST 表 JOIN。
trx_query:事务正在执行的 SQL 语句。
trx_operation_state:事务当前操作状态。
trx_tables_in_use:当前事务执行的 SQL 中使用的表的个数。
trx_tables_locked:当前执行 SQL 的行锁数量。
trx_lock_structs:事务保留的锁数量。
trx_lock_memory_bytes:事务锁住的内存大小,单位为 BYTES。
trx_rows_locked:事务锁住的记录数。包含标记为 DELETED,并且已经保存到磁盘但对事务不可见的行。
trx_rows_modified:事务更改的行数。
trx_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:是否立刻放弃为自适应散列索引搜索 LATCH 的标识。

二、information_schema.INNODB_LOCKs表详情

innodb_locks 表的每个字段解释如下

lock_id:锁 ID。
lock_trx_id:拥有锁的事务 ID。可以和 INNODB_TRX 表 JOIN 得到事务的详细信息。
lock_mode:锁的模式。有如下锁类型:行级锁包括:S、X、IS、IX,分别代表:共享锁、排它锁、意向共享锁、意向排它锁。表级锁包括:S_GAP、X_GAP、IS_GAP、IX_GAP 和 AUTO_INC,分别代表共享间隙锁、排它间隙锁、意向共享间隙锁、意向排它间隙锁和自动递增锁。
lock_type:锁的类型。RECORD 代表行级锁,TABLE 代表表级锁。
lock_table:被锁定的或者包含锁定记录的表的名称。
lock_index:当 LOCK_TYPE=’RECORD’ 时,表示索引的名称;否则为 NULL。
lock_space:当 LOCK_TYPE=’RECORD’ 时,表示锁定行的表空间 ID;否则为 NULL。
lock_page:当 LOCK_TYPE=’RECORD’ 时,表示锁定行的页号;否则为 NULL。
lock_rec:当 LOCK_TYPE=’RECORD’ 时,表示一堆页面中锁定行的数量,亦即被锁定的记录号;否则为 NULL。
lock_data:当 LOCK_TYPE=’RECORD’ 时,表示锁定行的主键;否则为NULL。

三、information_schema.INNODB_LOCK_waits表详情

innodb_lock_waits 表的每个字段解释如下:

requesting_trx_id:请求事务的 ID。
requested_lock_id:事务所等待的锁定的 ID。可以和 INNODB_LOCKS 表 JOIN。
blocking_trx_id:阻塞事务的 ID。
blocking_lock_id:某一事务的锁的 ID,该事务阻塞了另一事务的运行。可以和 INNODB_LOCKS 表 JOIN。

四、INFORMATION_SCHEMA.PROCESSLIST表详情

PROCESSLIST 表的每个字段解释如下:

id:标识ID。这与在SHOW PROCESSLIST语句的Id列、Performance Schema threads表的PROCESSLIST_ID列中显示的值类型相同,并由CONNECTION_ID()函数返回
user:发出该语句的mysql用户。
host:发出该语句的客户机的主机名(系统用户除外,没有主机)。
db:默认数据库。
command:线程正在执行的命令的类型。
time:线程处于当前状态的时间(以秒为单位)。
state:指示线程正在执行的操作、事件或状态。
info:线程正在执行的语句,如果没有执行任何语句,则为NULL。    

五、事务一直处于RUNNING状态解决办法

1、需要区分的是 Lock wait timeout exceeded 与  Dead Lock 是不一样。

  • Lock wait timeout exceeded:后提交的事务等待前面处理的事务释放锁,但是在等待的时候超过了mysql的锁等待时间,就会引发这个异常。
  • Dead Lock:两个事务互相等待对方释放相同资源的锁,从而造成的死循环,就会引发这个异常。

2、还有一个要注意的是 innodb_lock_wait_timeout 与 lock_wait_timeout 也是不一样的。

  • innodb_lock_wait_timeout:innodb的dml操作的行级锁的等待时间。
  • lock_wait_timeout:数据结构ddl操作的锁的等待时间。

定位步骤如下:

(1)使用如下语句查看事务,找到状态为RUNNING的记录

SELECT * FROM information_schema.INNODB_TRX;

(2)通过trx_mysql_thread_id去查询information_schema.processlist表,找到执行事务的客户端请求的SQL线程

select * from information_schema.PROCESSLIST WHERE ID = 'xxx';

(3)查看到端口和host以后,再到对应的服务器查看相关的应用和日志

netstat -nlatp | grep 23452
ps -eaf | grep 12059

(4)如果无法定位,此时我们需要从performance_schema表寻找特定线程的信息

# 查看事件
select * from performance_schema.events_statements_current

(5)根据我们拿到的线程id去查,可以获取到具体的执行sql

select * from performance_schema.events_statements_current
where THREAD_ID in (select THREAD_ID from performance_schema.threads where PROCESSLIST_ID=15844)

Mysql:Mysql数据库系统表之详细了解INNODB_TRX、INNODB_LOCKs、INNODB_LOCK_waits、PROCESSLIST表相关推荐

  1. DDL-操作数据库、操作数据表、DML-增加、修改、删除表中数据、DQL-表数据查询

    SQL 语句分类: DDL(Data Definition Language) :数据定义语言.用来操作数据库,表,列等. DML(Data Manipulation Language) :数据操作语 ...

  2. //MySQL核心技术// 数据库的介绍、MySQL-5.5.15安装包以及详细安装教程、卸载注册表、MySQL服务的启动与停止、登录与退出

    尚硅谷MySQL核心技术-李玉婷 1.开发者使用的数据库排名: 来源于调查数据: MySQL SQL Server SQLite PostgreSQL MongDB Oracle Redis Cass ...

  3. Mysql库,表的详细操作

    一 库操作 1.创建数据库 1.1 语法 CREATE DATABASE 数据库名 charset utf8; 1.2 数据库命名规则 可以由字母.数字.下划线.@.#.$ 区分大小写 唯一性 不能使 ...

  4. mysql创建表分区详细介绍及示例

    mysql创建表分区详细介绍及示例 1. 基本概念 1.1 什么是表分区? 1.2 表分区与分表的区别 1.3 表分区有什么好处? 1.4 分区表的限制因素 2. 如何判断当前MySQL是否支持分区? ...

  5. python mysql 的默认值_python--MySQL 库,表的详细操作

    一 库操作 数据库命名规则 可以由数字,字母,下划线,@, #, $ 区分大小写 唯一性 不能使用关键字如 create  select 不能单独使用数字 最长128位 # 这些是对上次的补充. 二 ...

  6. MySQL | MySQL 数据库系统(四)- 数据库的备份与恢复

    前言 大家在日常的工作中,备份数据其实是信息安全管理重要的工作之一.那么,我们在这篇文章中将介绍一下数据库的备份与恢复.MySQL 数据库的备份同时有多种方式.第一:直接打包数据库文件夹/etc/lo ...

  7. 虚拟机mysql创建一个表_MySQL:创建、修改和删除表

    其实对很多人来说对于SQL语句已经忘了很多,或者说是不懂很多,因为有数据库图形操作软件,方便了大家,但是我们不能忘记最根本的东西,特别是一些细节上的东西,可能你用惯了Hibernate,不用写SQL语 ...

  8. mysql的基本数据操作(最详细版本)

    目录 引文 1.什么是数据库 2.从mysql入门sql语言 3.DDL.DML数据库的表操作语句 3.表字段的列类型 4.约束的总结 5.表视图的概念 6.存储过程 7.事物处理 结言: 引文 本篇 ...

  9. mysql 优化表的作用_mysql实战优化之三:表优化

    对于大多数的数据库引擎来说,硬盘操作可能是最重大的瓶颈.所以,把你的数据变得紧凑会对这种情况非常有帮助,因为这减少了对硬盘的访问. 如果一个表只会有几列罢了(比如说字典表,配置表),那么,我们就没有理 ...

最新文章

  1. BNUOJ 52305 Around the World 树形dp
  2. idea修改java和jsp不起作用_使用IDEA编写jsp时EL表达式不起作用的问题及解决方法...
  3. 【NLP】Kaggle从零到实践:Bert中文文本分类
  4. ue4 gpu构建_待在家里吗 为什么不构建GPU Box!
  5. 数据库-MySQL-JDBC-execute、executeUpdate、executeQuery
  6. webservice studio 参数是DataSet时不支持中文 解决方法
  7. python逢7过小游戏_while循环拓展:用python做一个逢七过小游戏
  8. The Second Assignment
  9. 【李宏毅机器学习2021】Task02 回归
  10. PAT (Basic Level) 1045 柳婼、旭神两大思路分析【测试点】样例
  11. 常见的物联网通信技术有哪些,是怎么分类的?
  12. QAbstractButton的clicked、pressed、released、toggled、triggered等信号区别
  13. ubuntu死机咋办_ubuntu16.04经常死机 ubuntu电脑经常死机如何解决
  14. 使用手机+ardinuo+esp01做的网络时钟
  15. 在Vmware14中安装Linux系统教程(图文教程)
  16. Excel#整体增加相同行高的宏命令#
  17. 如何从request中获取域名
  18. java抽奖_JAVA实现用户抽奖功能(附完整代码)
  19. PhotoSwipe 官方API解读(一)
  20. saber软件安装后怎么打开_关于 saber 仿真软件基本应用和案例的详细过程解析(上)...

热门文章

  1. eclipse导入Tomcat8源码
  2. Kotlin学习笔记-----函数的定义
  3. TimesTen Warnings and Errors - TT0400 to TT9999 [IDnbsp (
  4. 查看服务器硬件配置信息(cpu/内存)
  5. mysql优化之sakila测试数据库
  6. xml simpleXML_load_file(), simpleXML_load_string()
  7. Xming + PuTTY 在Windows下远程Linux主机使用图形界面的程序
  8. Tensorflow 错误总结:NameError: name 'core' is not defined
  9. Linux内核模块的概念和基本的编程方法
  10. centos启动流程