先确认错误类型,再依次排查连接数、慢查询、锁等待及资源瓶颈。常见报错如Too many connections表明连接耗尽,需检查max_connections与Threads_connected;Lock wait timeout或Deadlock提示锁竞争,应分析slow_query_log和SHOW ENGINE INNODB STATUS;结合SHOW PROCEsslIST、系统监控定位性能瓶颈,优化索引、事务范围和连接池配置以提升并发能力。

mysql在高并发场景下出现报错,通常与连接数不足、锁竞争、资源瓶颈或配置不合理有关。排查这类问题需要从错误现象入手,结合日志、监控和SQL执行情况逐步分析。
查看具体错误信息
先确认应用返回的错误类型,常见的高并发报错包括:
- Too many connections:数据库最大连接数被耗尽
- Lock wait timeout exceeded:行锁或表锁等待超时
- Deadlock found when trying to lock:发生死锁
- MySQL server has gone away:连接空闲超时或包过大
这些错误提示是排查的第一线索,可直接定位方向。
检查连接数使用情况
连接数打满是最常见的高并发问题。执行以下命令查看当前连接状态:
SHOW VARIABLES LIKE ‘max_connections’;
SHOW STATUS LIKE ‘Threads_connected’;
如果Threads_connected接近max_connections,说明连接数不够。可以临时调大:
SET GLOBAL max_connections = 500;
但更根本的解决方式是优化连接池配置,避免连接泄漏,使用连接池(如HikariCP)控制最大连接数,并设置合理的超时时间。
分析慢查询和锁等待
高并发下SQL执行效率直接影响系统稳定性。启用慢查询日志:
SET GLOBAL slow_query_log = ON;
SET GLOBAL long_query_time = 1;
SET GLOBAL log_output = ‘table’;
执行一段时间后,从mysql.slow_log表中查找执行时间长、扫描行数多的SQL。
对于Lock wait timeout问题,查看最近的死锁日志:
SHOW ENGINE INNODB STATUSG
在输出中找到LATEST DETECTED DEADLOCK部分,分析哪几个事务相互等待,进而优化事务逻辑,比如缩短事务范围、加锁顺序一致、避免长事务。
监控系统资源和InnoDB状态
高并发还可能受CPU、内存、磁盘IO限制。通过top、iotop等工具查看服务器负载。
在MySQL内,关注:
- Innodb_row_lock_waits:行锁等待次数
- Threads_running:正在执行的线程数
- Handler_read_rnd_next:反映全表扫描频率
使用SHOW PROCESSLIST查看当前活跃连接,找出处于Locked或Sending data状态的SQL,重点优化。
基本上就这些。关键是先看错,再查连接、慢SQL和锁,最后结合资源使用综合判断。问题往往出在未索引的查询、大事务或连接池配置不当上,针对性优化后能显著提升并发能力。


