我有一个应用程序不断向统计表插入数据。打开的连接数通常平均约为 20 到 22 个。
还有一个由 cron 运行的 PHP 处理脚本,每 30 分钟运行一次。UTC 时间凌晨 2 点左右,处理时间约为 10 分钟,这是一天中最长的处理时间。
大约在这个时候,我收到了大约 8000 个PDOException: SQLSTATE[08004] [1040] Too many connections
错误。
设置max_connections
为 500。
我观察到,这样做SHOW PROCESSLIST;
通常不会在信息列中看到任何查询。在 cron 运行时,我确实会在列中看到 cron 的查询Info
,然后 SQL 插入会快速堆积在其下方。
我不太了解如何配置 MySQL,但似乎在 Cron 脚本运行时,统计表中的插入内容正在排队并超出最大连接限制。
什么原因导致此问题?我应该更改哪些配置设置?
答案1
您能检查以下参数吗?尝试增加 max_user_connections 值,如果应用程序长时间保持连接,则减少 wait_timeout。
max_user_connections=[value]
wait_timeout = [value]