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

MySQL锁情况查看命令

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

北京

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

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

看不清楚,换张图片

免费获取短信验证码

MySQL锁情况查看命令

本文介绍如何在mysql数据库中分析锁的情况及处理思路。

MySQL版本

mysql> select version();
+------------+
| version()  |
+------------+
| 5.7.38-log |
+------------+
1 row in set (0.01 sec)

模拟锁产生

A会话加锁

mysql> show create table t\G;
*************************** 1. row ***************************
   Table: t
Create Table: CREATE TABLE `t` (
 `id` int(11) NOT NULL,
 `name` varchar(10) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
 PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
1 row in set (0.00 sec)

ERROR:
No query specified

mysql> select * from t;
+----+------+
| id | name |
+----+------+
| 1 | a  |
| 2 | s  |
| 3 | c  |
| 4 | d  |
| 5 | e  |
+----+------+
5 rows in set (0.00 sec)

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

mysql> select * from t where id<5 for update;
+----+------+
| id | name |
+----+------+
| 1 | a  |
| 2 | s  |
| 3 | c  |
| 4 | d  |
+----+------+
4 rows in set (0.00 sec)

B会话插入数据,造成锁等待现象

mysql> insert into t values(0,'null');

这里介绍MySQL查看锁的3个数据字典表,分别是位于information_schema数据库下的innodb_trx、innodb_lock_waits、innodb_locks三张表,查看步骤如下:

先看innodb_trx表

mysql> use information_schema;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> select * from innodb_trx\G;
*************************** 1. row ***************************
          trx_id: 8553
        trx_state: LOCK WAIT
       trx_started: 2022-12-14 16:52:29
  trx_requested_lock_id: 8553:45:3:2
     trx_wait_started: 2022-12-14 16:52:29
        trx_weight: 2
   trx_mysql_thread_id: 22
        trx_query: insert into t values(0,'null')
   trx_operation_state: inserting
    trx_tables_in_use: 1
    trx_tables_locked: 1
     trx_lock_structs: 2
  trx_lock_memory_bytes: 1136
     trx_rows_locked: 1
    trx_rows_modified: 0
 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
*************************** 2. row ***************************
          trx_id: 8552
        trx_state: RUNNING
       trx_started: 2022-12-14 16:51:39
  trx_requested_lock_id: NULL
     trx_wait_started: NULL
        trx_weight: 2
   trx_mysql_thread_id: 20
        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: 5
    trx_rows_modified: 0
 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
2 rows in set (0.00 sec)

ERROR:
No query specified

mysql> show full processlist;
+----+--------+-----------+--------------------+---------+------+----------+--------------------------------+
| Id | User  | Host   | db         | Command | Time | State  | Info              |
+----+--------+-----------+--------------------+---------+------+----------+--------------------------------+
| 20 | root  | localhost | ray        | Sleep  | 132 |     | NULL              |
| 22 | raybak | localhost | ray        | Query  |  82 | update  | insert into t values(0,'null') |
| 24 | root  | localhost | information_schema | Query  |  0 | starting | show full processlist     |
+----+--------+-----------+--------------------+---------+------+----------+--------------------------------+
3 rows in set (0.00 sec)

trx_id:唯一事务id号,本次测试中是8552和8553
trx_state:当前事务的状态,本次测试中8553是LOCK WAIT 锁等待状态
trx_wait_started:事务开始等待时间,本次测试中为2022-12-14 16:52:29
trx_mysql_thread_id:线程id,与show full processlist中的id对应,本次测试中为22
trx_query:事务运行的SQL语句,本次测试为insert into t values(0,‘null’)
trx_operation_state:事务运行的状态,本次测试为inserting

再看innodb_lock_waits表

mysql> select * from innodb_lock_waits\G;
*************************** 1. row ***************************
requesting_trx_id: 8553
requested_lock_id: 8553:45:3:2
  blocking_trx_id: 8552
 blocking_lock_id: 8552:45:3:2
1 row in set, 1 warning (0.00 sec)

requesting_trx_id:请求锁的事务id,本次测试为8553
blocking_trx_id:持有锁的事务id,也就是造成锁等待的事务id,本次测试为8552

再看innodb_locks表

mysql> select * from innodb_locks\G;
*************************** 1. row ***************************
  lock_id: 8553:45:3:2
lock_trx_id: 8553
 lock_mode: X,GAP
 lock_type: RECORD
lock_table: `ray`.`t`
lock_index: PRIMARY
lock_space: 45
 lock_page: 3
 lock_rec: 2
 lock_data: 1
*************************** 2. row ***************************
  lock_id: 8552:45:3:2
lock_trx_id: 8552
 lock_mode: X
 lock_type: RECORD
lock_table: `ray`.`t`
lock_index: PRIMARY
lock_space: 45
 lock_page: 3
 lock_rec: 2
 lock_data: 1
2 rows in set, 1 warning (0.00 sec)

ERROR:
No query specified

综合三张表查询和show prcess fulllist得知,会话id 20(事务id 8552),锁住了ray.t表,锁模式是行级锁,会话id 22(事务id 8553)的insert操作需要等待会话20释放锁后才能执行,因此出现了会话id 22(事务id 8553)hang住现象。

解决方法,杀会话

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

当然,杀会话也可以通过pt-kill工具更方便,在后续文章会对pt-kill工具做详细介绍

到此这篇关于MySQL锁情况查看命令的文章就介绍到这了,更多相关MySQL锁情况查看内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

免责声明:

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

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

MySQL锁情况查看命令

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

下载Word文档

猜你喜欢

MySQL锁情况查看命令

本文介绍如何在mysql数据库中分析锁的情况及处理思路。MySQL版本mysql> select version();+------------+| version() |+------------+| 5.7.38-log
2023-01-05

mysql怎么查看锁表情况

你可以使用以下命令来查看MySQL中的锁表情况:查看当前正在被锁的表:SHOW OPEN TABLES WHERE In_use > 0;查看当前正在被锁的行:SHOW ENGINE INNODB STATUS;然后在输出结果中查找"The
mysql怎么查看锁表情况
2024-04-09

linux中fdisk命令如何查看挂载情况

在Linux中,fdisk命令用于对磁盘进行分区操作,而不是查看挂载情况。要查看挂载情况,可以使用df或mount命令。使用df命令可以显示当前已经挂载的文件系统的信息,包括挂载点、磁盘使用情况等。示例如下:df -h使用mount命令
linux中fdisk命令如何查看挂载情况
2024-03-12

linux使用lsof命令查看文件打开情况

前言我们都知道,在linux下,“一切皆文件”,因此有时候查看文件的打开情况,就显得格外重要,而这里有一个命令能够在这件事上很好的帮助我们-它就是lsof。 linux下有哪些文件在介绍lsof命令之前,先简单说一下,linux主要有哪些文
2022-06-04

jstat命令查看jvm的GC情况 (以Linux为例)

jstat命令可以查看堆内存各部分的使用量,以及加载类的数量。命令的格式如下: jstat [-命令选项] [vmid] [间隔时间/毫秒] [查询次数] 注意!!!:使用的jdk版本是jdk8. 类加载统计: Loaded:加载cla
2023-06-05

linux查看内存使用情况的命令怎么用

这篇“linux查看内存使用情况的命令怎么用”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“linux查看内存使用情况的命令怎
2023-07-04

Linux查看内存使用情况的命令是什么

Linux查看内存使用情况的命令是什么,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。在进行Linux系统优化时,物理内存是一个非常重要的优化项目,在Linux系统中提供了多种命
2023-06-28

MySQL 查看事务和锁情况的常用语句分享

一些查看数据库中事务和锁情况的常用语句 查看事务等待状况:SELECTr.trx_id waiting_trx_id,r.trx_mysql_thread_id waiting_thread,r.trx_query waiting_quer
2022-05-15

MySQL 5.7 查看内存使用情况

performance_schema = 1 performance_schema_instrument = "%memory%=on" 2、通过命令查询 select event_name,current_alloc from sys.memory_glob
MySQL 5.7 查看内存使用情况
2020-09-15

linux系统用什么命令查看端口的占用情况

本篇内容主要讲解“linux系统用什么命令查看端口的占用情况”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“linux系统用什么命令查看端口的占用情况”吧!1、查看端口是否已经打开:netstat
2023-06-13

Linux下怎么使用free命令查看内存使用情况

本篇内容主要讲解“Linux下怎么使用free命令查看内存使用情况”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Linux下怎么使用free命令查看内存使用情况”吧!显示系统内存不带任何选项运行
2023-06-27

mysql怎么查看内存占用情况

要查看MySQL内存占用情况,可以使用以下几种方法:使用MySQL自带的performance_schema插件:通过performance_schema插件可以查看MySQL实例的内存占用情况,包括内存使用情况、内存分配情况、缓冲池使用情
mysql怎么查看内存占用情况
2024-04-09

怎么查看mysql语句执行情况

你可以通过以下方法查看MySQL语句的执行情况:使用MySQL的查询日志:在MySQL配置文件中开启general_log参数,然后重启MySQL服务,查看查询日志文件以查看所有执行的SQL语句及其执行时间。使用MySQL的慢查询日志:在M
怎么查看mysql语句执行情况
2024-04-09

mysql怎么查看表空间使用情况

可以通过以下步骤来查看MySQL数据库中表空间的使用情况:登录MySQL数据库服务器。使用以下命令查看当前数据库中所有表的大小和占用空间:SELECT table_name AS "Table",round(((data_length +
mysql怎么查看表空间使用情况
2024-04-09

编程热搜

目录