zoukankan      html  css  js  c++  java
  • 详细了解INNODB_TRX、INNODB_LOCKs、INNODB_LOCK_waits、PROCESSLIST表

    # 当前运行的所有事务
    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;
    

    一、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 exceededDead Lock是不一样。

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

    2、还有一个要注意的是innodb_lock_wait_timeoutlock_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)
    

    到此基本上就能分析出问题所在。


    参考博文:
    (1) https://mingshan.fun/2019/09/01/transaction-running/ (事务状态为 INNODB_TRX RUNNING)
    (2)https://ningyu1.github.io/site/post/75-mysql-lock-wait-timeout-exceeded/ (MySql Lock wait timeout exceeded)

  • 相关阅读:
    新能源汽车三大核心技术
    新能源汽车分类解读
    hadoop(四):配置参数
    HDP2.4安装(六):小结与回顾
    【Web】Nginx配置开机启动
    【Linux】ODBC安装
    【Erlang】源码安装
    【Linux】 Ncures库的介绍与安装
    【RabbitMQ】 RabbitMQ安装
    《MinDoc 接口文档在线管理系统》
  • 原文地址:https://www.cnblogs.com/jasonboren/p/13803948.html
Copyright © 2011-2022 走看看