mysql如何查看锁等待情况

P粉602998670
发布: 2025-09-19 12:10:01
原创
279人浏览过
要查看MySQL锁等待,需结合SHOW ENGINE INNODB STATUS与information_schema中innodb_trx、innodb_locks、innodb_lock_waits表;首先通过SHOW ENGINE INNODB STATUS获取死锁及事务等待概览,再查询innodb_trx定位处于LOCK WAIT状态的事务,接着利用innodb_lock_waits关联等待与阻塞事务,最后通过innodb_locks分析锁类型与资源,从而完整还原锁等待链路。

mysql如何查看锁等待情况

要查看MySQL中的锁等待情况,核心在于利用

information_schema
登录后复制
数据库中的
innodb_trx
登录后复制
innodb_locks
登录后复制
innodb_lock_waits
登录后复制
这几个表,同时
SHOW ENGINE INNODB STATUS
登录后复制
命令也是一个不可或缺的强大工具,它能提供非常详尽的InnoDB引擎状态报告,包括最新的死锁信息和当前正在等待的事务。

在我的日常运维和开发中,当MySQL出现性能瓶颈,尤其是并发量上去之后,锁等待几乎是绕不开的话题。定位这些问题,我通常会从几个角度入手。

首先,

SHOW ENGINE INNODB STATUS
登录后复制
是一个非常全面的诊断命令。它会输出一大段文本,里面包含了InnoDB引擎的各种运行时状态。我最常关注的几个部分是:

  • LATEST DETECTED DEADLOCK: 如果系统发生了死锁,这里会详细记录死锁的事务ID、SQL语句、锁类型以及等待的资源。这是定位死锁的黄金信息。
  • TRANSACTIONS: 这个部分会列出当前活跃的事务,包括它们的状态(RUNNING, LOCK WAIT等)、执行的SQL语句、事务ID以及持有或正在等待的锁。如果你看到某个事务的状态是
    LOCK WAIT
    登录后复制
    ,那基本上就找到线索了。

例如,查看完整的InnoDB状态报告:

SHOW ENGINE INNODB STATUS;
登录后复制

其次,对于更精细、更便于程序化查询的锁等待信息,

information_schema
登录后复制
数据库中的几个表是我的首选:

  1. information_schema.innodb_trx
    登录后复制
    : 这个表记录了所有当前正在运行的InnoDB事务。它的
    trx_state
    登录后复制
    字段会明确指出事务是
    RUNNING
    登录后复制
    LOCK WAIT
    登录后复制
    还是其他状态。
    trx_query
    登录后复制
    则显示了事务正在执行的SQL语句。

    如知AI笔记
    如知AI笔记

    如知笔记——支持markdown的在线笔记,支持ai智能写作、AI搜索,支持DeepseekR1满血大模型

    如知AI笔记 27
    查看详情 如知AI笔记
    SELECT
        trx_id,
        trx_state,
        trx_started,
        trx_requested_lock_id,
        trx_wait_started,
        trx_mysql_thread_id,
        trx_query
    FROM
        information_schema.innodb_trx
    WHERE
        trx_state = 'LOCK WAIT';
    登录后复制

    通过这个查询,我能迅速找出哪些事务正处于等待状态,以及它们在执行什么操作。

  2. information_schema.innodb_locks
    登录后复制
    : 这个表展示了InnoDB引擎当前持有的所有锁以及正在请求的锁。
    lock_mode
    登录后复制
    会告诉你锁的类型(S, X, IS, IX等),
    lock_type
    登录后复制
    则指明了是行锁还是表锁。

    SELECT
        lock_id,
        lock_trx_id,
        lock_mode,
        lock_type,
        lock_table,
        lock_index,
        lock_data
    FROM
        information_schema.innodb_locks;
    登录后复制

    这个表虽然能看到锁的详细情况,但它本身并不能直接告诉你哪个锁在等待哪个锁。

  3. information_schema.innodb_lock_waits
    登录后复制
    : 这是我个人觉得最直接、最有用的表,它清晰地展示了锁等待的关系。它连接了
    innodb_locks
    登录后复制
    表,明确指出哪个事务(
    requesting_trx_id
    登录后复制
    )正在等待哪个锁(
    requested_lock_id
    登录后复制
    ),以及哪个事务(
    blocking_trx_id
    登录后复制
    )持有了这个锁(
    blocking_lock_id
    登录后复制
    )。

    SELECT
        t.trx_id AS waiting_trx_id,
        t.trx_mysql_thread_id AS waiting_thread,
        t.trx_query AS waiting_query,
        b.trx_id AS blocking_trx_id,
        b.trx_mysql_thread_id AS blocking_thread,
        b.trx_query AS blocking_query,
        lw.requesting_lock_id,
        lw.blocking_lock_id
    FROM
        information_schema.innodb_lock_waits lw
    JOIN
        information_schema.innodb_trx t ON lw.requesting_trx_id = t.trx_id
    JOIN
        information_schema.innodb_trx b ON lw.blocking_trx_id =
    登录后复制

以上就是mysql如何查看锁等待情况的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号