MySQL提供了查看当前数据库锁请求的三种方法:

1. show  full  processlist命令
  
观察state和info列

2. show engine  innodb status\G 命令
  查看 TRANSACTIONS 部分和 LATEST DETECTED DEADLOCK 两个部分

3. information_shcema下的三张表(通过这三张表可以更新监控当前事物并且分析存在的锁问题)
 —— innodb_trx (

打印innodb内核中的当前活跃(ACTIVE)事务)

—— innodb_locks

( 打印当前状态产生的innodb锁 仅在有锁等待时打印)

—— innodb_lock_waits

(打印当前状态产生的innodb锁等待 仅在有锁等待时打印)

1) innodb_trx表结构说明 (摘取最能说明问题的8个字段)

字段名 说明
trx_id innodb存储引擎内部唯一的事物ID
trx_state 当前事物状态(running和lock wait两种状态)
trx_started   事物的开始时间
trx_requested_lock_id 等待事物的锁ID,如trx_state的状态为Lock wait,那么该值带表当前事物等待之前事物占用资源的ID,若trx_state不是Lock wait 则该值为NULL
trx_wait_started 事物等待的开始时间
trx_weight 事物的权重,在innodb存储引擎中,当发生死锁需要回滚的时,innodb存储引擎会选择该值最小的进行回滚
trx_mysql_thread_id mysql中的线程id, 即show  processlist显示的结果
trx_query  事物运行的SQL语句


 2)innodb_locks表结构说明

字段名 说明
lock_id  锁的ID
lock_trx_id 事物的ID
lock_mode 锁的模式(S锁与X锁两种模式)
lock_type 锁的类型 表锁还是行锁(RECORD)
lock_table 要加锁的表
lock_index 锁住的索引
lock_space 锁住对象的space id
lock_page  事物锁定页的数量,若是表锁则该值为NULL
lock_rec 事物锁定行的数量,若是表锁则该值为NULL
lock_data 事物锁定记录主键值,若是表锁则该值为NULL(此选项不可信)


 3)innodb_lock_waits表结构说明

字段名 说明
requesting_trx_id 申请锁资源的事物ID
requested_lock_id 申请的锁的ID
blocking_trx_id 阻塞其他事物的事物ID
blocking_lock_id 阻塞其他锁的锁ID


可以根据这三张表进行联合查询,得到更直观更清晰的结果,可以参考如下SQL(可根据自己的分析习惯适进行调整)
 
select
r.trx_isolation_level,
r.trx_id waiting_trx_id,
r.trx_mysql_thread_id  waiting_trx_thread,
r.trx_state  waiting_trx_state,
lr.lock_mode waiting_trx_lock_mode,
lr.lock_type  waiting_trx_lock_type,
lr.lock_table  waiting_trx_lock_table,
lr.lock_index  waiting_trx_lock_index,
r.trx_query  waiting_trx_query,
b.trx_id  blocking_trx_id,
b.trx_mysql_thread_id  blocking_trx_thread,
b.trx_state  blocking_trx_state,
lb.lock_mode blocking_trx_lock_mode,
lb.lock_type  blocking_trx_lock_type,
lb.lock_table  blocking_trx_lock_table,
lb.lock_index  blocking_trx_lock_index,
b.trx_query  blocking_query
from  information_schema.innodb_lock_waits  w 
inner  join  information_schema.innodb_trx b 
on  b.trx_id=w.blocking_trx_id 
inner  join  information_schema.innodb_trx  r
on  r.trx_id=w.requesting_trx_id 
inner  join   information_schema.innodb_locks  lb
on  lb.lock_trx_id=w.blocking_trx_id
inner  join   information_schema.innodb_locks  lr
on  lr.lock_trx_id=w.requesting_trx_id\G;
*************************** 1. row ***************************
    trx_isolation_level: REPEATABLE READ
         waiting_trx_id: 2900247
     waiting_trx_thread: 1070
      waiting_trx_state: LOCK WAIT
  waiting_trx_lock_mode: S
  waiting_trx_lock_type: RECORD
 waiting_trx_lock_table: `jiang_test`.`test`
 waiting_trx_lock_index: PRIMARY
      waiting_trx_query: select * from test where id=3 lock in share mode
        blocking_trx_id: 2900241
    blocking_trx_thread: 1137
     blocking_trx_state: RUNNING
 blocking_trx_lock_mode: X
 blocking_trx_lock_type: RECORD
blocking_trx_lock_table: `jiang_test`.`test`
blocking_trx_lock_index: PRIMARY
         blocking_query: NULL
1 row in set (0.01 sec)

