MySQL 查找锁之间依赖关系的信息和最源头锁的thread_id号及关系

链接: http://blog.itpub.net/28602568/viewspace-1874982/

标题: MySQL 查找锁之间依赖关系的信息和最源头锁的thread_id号及关系

作者:lōττéry版权所有[文章允许转载,但必须以链接方式注明源地址,否则追究法律责任.]


#mysql 锁之间的依赖关系信息sql如下【打开注释部分的sql是查找最源头锁的thread_id线程id及关系】


     SELECT distinct b.trx_id blocking_trx_id,
                     b.trx_mysql_thread_id 源头锁thread_id,
                     SUBSTRING(p. HOST, 1, INSTR(p. HOST, ':') - 1) blocking_host,
                     SUBSTRING(p. HOST, INSTR(p. HOST, ':') + 1) blocking_port,
                     IF(p.COMMAND = 'Sleep', p.TIME, 0) idel_in_trx,
                     b.trx_query blocking_query,
                     r.trx_id waiting_trx_id,
                     r.trx_mysql_thread_id waiting_thread,
                     TIMESTAMPDIFF(SECOND, r.trx_wait_started, CURRENT_TIMESTAMP) wait_time,
                     r.trx_query waiting_query,
                     l.lock_table waiting_table_lock
       FROM information_schema.INNODB_LOCKS l
       LEFT JOIN information_schema.INNODB_LOCK_WAITS w
         ON w.requested_lock_id = l.lock_id
       LEFT JOIN information_schema.INNODB_TRX b
         ON b.trx_id = w.blocking_trx_id
       LEFT JOIN information_schema.INNODB_TRX r
         ON r.trx_id = w.requesting_trx_id
       LEFT JOIN information_schema. PROCESSLIST p
         ON p.ID = b.trx_mysql_thread_id
     /*JOIN (SELECT blocking_trx_id -- 查找最源头的trx_id
           FROM information_schema.INNODB_LOCK_WAITS ilw
          WHERE blocking_trx_id NOT IN
                (SELECT requesting_trx_id
                   FROM information_schema.INNODB_LOCK_WAITS)) c
     ON c.blocking_trx_id = b.trx_id */
     ORDER BY wait_time DESC;

关联对象的介绍:


-- innodb_locks ## 当前出现的锁 

mysql > 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 | |#被锁的数据

+-------------+---------------------+------+-----+---------+-------+

mysql>

-- innodb_lock_waits ## 锁等待的对应关 

mysql > 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>

-- innodb_trx ## 当前运行的所有事务  

> desc innodb_trx ;
+----------------------------+---------------------+------+-----+---------------------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------------------------+---------------------+------+-----+---------------------+-------+
| trx_id | varchar(18) | NO | | | |#事务ID
| trx_state | varchar(13) | NO | | | |#事务状态:
| trx_started | datetime | NO | | 0000-00-00 00:00:00 | |#事务开始时间;
| trx_requested_lock_id | varchar(81) | YES | | NULL | |#innodINNODB_TRXb_locks.lock_id

| trx_wait_started | datetime | YES | | NULL | |#事务开始等待的时间
| trx_weight | bigint(21) unsigned | NO | | 0 | |#
| trx_mysql_thread_id | bigint(21) unsigned | NO | | 0 | |#事务线程ID
| trx_query | varchar(1024) | YES | | NULL | |#具体SQL语句
| trx_operation_state | varchar(64) | YES | | NULL | |#事务当前操作状态
| trx_tables_in_use | bigint(21) unsigned | NO | | 0 | |#事务中有多少个表被使用
| trx_tables_locked | bigint(21) unsigned | NO | | 0 | |#事务拥有多少个锁
| trx_lock_structs | bigint(21) unsigned | NO | | 0 | |#
| trx_lock_memory_bytes | bigint(21) unsigned | NO | | 0 | |#事务锁住的内存大小(B)
| trx_rows_locked | bigint(21) unsigned | NO | | 0 | |#事务锁住的行数
| trx_rows_modified | bigint(21) unsigned | NO | | 0 | |#事务更改的行数
| trx_concurrency_tickets | bigint(21) unsigned | NO | | 0 | |#事务并发票数
| trx_isolation_level | varchar(16) | NO | | | |#事务隔离级别
| trx_unique_checks | int(1) | NO | | 0 | |#是否唯一性检查
| trx_foreign_key_checks | int(1) | NO | | 0 | |#是否外键检查
| trx_last_foreign_key_error | varchar(256) | YES | | NULL | |#最后的外键错误
| trx_adaptive_hash_latched | int(1) | NO | | 0 | |#
| trx_adaptive_hash_timeout | bigint(21) unsigned | NO | | 0 | |#
+----------------------------+---------------------+------+-----+---------------------+-------+

mysql>

     扩展:

     Oracle 查询锁之间的依赖关系

     Oracle 查找锁之间依赖关系的最源头SID 

  【源于本人笔记】 若有书写错误,表达错误,请指正... 

