我在带有 MySQL 后端的 IIS 上运行 PHP 网络应用程序。
我的数据库在高峰时段会产生相当多的流量(每秒最多 5,000 次选择),有时我会遇到性能问题,因此我试图追踪并消除问题。
我的 CPU、Ram、磁盘、网络都很好,但远远低于容量,但我注意到有时当事情陷入困境时会有许多空闲线程闲置,如果我手动终止这些线程,性能就会恢复。
在这个例子中没有大量的空闲线程,但是你可以看到有几个已经存活了超过 500 秒。有时我看到许多线程存活超过 500 秒,但我不知道它们为什么不自杀。
以下是我的连接值
我将此服务器上的最大连接数设置为 1500,因此我知道我没有达到该限制。不确定这是否相关,但我的 innodb_thread_concurrency 设置为 66。
下面是我对mysql的超时设置
显然服务器配置不是我的事。我只是一个试图在这个世界上谋生的低级开发人员。我的问题是,这些长时间运行的空闲线程是否会导致我的服务器出现瓶颈并减慢速度?如果是这样,我应该查看和调整哪些设置以确保我的服务器正确处理负载?
最佳答案
原来问题是我添加到 my.ini 文件中的一个参数。打开文件限制 = 4096。
如果我将 table_cache 的大小从 300 增加到 2000,建议我添加此参数。事实证明这是个糟糕的建议。一旦我注释掉 open-files-limit = 4096,我所有的问题都消失了。线程开始死亡,它们从 300 到 500 个空闲线程减少到 20 个以下空闲线程。
关于php - 为什么一些 MySQL 线程永远不会死?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49656513/