【MySQL】锁——查看当前数据库锁请求的三种方法 20的更多相关文章

  1. php发送post请求的三种方法示例

    本文分享下php发送post请求的三种方法与示例代码,分别使用curl.file_get_content.fsocket来实现post提交数据,大家做个参考. php发送post请求的三种方法,分别使 ...

  2. Oracle 数据库分页查询的三种方法

    一.Oracle 数据库分页查询的三种方法 1.简介 不能对 rownum 使用 >(大于或等于 1 的数值).>=(大于 1 的数值).=(不等于 1 的数值),否则无结果.所以直接用 ...

  3. vue中数据请求的三种方法

    注意请求可能存在跨域问题,需要去配置好 这三种建议使用axios 1.resource Vue 要实现异步加载需要使用到 vue-resource 库. Vue.js 2.0 版本推荐使用 axios ...

  4. SQL SERVER2008及以上版本数据库自动备份的三种方法

    方法一:创建一个维护计划对数据库进行备份 方法二:创建一个SQL作业对数据库进行备份 方法三:创建WINDOWS任务计划对数据库进行备份 方法一与方法二其实原理基本相同,都必需开启SQL代理服务,都会 ...

  5. php发送post请求的三种方法

    引用:http://blog.sjzycxx.cn/post/435/ 1.使用 file_get_contents() /** * 发送post请求 * @param string $url 请求地 ...

  6. VS中C#读取app.config数据库配置字符串的三种方法(转)

    关于VS2008或VS2005中数据库配置字符串的三种取法 VS2008建立Form程序时,如果添加数据源会在配置文件 app.config中自动写入连接字符串,这个字符串将会在你利用DataSet, ...

  7. MYSQL添加远程用户或允许远程访问三种方法

    添加远程用户admin密码为password GRANT ALL PRIVILEGES ON *.* TO admin@localhost IDENTIFIED BY \'password\' WIT ...

  8. HOSt ip is not allowed to connect to this MySql server, MYSQL添加远程用户或允许远程访问三种方法

    HOSt ip is not allowed to connect to this MySql server 报错:1130-host ... is not allowed to connect to ...

  9. mysql如何查看自己数据库文件所在的位置

    mysql如何查看自己数据库文件所在的位置 C:\Program Files\MySQL\MySQL Server 5.5 mysql数据库 方法/步骤     第1步: 打开mysqml文件夹,显示 ...

随机推荐

  1. shell编程学习笔记(五):Shell中脚本的参数

    在执行Shell脚本的时候,可以在执行时带上参数,相当于传递参数给脚本,下面我们看一下怎么使用这个参数 以下蓝色字体部分为Linux命令,红色字体的内容为输出的内容: # cd /opt/script ...

  2. Android 网络编程之最新OKHTTP:3.9.0

    本节前言 本来是想围绕着HttpClient讲解的,后来发先Android4.4之后okhttp代替了hc,所以将不再讲解hc okhttp的简单使用,主要包含: 一般的get请求 一般的post请求 ...

  3. django 与 mysql 勾结指南

  4. 【20171123】【GITC精华演讲】贝业新兄弟李济宏:如何做到企业信息化建设的加减乘除

    导读 11月23日智慧物流论坛上,贝业新兄弟李济宏分享了<如何做到企业信息化建设的加减乘除>演讲,介绍了如何更好的构建企业信息化系统. 30秒get演讲干货 为什么用户总说系统难用?为什么 ...

  5. 关于XCode工程中PrefixHead.pch文件的使用

    1.首先先清除pch文件在工程中的作用: 存放一些全局的宏(整个项目中都用得上的宏) 用来包含一些全部的头文件(整个项目中都用得上的头文件) 能自动打开或者关闭日志输出功能 2.由于新建的XCode工 ...

  6. 应用间共享文件 FileProvider

    应用间共享文件 FileProvider 7.0及以上版本,分析文件给其他进程访问的时候,需要使用FileProvider,否则会出现崩溃: 例如:用系统下载器下载apk,然后通过Intent安装. ...

  7. 物联网架构成长之路(29)-Jenkins环境搭建

    0. 说明 哈哈,前面中间插入了一篇Eclipse增加Git插件,在此之前真的没有用过GIT. 1. 运行Jenkins 这里为了方便,还是用Docker方式安装,由于这个是标准的war报,不对Doc ...

  8. TCP 协议简析

    TCP(Transmission Control Protocol,传输控制协议)是一种面向连接的.可靠的.基于字节流的通信协议,数据在传输前要建立连接,传输完毕后还要断开连接.它是个超级麻烦的协议, ...

  9. RapidJson 的使用

    rapidjson为了最大化性能,大量使用了浅拷贝,使用之前一定要了解清楚.如果采用了浅拷贝,特别要注意局部对象的使用,以防止对象已被析构了,却还在被使用. rapidjson使用注意点: 1.对不存 ...

  10. Python AES_ECB_PKCS5加密代码

    https://blog.csdn.net/u010978840/article/details/79035463 ****************************************** ...