技术博客 技术博客
  • JAVA
  • 仓颉
  • 设计模式
  • 人工智能
  • Spring
  • Mybatis
  • Maven
  • Git
  • Kafka
  • RabbitMQ
  • RocketMQ
  • Redis
  • Zookeeper
  • Nginx
  • 数据库套件
  • MySQL
  • Elasticsearch
  • MongoDB
  • Hadoop
  • ClickHouse
  • Hbase
  • Hive
  • Flink
  • Flume
  • SQLite
  • linux
  • Docker
  • Jenkins
  • Kubernetes
  • 工具
  • 前端
  • AI
GitHub (opens new window)
  • JAVA
  • 仓颉
  • 设计模式
  • 人工智能
  • Spring
  • Mybatis
  • Maven
  • Git
  • Kafka
  • RabbitMQ
  • RocketMQ
  • Redis
  • Zookeeper
  • Nginx
  • 数据库套件
  • MySQL
  • Elasticsearch
  • MongoDB
  • Hadoop
  • ClickHouse
  • Hbase
  • Hive
  • Flink
  • Flume
  • SQLite
  • linux
  • Docker
  • Jenkins
  • Kubernetes
  • 工具
  • 前端
  • AI
GitHub (opens new window)
  • mysql

    • MySQL 问题汇总
      • 锁超时
    • MySQL 索引介绍
    • MySQL 锁介绍
    • MySQL 索引优化工具 explain
    • MySQL 主从复制(GTID)
    • MySQL 8安装
    • MySQL 8.x新特性总结
    • MySQL UDF以及新类型JSON
    • MySQL 高可用MGR(一) 理论
    • MySQL 高可用MGR(二) 搭建
    • MySQL 高可用MGR(三) 测试
  • Elasticsearch

    • ES 7.8.0(一) 入门介绍
    • ES 7.8.0(二) 读、写和写索引流程以及文档分析过程
    • ES 7.8.0(三) 文档冲突
  • mongodb

    • mongodb
  • hadoop

    • Hadoop 伪分布式及集群
    • Hadoop 指令
    • Hadoop 读写流程详解
    • Hadoop SpringBoot集成
    • Hadoop MapReduce机制
    • Hadoop YARN
    • Hadoop MapReduce配置和编写job及数据倾斜的解决
    • Hadoop MapReduce自定义格式输入输出
  • clickhouse

    • ClickHouse 介绍及安装
    • ClickHouse 数据类型
    • ClickHouse 表引擎
    • ClickHouse SQL操作
    • ClickHouse 副本配置
    • ClickHouse 分片与集群部署
    • ClickHouse Explain及建表优化
    • ClickHouse 语法优化规则
    • ClickHouse 查询优化
    • ClickHouse 数据一致性
    • ClickHouse 物化视图
    • ClickHouse MaterializeMySQL引擎
    • ClickHouse 监控及备份
  • hbase

    • Hbase 介绍及安装
    • Hbase 优化
    • Hbase phoenix安装及使用
    • Hbase LSM-TREE
  • hive

    • Hive 介绍及安装
    • Hive 内外部表、分区表、分桶表概念及hiveSQL命令
    • Hive 数据类型
    • Hive 函数 MySQL联合
    • Hive 数据倾斜和优化
    • Hive Sqoop安装及指令
  • flink

    • Flink 介绍及安装
    • Flink 配置介绍及Demo
    • Flink API讲解
    • Flink 运行架构
    • Flink 时间语义及Watermark
    • Flink 状态管理
    • Flink 容错,检查点,保存点
    • Flink 状态一致性
    • Flink Table API 和 Flink SQL
    • Flink CEP编程
    • Flink Joining编程
    • Flink CDC
  • flume

    • Flume 日志收集系统介绍及安装
    • Flume Source支持的类型
    • Flume Sink支持的类型
    • Flume Channel支持的类型
    • Flume Selector
    • Flume Interceptor拦截器类型
    • Flume Process
  • sqlite

    • SQLite介绍
目录

MySQL 问题汇总

