首页 > 数据库 >MYSQL锁表查询

MYSQL锁表查询

时间:2022-10-17 18:00:38浏览次数:45  
标签:lock -- 锁表 查询 trx blocking MYSQL id schema

-- 第一个会话执行
drop table if exists test1;
create table test1(
     id     int not null
    ,name   int
    ,primary key(id)
    ,unique key(name)
) engine=innodb
;

begin;
insert into test1 values(2017,827);

-- 第二个会话执行
insert into test1 values(2016,827);

-- 第三个会话执行
-- 5.6 5.7
SELECT
     r.trx_id              as waiting_trx_id
    ,r.trx_mysql_thread_id as waiting_thread
    ,TIMESTAMPDIFF(
         SECOND
        ,r.trx_wait_started
        ,CURRENT_TIMESTAMP
    )                      as wait_time
    ,r.trx_query           as waiting_query
    ,l.lock_table          as waiting_table_lock
    ,b.trx_id              as blocking_trx_id
    ,b.trx_mysql_thread_id as blocking_thread
    ,SUBSTRING(
        p.HOST
        ,1
        ,INSTR(p.HOST, ':') - 1
    )                      as blocking_host
    ,SUBSTRING(p. HOST, INSTR(p. HOST, ':') + 1) as blocking_port
    ,IF (p.COMMAND = 'Sleep', p.TIME, 0)         as idel_in_trx
    ,b.trx_query           as 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 l 
    ON w.requested_lock_id = l.lock_id
LEFT JOIN information_schema.PROCESSLIST p 
    ON p.ID = b.trx_mysql_thread_id
ORDER BY
    r.trx_wait_started DESC
;

-- mysql8.0已经废弃掉innodb_lock_waits和inndb_locks表,取而代之的是performance_schema库中新增的data_lock_waits,data_locks。
SELECT
     b.trx_mysql_thread_id as blocking_id        -- 导致锁的会话ID
    ,r.trx_mysql_thread_id as waiting_id         -- 被锁的会话ID
    ,l.OBJECT_NAME         as waiting_table_lock -- 被锁的表
    ,b.trx_query           as blocking_query     -- 导致锁的SQL
    ,r.trx_query           as waiting_query
    ,b.trx_id              as blocking_trx_id
    ,r.trx_id              as waiting_trx_id
    ,TIMESTAMPDIFF(
         SECOND
        ,r.trx_wait_started
        ,CURRENT_TIMESTAMP
    )                      as wait_time
    ,SUBSTRING(
        p.HOST
        ,1
        ,INSTR(p.HOST, ':') - 1
    )                      as blocking_host      -- 来源IP
    ,SUBSTRING(p. HOST, INSTR(p. HOST, ':') + 1) as blocking_port -- 来源端口
    ,IF (p.COMMAND = 'Sleep', p.TIME, 0)         as idel_in_trx   -- 空闲时间
-- select count(1) as cnt
FROM performance_schema.data_lock_waits w
INNER JOIN information_schema.INNODB_TRX b 
    ON b.trx_id = w.BLOCKING_ENGINE_TRANSACTION_ID
INNER JOIN information_schema.INNODB_TRX r 
    ON r.trx_id = w.REQUESTING_ENGINE_TRANSACTION_ID
INNER JOIN performance_schema.data_locks l 
    ON w.requesting_engine_lock_id = l.engine_lock_id
LEFT JOIN information_schema.PROCESSLIST p 
    ON p.ID = b.trx_mysql_thread_id
ORDER BY
    r.trx_wait_started DESC
;

标签:lock,--,锁表,查询,trx,blocking,MYSQL,id,schema
From: https://www.cnblogs.com/chenzechao/p/16800085.html

相关文章

  • mysql安装时经常遇到的Access denied for user 'root'@XXXXXXX
    经常我们安装了mysql后,本地(安装mysql的服务器上)通过shell的方式可以登录,但是无法通过工具远程连接,这时候可能是因为mysql的初始的几个账号密码为空的原因;只需要修改下默认......
  • mysql 存储结构介绍及执行过程分析
    MySQL体系结构介绍 1mysql 的体系结构  MySQL整体的逻辑结构可以分为4层,客户层、服务层、存储引擎层、数据层客户层客户层:进行相关的连接处理、权限控制、......
  • JavaWeb(一):MySql基础
    目录​​1、数据库相关概念​​​​1.1数据库​​​​1.2数据库管理系统​​​​1.3常见的数据库管理系统​​​​1.4SQL​​​​2、MySQL​​​​2.1MySQL安装​​​......
  • 为什么用 Redis 作为 MySQL 的缓存?
    主要是因为 Redis具备「高性能」和「高并发」两种特性。1、Redis具备高性能假如用户第一次访问MySQL中的某些数据。这个过程会比较慢,因为是从硬盘上读取的。将该用......
  • 多表查询练习1和多表查询练习2,多表查询练习3
    创建表:--部门表CREATETABLEdept(idINTPRIMARYKEYPRIMARYKEY,--部门iddnameVARCHAR(50),--部门名称locVARCHAR(50)--部门所在地);--添......
  • mysql忘记密码怎么解决
    mysql忘记密码怎么解决1.检查mysql服务是否启动,如果启动,关闭mysql服务运行命令:ps-ef|grep-imysql  如果开着就运行关闭的命令:servicemysqldstop或者syst......
  • MySQL的一些操作(用的并不是SQL语句,可视化界面)
    可视化界面的一些基本操作mysqlworkbench入门记(一)-介绍及简单使用_chunjunluo的博客-CSDN博客_mysqlworkbench介绍下面这个更详细一点 MySQL-Workbench数据库基本操......
  • mysql查看执行sql语句的记录日志
    1、使用processlist,但是有个弊端,就是只能查看正在执行的sql语句,对应历史记录,查看不到。好处是不用设置,不会保存。--useinformation_schema;--showprocesslist;或者:......
  • Linux下更改MySQL数据库存储路径
    1、home目录下建立data目录,data目录下建立mysql目录  2、首先停止掉mysql服务,在终端中执行"/etc/init.d/mysqlstop"或者执行"servicemysqldstop"并回车确定。3......
  • MySQL的安装与卸载(MAC OS)
    一.安装MySQL1.登录MySQL网站打开官网:​​http://www.mysql.com/downloads/​​进入,点击下方的DOWNLOADS:MySQLCommunityServer2.选择dmg文件下载3.查看其......