时间: 2025-01-21 03:23:45

MySQL 查找锁之间依赖关系的信息和最源头锁的thread_id号及关系的相关文章

php mysql获取表字段名称和字段信息的三种方法_php技巧

php mysql获取表字段名称和字段信息的三种方法 先给出本实例中使用的表的信息: 使用desc获取表字段信息 php代码如下: <?php mysql_connect("localhost","root",""); mysql_select_db("test"); $query = "desc student"; $result = mysql_query($query); while($row=

安卓软件-QQ设备锁原理获取设备哪些信息

问题描述 QQ设备锁原理获取设备哪些信息 QQ设备锁是根据手机的什么来确定是否为已验证手机,可以登录的.比如说可能获取设备的,IME,机型,等等,具体有哪些 解决方案 机型,串号,Android ID,wifi网卡mac地址,版本,分辨率,内置存储空间大小(/system和/data的大小),CPU版本,CPU核心数,CPU型号,内存RAM大小,基带版本,,,,,,,等等 解决方案二: 获取设备信息获取设备信息

web开发-两个不同WEB系统之间限定条件的信息交互问题

问题描述 两个不同WEB系统之间限定条件的信息交互问题 设存在两个web项目,分别是ProjectA和ProjectB,ProjectB不可修改,ProjectA可任意修改. ProjectA存在a1页面,ProjectB存在b1页面. b1页面实现的是账号.密码登陆功能. a1页面存在一个按钮btn1,点击btn1则打开新的标签页且链接到b1页面,同时在a1页面中弹出提示"未登陆". 在新的标签页链接到的b1页面上登陆成功后,a1页面提示从"未登陆"转换为&quo

怎么比较mysql里不同的两张表的差异;还有mysql和postgres之间同表的差异比较?

问题描述 怎么比较mysql里不同的两张表的差异;还有mysql和postgres之间同表的差异比较? 怎么比较mysql里不同的两张表的差异;还有mysql和postgres之间同表的差异比较?有知道的希望能详细说明下,急需,谢谢 解决方案 以某个表作为主表,join另一个表,看看得到的数据全不全,然后再反过来,这样两次比较就可以得到差异了. 解决方案二: 可以把两张表分别导出到两个文件,然后diff比较文件.

net里面MYSQL和SQL之间的数据互导的问题

问题描述 net里面MYSQL和SQL之间的数据互导的问题,如何把MYSQL的数据写入SQL里面 解决方案 解决方案二:方法1用SQL语句直接导方法2用存储过程dao方法3用C#程序读出->处理-->导入

Mysql中 show table status 获取表信息的方法_Mysql

使用方法 mysql>show table status; mysql>show table status like 'esf_seller_history'\G; mysql>show table status like 'esf_%'\G; 样例: mysql>show table status like 'esf_seller_history'\G; 1.Name 表名称 2.Engine: 表的存储引擎 3.Version: 版本 4.Row_format 行格式.对于My

Galaxy Note 2怎么设置在锁屏上显示所有者信息

1.在待机界面下,点击[应用程序]图标.    2.点击[设定]图标.   3.点击[锁定屏幕].   4.点击[所有者信息].   5. 将[在锁屏上显示所有者信息]勾选.   6.在[所有者信息]输入栏里输入想要显示的文字,然后点击[确定].    7.在锁屏界面上将会显示所有者信息.   提示: 手机在充电.连接电脑时,将不显示所有者信息.

豌豆荚正式推出锁屏工具,整合信息方便用户查看

1月29日消息,移动内容搜索平台豌豆荚今日正式推出了一款名为"Snap效率锁屏"的独立工具型APP,目前该产品已升级至3.1版本.基于应用内搜索技术,Snap效率锁屏将天气.聊天.美食.电影票等应用信息整合至锁屏界面,方便用户的直观查阅.处理. 与市场中大部分强调主题和美化的锁屏不同,Snap主要专注于在锁屏有效率地整合信息内容.用户不需要频繁解锁,即可在锁屏上查阅.处理应用信息.       目前,大众点评.墨迹天气和猫眼电影等移动应用已接入Snap,而对于没有安装相关应用的用户,点

seajs模块之间依赖的加载以及模块的执行_Seajs

本文介绍的是seajs模块之间依赖的加载以及模块的执行,下面话不多说直接来看详细的介绍. 入口方法 每个程序都有个入口方法,类似于c的main函数,seajs也不例外.系列一的demo在首页使用了seajs.use() ,这便是入口方法.入口方法可以接受2个参数,第一个参数为模块名称,第二个为回调函数.入口方法定义了一个新的模块,这个新定义的模块依赖入参提供的模块.然后设置新模块的回调函数,用以在loaded状态之后调用.该回调函数主要是执行所有依赖模块的工厂函数,最后在执行入口方法提供的回调.