# 锁超时

当出现 Lock wait timeout exceeded; try restarting transaction ,可以通过以下 SQL 来排查:

  • 查看 InnoDB 存储引擎内部状态信息的命令,它可以提供非常详细的关于 InnoDB 存储引擎的运行状态、性能指标以及当前存在的问题等信息

    SHOW ENGINE INNODB STATUS; 
    
    1

    内容包括 事物信息 , 锁信息 , 缓冲池信息 , 日志信息 , 表空间信息 ,当程序发生以上报错信息,使用该语句,可以查看到相关报错信息。

  • 查看当前被锁定或正在使用的表的命令。它能帮助你识别哪些表正在被事务或查询占用,从而排查锁等待、死锁等问题

    SHOW OPEN TABLES WHERE In_use > 0;
    # 示例
    +----------+-------------+--------+-------------+
    | Database | Table       | In_use | Name_locked |
    +----------+-------------+--------+-------------+
    | mydb     | orders      | 2      | 0           |
    | mydb     | customers   | 1      | 0           |
    +----------+-------------+--------+-------------+
    * orders 表被锁定 2 次(可能有两个并发事务在操作它)。
    * customers 表被锁定 1 次。
    * 两个表的名称均未被锁定(Name_locked=0),可正常进行 DML 操作。
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    • Database 表所在的数据库名称。
    • Table 表的名称。
    • In_use 表示当前正在使用的连接数。
    • Name_locked 表示当前表是否被锁定。
  • 看当前正在执行操作的线程(即非空闲连接)的 SQL 查询。它能帮助你监控数据库中活跃的查询和事务,排查性能问题或长时间运行的任务。

    SELECT * FROM information_schema.PROCESSLIST WHERE Command != 'Sleep';
    # 示例
    +-------+------+-------------------+--------+---------+------+------------------+----------------------------------+
    | ID    | USER | HOST              | DB     | COMMAND | TIME | STATE            | INFO                             |
    +-------+------+-------------------+--------+---------+------+------------------+----------------------------------+
    | 12345 | root | localhost         | mydb   | Query   | 120  | Sorting result   | SELECT * FROM orders ORDER BY id |
    | 12346 | app  | 192.168.1.1:56789 | mydb   | Execute | 5    | Sending data     | UPDATE users SET status=1 WHERE id=100 |
    +-------+------+-----------+--------+---------+------+------------------+----------------------------------+
    * 线程 12345:用户 root 在执行 SELECT 查询,已运行 120 秒,正在排序结果(可能需要优化索引)。
    * 线程 12346:应用用户 app 在执行 UPDATE,运行 5 秒,正在返回数据。
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    • ID 线程 ID(唯一标识),用于 KILL 命令终止线程(如 KILL 12345;)。
    • USER 执行该线程的用户(如 root、app_user)。
    • HOST 客户端主机名或 IP 地址(如 localhost、192.168.1.1:56789)。
    • DB 当前线程操作的数据库名(若未指定则为 NULL)。
    • COMMAND 线程当前执行的命令类型:・Query:正在执行 SQL 查询。・Sleep:空闲等待。・Connect:正在连接数据库。・Execute:正在执行预处理语句。
    • TIME 线程已持续执行的时间(秒)。若值很大,可能是慢查询或事务未提交。
    • STATE 线程当前状态(如 Sorting result、Copying to tmp table),指示查询执行到哪一步。
    • INFO 正在执行的 SQL 语句(可能被截断,使用 SHOW FULL PROCESSLIST 可查看完整语句)。

SELECT * FROM information_schema.PROCESSLIST WHERE Command != 'Sleep'; 语句能方便的看到当前有哪个 sql 正在占有锁,可以看他的执行时间,如果太长,需要考虑是否优化,也可以立马 kill 这个线程,如果 kill 不起作用,需要重启 mysql。

上次更新: 6/11/2025, 4:10:30 PM
MySQL 索引介绍

MySQL 索引介绍→

Theme by Vdoing | Copyright © 2023-2025
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式