zoukankan      html  css  js  c++  java
  • innodb_trx

    innodb_trx               ## 当前运行的所有事务
    innodb_locks          ## 当前出现的锁
    innodb_lock_waits  ## 锁等待的对应关系

    innodb_trx表列信息:

    trx_id: 唯一事务id号;

    TRX_WEIGHT:事务的高度;

    TRX_STATE: 事务的执行状态,值一般分为:RUNNING, LOCK WAIT, ROLLING BACK, and COMMITTING

    RX_REQUESTED_LOCK_ID:如果trx_state是lockwait,显示事务当前等待锁的id,不是则为空。想要获取锁的信息,
    根据该lock_id,以innodb_locks表中lock_id列匹配条件进行查询,获取相关信息。

    TRX_WAIT_STARTED:如果trx_state是lockwait,该值代表事务开始等待锁的时间;否则为空。

    TRX_MYSQL_THREAD_ID:mysql线程id。想要获取该线程的信息,根据该thread_id,以INFORMATION_SCHEMA.PROCESSLIST表的id列为匹配条件进行查询。
    TRX_QUERY:事务正在执行的sql语句。

    INNODB_LOCKS表列信息:

    desc innodb_locks;
    +————-+———————+——+—–+———+——-+
    | Field       | Type                | Null | Key | Default | Extra |
    +————-+———————+——+—–+———+——-+
    | lock_id     | varchar(81)         | NO   |     |         |       |#锁ID
    | lock_trx_id | varchar(18)         | NO   |     |         |       |#拥有锁的事务ID
    | lock_mode   | varchar(32)         | NO   |     |         |       |#锁模式
    | lock_type   | varchar(32)         | NO   |     |         |       |#锁类型
    | lock_table  | varchar(1024)       | NO   |     |         |       |#被锁的表
    | lock_index  | varchar(1024)       | YES  |     | NULL    |       |#被锁的索引
    | lock_space  | bigint(21) unsigned | YES  |     | NULL    |       |#被锁的表空间号
    | lock_page   | bigint(21) unsigned | YES  |     | NULL    |       |#被锁的页号
    | lock_rec    | bigint(21) unsigned | YES  |     | NULL    |       |#被锁的记录号
    | lock_data   | varchar(8192)       | YES  |     | NULL    |       |#被锁的数据
    +————-+———————+——+—–+———+——-+

    innodb_lock_waits 表列信息:

    desc innodb_lock_waits;
    +——————-+————-+——+—–+———+——-+
    | Field             | Type        | Null | Key | Default | Extra |
    +——————-+————-+——+—–+———+——-+
    | requesting_trx_id | varchar(18) | NO   |     |         |       |#请求锁的事务ID
    | requested_lock_id | varchar(81) | NO   |     |         |       |#请求锁的锁ID
    | blocking_trx_id   | varchar(18) | NO   |     |         |       |#当前拥有锁的事务ID
    | blocking_lock_id  | varchar(81) | NO   |     |         |       |#当前拥有锁的锁ID
    +——————-+————-+——+—–+———+——-+

    mysql> create database test ;
    Query OK, 1 row affected (0.01 sec)

    mysql> show create database test \G
    *************************** 1. row ***************************
    Database: test
    Create Database: CREATE DATABASE `test` /*!40100 DEFAULT CHARACTER SET utf8 */
    1 row in set (0.00 sec)

    mysql> use test;
    Database changed
    mysql> show tables ;
    Empty set (0.00 sec)

    mysql> create table tx1
    -> (id int primary key ,
    -> c1 varchar(20),
    -> c2 varchar(30))
    -> engine=innodb default charset = utf8 ;
    Query OK, 0 rows affected (0.02 sec)

    mysql> insert into tx1(id,c1,c2) values(1,'aaa','aaa2') ;
    Query OK, 1 row affected (0.00 sec)

    mysql> insert into tx1(id,c1,c2) values(2,'bbb','bbb2') ;
    Query OK, 1 row affected (0.00 sec)

    mysql> insert into tx1(id,c1,c2) values(3,'ccc','ccc2') ;
    Query OK, 1 row affected (0.01 sec)

    1) 首先不开启事务,测试update更新

    mysql> update tx1 set c1='ccc3' where id=3 ;
    Query OK, 1 row affected (0.02 sec)
    Rows matched: 1 Changed: 1 Warnings: 0

    开启另外一个窗口查看:innodb_trx 发现事务为空

    mysql> select * from innodb_trx \G
    Empty set (0.01 sec)

    2) 开启事务,测试update更新

    mysql> start transaction;
    Query OK, 0 rows affected (0.00 sec)

    mysql> update tx1 set c1='ccc4' where id=3 ;
    Query OK, 1 row affected (0.00 sec)
    Rows matched: 1 Changed: 1 Warnings: 0

    开启另外一个窗口查看:innodb_trx 事务


    mysql> select * from innodb_trx \G
    *************************** 1. row ***************************
    trx_id: 1297
    trx_state: RUNNING
    trx_started: 2021-12-10 00:03:34
    trx_requested_lock_id: NULL
    trx_wait_started: NULL
    trx_weight: 3
    trx_mysql_thread_id: 5
    trx_query: NULL
    trx_operation_state: NULL
    trx_tables_in_use: 0
    trx_tables_locked: 1
    trx_lock_structs: 2
    trx_lock_memory_bytes: 1136
    trx_rows_locked: 1
    trx_rows_modified: 1
    trx_concurrency_tickets: 0
    trx_isolation_level: REPEATABLE READ
    trx_unique_checks: 1
    trx_foreign_key_checks: 1
    trx_last_foreign_key_error: NULL
    trx_adaptive_hash_latched: 0
    trx_adaptive_hash_timeout: 0
    trx_is_read_only: 0
    trx_autocommit_non_locking: 0

    innodb_locks 和innodb_lock_waits信息也是空的,说明当前没有锁和锁等待。 

    在第一个会话窗口里提交事务commit后,第二个窗口innodb_trx没运行事务。

    或者是通过kill 将那个开启事务的会话杀掉也行,

    mysql> kill 5;
    Query OK, 0 rows affected (0.00 sec)

    mysql> show processlist ;
    +----+------+-----------+--------------------+---------+------+----------+------------------+
    | Id | User | Host | db | Command | Time | State | Info |
    +----+------+-----------+--------------------+---------+------+----------+------------------+
    | 6 | root | localhost | information_schema | Query | 0 | starting | show processlist |
    | 7 | root | localhost | test | Sleep | 14 | | NULL |
    +----+------+-----------+--------------------+---------+------+----------+------------------+

     kill完会话,连接session自动重连上。

    3) update 更新,产生锁等待测试

     第二个窗口开启事务,更新同一条记录:

     有locks

     

     可以看出1303的 事务id锁住了1304的事务。

     查询当前锁表状态语句如下:show oepn  tables  where  In_use >0 



    
    
    
    
    
    
    
  • 相关阅读:
    3:基于乐观锁(两种)控制并发: version、external锁
    4: ES内执行Groovy脚本,做文档部分更新、执行判断改变操作类型
    2 Match、Filter、排序、分页、全文检索、短语匹配、关键词高亮
    第63章 ASP.NET Identity 支持
    第62章 EntityFramework支持
    第61章 IdentityServer Options
    第60章 设备流交互服务
    第59章 IdentityServer交互服务
    第58章 Profile Service
    第57章 GrantValidationResult
  • 原文地址:https://www.cnblogs.com/vzhangxk/p/15672689.html
Copyright © 2011-2022 走看看