您的当前位置:首页正文

【MySQL】MySQL 8.0排查锁情况,通俗易懂!!!

2024-12-01 来源:个人技术集锦
​# 确认有没有锁等待show status like 'innodb_row_lock%';

SQL 语句 SHOW STATUS LIKE 'innodb_row_lock%'; 用于在 MySQL 数据库中查询与 InnoDB 行锁相关的各种状态信息。下面是这个 SQL 语句可能返回的一些关键信息及其含义:

innodb_row_lock_current_waits: 当前正在等待的行锁的数量。如果这个数值较高,说明可能存在较多的锁争用情况。

innodb_row_lock_time: 从启动到现在,数据库在等待行锁上总共花费的时间(以毫秒为单位)。较高的值可能表明存在严重的行锁争用问题,这可以用来评估整体性能影响,尤其是在高负载时。

innodb_row_lock_time_avg: 平均每次行锁等待所花费的时间(以毫秒为单位)。这个指标有助于评估行锁争用的严重程度,这个指标可以帮助了解通常情况下锁定等待的时间长度。

innodb_row_lock_time_max: 单次行锁等待的最长时间(以毫秒为单位)。这反映了最糟糕的锁等待情况。

innodb_row_lock_waits: 自从启动以来,总共发生行锁等待的次数。频繁的锁等待可能指出需要优化查询或数据库结构。

这些指标都是诊断数据库性能问题的重要工具,尤其是在并发较高的环境中,理解这些指标可以帮助数据库管理员调整事务的处理方式,优化SQL查询,或者调整数据库的配置,以减少锁的争用和提高整体性能。

# 确认有没有锁等待:show status like 'innodb_row_lock%';select * from information_schema.innodb_trx;# 查询锁等待详细信息 blocking_pid(锁源的连接线程)select * from sys.innodb_lock_waits; # 通过连接线程ID找SQL线程语句select * from performance_schema.threads;# 通过SQL线程找到SQL语句select * from performance_schema.events_statements_history;
# 查看锁状态select trx_id,trx_state,trx_started,trx_tables_locked,trx_rows_locked from innodb_trx;select * from sys.innodb_lock_waits;# 查看进程信息show full processlist;# 查看进程ID为2008的线程信息select thread_id,processlist_id from performance_schema.threads where processlist_id=146;# 根据线程ID,找到真正执行的SQL语句select thread_id,sql_text from performance_schema.events_statements_history where thread_id=846;​

能看得锁的详情!!!

显示全文