为什么有些MySQL线程永远不会死?

时间:2018-04-04 16:57:57

标签: php mysql iis

我正在IIS上运行带有MySQL后端的PHP Web应用程序。

我的数据库在高峰时段获得了相当多的流量(每秒多达5,000次选择),有时我会遇到性能问题,所以我试图跟踪它并消除问题。

我的CPU,Ram,磁盘,网络都很好,远远低于容量,但我注意到,当事情陷入困境时,有时会有很多空闲线程挂起,如果我手动杀死这些线程,性能会恢复正常。

Threads

在这个例子中,没有大量的空闲线程,但你可以看到有一对已经存在超过500秒。有时我看到很多线程活着超过500秒,我不知道他们为什么不自杀。

以下是我的连接值

Connections

我将此服务器上的最大连接数设置为1500,所以我知道我没有遇到这个限制。不确定这是否相关,但我的innodb_thread_concurrency设置为66。

以下是我对mysql的超时设置

enter image description here

显然服务器配置不是我的事。我只是一个低调的开发者,试图在这个世界上谋生。我的问题是,这些长时间运行的空闲线程是否会导致我的服务器瓶颈并减慢速度?如果是这样,我应该查看和调整哪些设置以确保我的服务器正确处理负载?

1 个答案:

答案 0 :(得分:1)

原来问题是我添加到my.ini文件的参数。 open-files-limit = 4096.

如果我将table_cache的大小从300增加到2000,建议我添加此参数。事实证明这是一个糟糕的建议。一旦我注释掉open-files-limit = 4096,我的所有问题就消失了。线程开始死亡,它们从300到500个空闲线程的范围减少到低于20个空闲线程。

相关问题