MySQL 连接数:为什么你的服务器总“Too many connections”?连接池的配置和优化

💡 原文中文,约2800字,阅读约需7分钟。
📝

内容提要

MySQL 连接数查询对性能排查至关重要。可通过命令查看当前连接数、连接列表和最大连接数。大部分连接处于空闲状态,应根据并发情况调整连接池设置,以避免超出最大连接数导致错误。

🎯

关键要点

  • 查看 MySQL 当前连接数是排查性能瓶颈和配置连接池的基本功。

  • 使用命令 SHOW STATUS LIKE 'Threads_connected' 查看当前打开的连接数。

  • 使用命令 SHOW FULL PROCESSLIST 查看详细的连接列表,了解连接状态和持续时间。

  • 大部分连接处于 Sleep 状态,说明这些连接是空闲的,没有在执行查询。

  • 高并发场景下,默认的 MaxIdleConns 可能不足,需根据实际情况调整连接池设置。

  • 使用命令 SHOW STATUS LIKE 'Threads_running' 查看当前正在执行查询的连接数。

  • 使用命令 SHOW VARIABLES LIKE 'max_connections' 查看最大连接数限制,默认值为 151。

  • 需限制 golang gorm 的最大连接数,避免流量激增时超出数据库限制。

  • 使用命令 SHOW STATUS LIKE 'Max_used_connections' 查看历史最高连接数,判断连接池设置是否合理。

  • 空闲连接状态占用内存为 2MB ~ 5MB,普通查询连接状态为 5MB ~ 10MB,重度查询连接状态可达 32MB ~ 128MB+。

延伸问答

如何查看当前MySQL的连接数?

可以使用命令 SHOW STATUS LIKE 'Threads_connected' 来查看当前打开的连接数。

MySQL中连接数过多会导致什么问题?

连接数过多会导致错误提示'Too many connections',影响数据库的正常服务。

如何查看MySQL的最大连接数限制?

可以使用命令 SHOW VARIABLES LIKE 'max_connections' 来查看最大连接数限制,默认值为151。

为什么大部分MySQL连接处于Sleep状态?

大部分连接处于Sleep状态是因为这些连接是空闲的,没有在执行查询。

如何优化MySQL的连接池设置?

应根据实际的并发情况调整连接池设置,避免在高并发场景下连接数不足。

MySQL连接占用的内存是多少?

空闲连接占用2MB~5MB,普通查询连接占用5MB~10MB,重度查询连接可达32MB~128MB以上。

➡️

继续阅读