MySQL最大连接与死锁

    技术2025-04-04  18

    MySQL在进行alter table等DDL操作时,有时会出现Waiting for table metadata lock的等待场景。而且,一旦alter table TableA的操作停滞在Waiting for table metadata lock的状态,后续对TableA的任何操作(包括读)都无法进行,因为他们也会在Opening tables的阶段进入到Waiting for table metadata lock的锁等待队列。如果是产品环境的核心表出现了这样的锁等待队列,就会造成灾难性的后果。

    查看进程

    $ show processlist;

    查看连接数

    show variables like '%max_connections%';

    查看死锁

    select trx_state, trx_started, trx_mysql_thread_id, trx_query from information_schema.innodb_trx;

    查询是否锁表

    show open tables where in_use>0;

    查询进程

    show processlist

    查询到相对应的进程,然后 kill id

    查看正在锁的事务

    select * from information_schema.innodb_locks;

    查看等待锁的事务

    select * from information_schema.innodb_lock_waits;

    调整锁超时阈值

    SHOW VARIABLES LIKE 'innodb_lock_wait_timeout';
    Processed: 0.011, SQL: 9