AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 36260
Accepted
Amandasaurus
Amandasaurus
Asked: 2009-07-07 02:13:04 +0800 CST2009-07-07 02:13:04 +0800 CST 2009-07-07 02:13:04 +0800 CST

如何显示 mysql 锁?

  • 772

无论如何显示mysql数据库中所有处于活动状态的锁?

mysql
  • 7 7 个回答
  • 302180 Views

7 个回答

  • Voted
  1. Best Answer
    Dan Carley
    2009-07-07T02:47:03+08:002009-07-07T02:47:03+08:00

    请参阅 Marko 的 InnoDB 表链接和注意事项。

    对于 MyISAM,没有一个简单的“这是有问题的查询”的解决方案。您应该始终从流程列表开始。但请务必包含完整的关键字,以便打印的查询不会被截断:

    SHOW FULL PROCESSLIST;
    

    这将显示所有当前进程的列表、它们的 SQL 查询和状态。现在通常如果单个查询导致许多其他查询锁定,那么它应该很容易识别。受影响的查询将具有状态,Locked并且有问题的查询将自行退出,可能正在等待一些密集的东西,例如临时表。

    如果不是很明显,那么您将不得不使用您的 SQL 演绎能力来确定哪条有问题的 SQL 可能是您陷入困境的原因。

    • 62
  2. Polymorphix
    2014-06-05T23:42:58+08:002014-06-05T23:42:58+08:00

    如果您使用 InnoDB 并且需要检查正在运行的查询,我建议

    show engine innodb status;

    如Marko的链接中所述。这将为您提供锁定查询,有多少行/表被它锁定等。查看事务。

    使用的问题SHOW PROCESSLIST是除非其他查询排队,否则您将看不到锁。

    • 49
  3. M Sleman
    2013-05-09T20:55:44+08:002013-05-09T20:55:44+08:00

    尝试SHOW OPEN TABLES:

    show open tables where In_Use > 0 ;
    
    • 39
  4. Peter V. Mørch
    2018-11-30T16:05:26+08:002018-11-30T16:05:26+08:00

    没有一个答案可以显示当前持有的所有锁。

    例如在终端中的 mysql 中执行此操作。

    start transaction;
    update someTable set name="foobar" where ID=1234;
    -- but no rollback or commit - just let it sit there
    

    显然,上面的事务持有锁,因为事务仍然处于活动状态。但是现在没有查询正在进行,也没有人在任何地方等待锁(至少)。

    INFORMATION_SCHEMA.INNODB_LOCKS是空的,考虑到文档,这是有道理的,因为只有一个事务,目前没有人在等待任何锁。无论如何也INNODB_LOCKS已弃用。

    SHOW ENGINE INNODB STATUS没用:someTable根本没有提到

    SHOW FULL PROCESSLIST是空的,因为罪魁祸首现在实际上并没有运行查询。

    您可以使用INFORMATION_SCHEMA.INNODB_TRX,performance_schema.events_statements_history和performance_schema.threads提取任何活动事务在过去执行的查询,如我的其他答案中所述,但我没有遇到任何方式看到someTable在上述场景中被锁定。

    到目前为止,其他答案中的建议至少无济于事。

    免责声明:我没有安装 innotop,也没有打扰。也许这可以奏效。

    • 32
  5. Anvesh
    2016-06-21T01:10:18+08:002016-06-21T01:10:18+08:00

    参考来自这篇文章。

    您可以使用以下脚本:

    SELECT 
        pl.id
        ,pl.user
        ,pl.state
        ,it.trx_id 
        ,it.trx_mysql_thread_id 
        ,it.trx_query AS query
        ,it.trx_id AS blocking_trx_id
        ,it.trx_mysql_thread_id AS blocking_thread
        ,it.trx_query AS blocking_query
    FROM information_schema.processlist AS pl 
    INNER JOIN information_schema.innodb_trx AS it
        ON pl.id = it.trx_mysql_thread_id
    INNER JOIN information_schema.innodb_lock_waits AS ilw
        ON it.trx_id = ilw.requesting_trx_id 
            AND it.trx_id = ilw.blocking_trx_id
    
    • 9
  6. Arie K
    2009-07-07T02:15:46+08:002009-07-07T02:15:46+08:00

    使用此命令

    SHOW PROCESSLIST
    

    将显示当前正在运行的所有进程,包括已获得表锁定的进程。

    • 7
  7. Marko Carter
    2009-07-07T02:39:33+08:002009-07-07T02:39:33+08:00

    AFAIK 在 MYSQL 中仍然没有原生方式,但我使用innotop。它是免费的,并且还具有许多其他功能。

    另请参阅此链接以获取有关使用 innotop 工具的更多信息。

    • 7

相关问题

  • MySql服务器连接问题

  • 哪个数据库服务器扩展性更好:PostgreSQL 还是 MySQL?

  • MySQL安装期间我应该如何诊断ERROR 1045?

  • MySQL 监控工具

  • 跨地理位置不同的服务器的 MySQL 复制

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    从 IP 地址解析主机名

    • 8 个回答
  • Marko Smith

    如何按大小对 du -h 输出进行排序

    • 30 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    Windows 中执行反向 DNS 查找的命令行实用程序是什么?

    • 14 个回答
  • Marko Smith

    如何检查 Windows 机器上的端口是否被阻塞?

    • 4 个回答
  • Marko Smith

    我应该打开哪个端口以允许远程桌面?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    MikeN 在 Nginx 中,如何在维护子域的同时将所有 http 请求重写为 https? 2009-09-22 06:04:43 +0800 CST
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    0x89 bash中的双方括号和单方括号有什么区别? 2009-08-10 13:11:51 +0800 CST
  • Martin Hope
    kch 如何更改我的私钥密码? 2009-08-06 21:37:57 +0800 CST
  • Martin Hope
    Kyle Brandt IPv4 子网如何工作? 2009-08-05 06:05:31 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve