【MySQL】锁——查看当前数据库锁请求的三种方法 20
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的更多相关文章
- php发送post请求的三种方法示例
本文分享下php发送post请求的三种方法与示例代码,分别使用curl.file_get_content.fsocket来实现post提交数据,大家做个参考. php发送post请求的三种方法,分别使 ...
- Oracle 数据库分页查询的三种方法
一.Oracle 数据库分页查询的三种方法 1.简介 不能对 rownum 使用 >(大于或等于 1 的数值).>=(大于 1 的数值).=(不等于 1 的数值),否则无结果.所以直接用 ...
- vue中数据请求的三种方法
注意请求可能存在跨域问题,需要去配置好 这三种建议使用axios 1.resource Vue 要实现异步加载需要使用到 vue-resource 库. Vue.js 2.0 版本推荐使用 axios ...
- SQL SERVER2008及以上版本数据库自动备份的三种方法
方法一:创建一个维护计划对数据库进行备份 方法二:创建一个SQL作业对数据库进行备份 方法三:创建WINDOWS任务计划对数据库进行备份 方法一与方法二其实原理基本相同,都必需开启SQL代理服务,都会 ...
- php发送post请求的三种方法
引用:http://blog.sjzycxx.cn/post/435/ 1.使用 file_get_contents() /** * 发送post请求 * @param string $url 请求地 ...
- VS中C#读取app.config数据库配置字符串的三种方法(转)
关于VS2008或VS2005中数据库配置字符串的三种取法 VS2008建立Form程序时,如果添加数据源会在配置文件 app.config中自动写入连接字符串,这个字符串将会在你利用DataSet, ...
- MYSQL添加远程用户或允许远程访问三种方法
添加远程用户admin密码为password GRANT ALL PRIVILEGES ON *.* TO admin@localhost IDENTIFIED BY \'password\' WIT ...
- 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 ...
- mysql如何查看自己数据库文件所在的位置
mysql如何查看自己数据库文件所在的位置 C:\Program Files\MySQL\MySQL Server 5.5 mysql数据库 方法/步骤 第1步: 打开mysqml文件夹,显示 ...
随机推荐
- SpringBoot(十三):springboot2.0.2定时任务
使用定义任务: 第一步:启用定时任务第二步:配置定时器资源等第三步:定义定时任务并指定触发规则 1)启动类启用定时任务 在springboot入口类上添加注解@EnableScheduling即可. ...
- Android: Avoid passing null as the view root
在做一个应用时把Android SDK从4.4换成6.0,使用LayoutInflater的inflate方法时出现以下情 LayoutInflater.inflate(int resource, V ...
- 下载网络文件HttpURLConnection.getContentLength()大小为 0
HttpURLConnection conn = (HttpURLConnection)url.openConnection(); conn.setRequestProperty("Acce ...
- 处理器 趣事 CPU/GPU/TPU/DPU/BPU
有消息称,阿里巴巴达摩院正在研发一款神经网络芯片——Ali-NPU,主要运用于图像视频分析.机器学习等AI推理计算.按照设计,这款芯片性能将是目前市面上主流CPU.GPU架构AI芯片的10倍,而制造成 ...
- Docker Mongo数据库主主同步配置方法
一.背景 不多说,请看第一篇<Docker Mongo数据库主从同步配置方法> 二.具体操作方法 1.创建目录,如创建~/test/mongo_sr1和-/test/mongo_sr2两个 ...
- 树莓派进阶之路 (038) - P2P 文件下载机
硬件要求: 树莓派开发板 USB外接硬盘 一. Together 1. 更新安装程序 sudo apt-get update sudo apt-get upgrade sudo apt-get ins ...
- Atitti 创业团队vs打工的团队 attilax总结
Atitti 创业团队vs打工的团队 attilax总结 创业公司的性质与特点 热情,创新,效率 ,使命 为什么阿里员工很热情?因为他们大概都知道公司要做什么事情,也知道公司的使命.他们经常会跳出来 ...
- Xcode 常用代码段
weak_shortcut /** <#注释#> */ @property(nonatomic,weak) <#class#> *<#name#>; copy_sh ...
- mysql 存储过程、循环
CREATE PROCEDURE questionProc() BEGIN declare pgId ); declare pGuid varchar(); -- 定义游标卡尺 declare don ...
- js和css实现手机横竖屏预览思路整理
实现效果,如上图. 首先,实现手机页面在PC端预览, 则先在网上找到一个手机的背景图片,算好大概内间距,用来放预览的页面,我这里是给手机预览页面的尺寸按iphone5的尺寸来的: 一个手机页面在这里预 ...