尽管“ wait_timeout”减少,但MariaDB进程列表中的大量休眠查询减少了

问题描述

我最近将我的PHP应用程序迁移到了具有PHP 7.3和MariaDB的新服务器上(之前是PHP 5.5和MysqL 5.5)。 我遇到“连接过多”错误的问题。 我想我的应用程序必须加以改进才能纠正。 在执行此操作时,我已使用以下值更改了mariaDB服务器conf:

__main__.A of type 'CustomType'

尽管进行了这些增强,但我仍然遇到相同的问题,仍然存在一些睡眠过程,其时间超过60秒... 并且线程数正在增加...直到max_coonections值为止。 当然,我已经重新启动了服务器。

我的PHP应用程序正在使用MysqLi和持久连接。

解决方法

简单,停止使用持久连接并重新启动服务器。

,

尽管增加max_connections可能会有所帮助,但只会使情况变得更糟。听起来您有很多连接彼此绊倒-没有完成。

查看SHOW PROCESSLIST。主要犯罪者之一是“睡眠”时间(“系统”进程除外)最多的非睡眠时间之一。

如果“进程列表”显示了30个以上的非“睡眠”连接,则降低max_connections和超时。这些将有助于疏通系统,但不会引起问题的根源。

“原因”通常是一个或几个长时间运行的查询,这些查询会阻止其他连接。让我们尝试使用慢日志来找到有问题的查询:http://mysql.rjweb.org/doc.php/mysql_analysis#slow_queries_and_slowlog

,

最后我发现,问题出在服务器的安装上。 我曾经像往常一样更改my.cnf,有些变量在每次重新启动时都会更改,而其他的则没有。

我意识到还有另一个conf文件,该文件或将我在my.cnf文件中所做的更改写入某些变量... 现在,我更改了正确的文件,并且服务器正在正常工作。

因此,如果mariaDB忽略了您在conf文件中所做的更改,请检查是否还有其他文件。