MySQL 8.0在高并发短连接下需关闭performance_schema相关consumer、启用tcp_tw_reuse、改用mysql_native_password认证,否则性能反低于5.7;调优后吞吐可超5.7约22%。

MySQL 8.0 在高并发短连接场景下整体吞吐更高,但稳定性更依赖配置;5.7 更“钝感”,默认行为反而在某些压测中抖动更小。
tcp_tw_reuse 和 tcp_tw_recycle 的版本适配差异
短连接频繁建立/断开会大量产生 TIME_WAIT 状态。5.7 推荐启用 net.ipv4.tcp_tw_recycle = 1 加速回收,但该参数在 NAT 环境下有严重兼容问题(如 Kubernetes Service、云厂商 SLB),且 MySQL 8.0 已明确弃用——8.0 必须靠 tcp_tw_reuse = 1 + 合理的 net.ipv4.tcp_fin_timeout(建议设为 30)来缓解。
- 5.7 中即使不调优,
tcp_tw_recycle默认可开,短连接 QPS 上限受系统连接回收速度制约较小 - 8.0 必须关闭
tcp_tw_recycle(否则可能报错或连接失败),若未同步开启tcp_tw_reuse,会出现大量Cannot assign requested address错误 - 实测:同一台 24 核机器跑 Sysbench
oltp_point_select(64 并发、连接复用关),8.0 在未调内核参数时 TPS 比 5.7 低约 18%,调优后反超 22%
连接认证模块对握手延迟的实际影响
MySQL 8.0 默认使用 caching_sha2_password 插件,即使客户端未显式启用 SSL,握手阶段也会触发额外的 RSA 密钥协商与 SHA256 计算——这对毫秒级短连接是显著开销。
- 现象:
SHOW PROCESSLIST中大量连接卡在Authentication状态,performance_schema.events_statements_summary_by_digest显示CONNECT类事件平均耗时比 5.7 高 3–5ms - 解决路径不是降级插件,而是:① 客户端显式指定
default_authentication_plugin=mysql_native_password(仅限内网可信环境);② 或服务端配置default_authentication_plugin=mysql_native_password并重启(需确认业务无强密码策略要求) - 注意:8.0 中
caching_sha2_password的性能损耗在连接池复用场景下几乎不可见,问题只集中在“每次请求建新连接”的 Web 应用直连模式
performance_schema 默认开关带来的 CPU 缓存抖动
8.0 的 performance_schema 默认全量开启,尤其 events_statements_current 和 events_waits_current 会高频写入内存结构,在高并发短连接下引发 L3 cache thrashing。
- 典型表现:CPU 使用率虚高(非计算型,而是 cache miss 导致的重填开销),
sysbench测试中 128 并发下 8.0 的%sys时间比 5.7 高出 15–20% - 必须操作:测试或生产部署前执行
UPDATE performance_schema.setup_consumers SET ENABLED = 'NO' WHERE NAME LIKE 'events_statements_%';,并确认setup_instruments中相关 wait/event 项已禁用 - 5.7 默认只开基础 consumer,所以这个动作在 5.7 上基本无效,但在 8.0 是必选项
innodb_flush_log_at_trx_commit=1 下的 redo 写入路径差异
当业务要求强一致性(如金融类事务),innodb_flush_log_at_trx_commit=1 是刚需,此时 8.0 的 redo 日志刷盘链路更重,但可通过参数微调收窄差距。
- 8.0 新增了
innodb_log_write_ahead_size(默认 8192),在小事务密集场景下,设为 4096 可减少单次 write-ahead 的冗余 IO - 5.7 的 redo buffer 刷盘逻辑更线性,
innodb_log_buffer_size设为 8M 通常足够;8.0 建议至少 16M,否则 buffer chain 锁竞争会在 200+ TPS 以上明显抬高延迟 - 关键提醒:8.0 的
innodb_redo_log_encrypt=OFF不代表零开销——CRC32 校验和 buffer lock 仍存在,而 5.7 完全无此路径
真正决定高并发短连接表现的,从来不是“版本号大小”,而是你有没有关掉 8.0 默认打开的那些“监控友好但性能敏感”的开关,以及是否让 TCP 层和认证层的行为对齐真实负载特征。漏掉其中任意一项,都可能导致 8.0 反而比 5.7 慢一截。



















