我的编程空间,编程开发者的网络收藏夹
学习永远不晚

MySQL如何查看当前数据库锁请求

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

MySQL如何查看当前数据库锁请求

小编给大家分享一下MySQL如何查看当前数据库锁请求,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!


MySQL版本:5.6.21

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如何查看当前数据库锁请求”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注亿速云行业资讯频道!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

MySQL如何查看当前数据库锁请求

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

mysql如何查看当前数据库

在 MySQL 中,要查看当前正在使用的数据库,可以使用 SELECT DATABASE() 函数SELECT DATABASE();这个查询将返回当前正在使用的数据库名称。如果没有选择任何数据库,它将返回 NULL。另外,你还可以使用
mysql如何查看当前数据库
2024-05-09

mysql查看当前数据库

要查看 mysql 当前数据库,可以使用两种方法:1. 使用 database() 函数返回当前数据库的名称。2. 使用 show databases 语句显示所有可用数据库,当前数据库会以星号 (*) 标记。如何查看 MySQL 当前数据
mysql查看当前数据库
2024-08-01

mysql如何查看当前数据库名称

要查看当前正在使用的数据库名称,您可以在MySQL命令提示符下执行以下命令:SELECT DATABASE();这将返回当前选定的数据库名称。如果未选择任何数据库,则将返回NULL。另外,您还可以使用以下命令之一来选择一个数据库并显示其
mysql如何查看当前数据库名称
2024-04-15

MSSQL如何查看当前数据库的连接数

要查看当前数据库的连接数,可以使用以下方法之一:1. 使用系统存储过程 `sp_who` 或 `sp_who2`,这些存储过程将列出当前连接到数据库的所有会话。可以通过执行以下命令来查看连接数:```EXEC sp_who```或者```E
2023-09-15

mysql当前连接数如何查看

可以使用以下命令来查看当前连接数:SHOW STATUS WHERE `variable_name` = 'Threads_connected';或者可以使用以下命令来查看当前连接数:SHOW VARIABLES L
mysql当前连接数如何查看
2024-04-15

怎么查看redis当前数据库

要查看 Redis 当前数据库的内容,可以使用 `SELECT` 命令来切换数据库,然后使用 `KEYS` 命令获取当前数据库中的所有键。具体步骤如下:1. 连接到 Redis 服务器。2. 使用 `SELECT` 命令选择要查看的数据库。
2023-09-11

mysql如何查看当前进程

要查看当前MySQL进程,可以使用以下两种方法:使用MySQL自带的SHOW PROCESSLIST命令。可以登录到MySQL控制台,然后执行以下命令:SHOW PROCESSLIST;这会列出当前正在运行的MySQL进程,包括进程ID、用
mysql如何查看当前进程
2024-04-17

Redis中怎么查看当前的数据库数量

要查看当前 Redis 中数据库的数量,可以使用 INFO 命令来获取 Redis 服务器的统计信息,包括数据库数量。具体步骤如下:1、打开 Redis 客户端或者通过命令行连接到 Redis 服务器。2、输入以下命令查看数据库数量:
Redis中怎么查看当前的数据库数量
2024-03-12

mysql怎么查询当前数据库的表

要查询当前数据库的表,可以使用以下 SQL 查询语句:SHOW TABLES;这条 SQL 查询语句会返回当前选定数据库中所有的表名列表。你可以在 MySQL 命令行客户端或者任何支持 SQL 查询的工具中执行这个查询语句,以获取当前数据
mysql怎么查询当前数据库的表
2024-04-15

编程热搜

目录