2014-09-23 79 views
0

我正在开发一个使用C#和MySql的应用程序(存储过程)。在运行该应用程序一段时间后,它显示连接太多。然后我使用命令SHOW STATUS WHERE variable_name = 'Threads_connected';SHOW PROCESSLIST;来调试问题。似乎每次我在我的应用程序上运行任何操作时,mysql会创建新线程,并将线程标记为睡眠。此外,线程没有按时关闭。我发现了一个解决方案,即设置mysql环境变量如下。mysql中连接错误太多

interactive_timeout=180 
wait_timeout=180 
  1. 这个解决办法有,因为它会自动杀死连接的应用程序产生任何影响?如果数据从数据库获取时间有点长,会发生什么?
  2. 我预计一次有1000个流量巨大的流量。那么mysql中的最大连接数应该是多少?这会降低mysql的性能吗?

[注:有一个在我的应用程序没有问题,因为我已经关闭了所有的MySQL连接]

在此先感谢。

+0

你的笔记听起来像你实际上在你的连接上调用'Close'。你有没有想过使用块?这比你自己处理所有可能的异常情况要容易得多。 – nvoigt 2014-09-23 05:41:48

+0

是的,我正在使用'Close'。如果没有任何作用,我会试一试。 – Redone 2014-09-23 05:43:46

+1

手动调用'Close'容易出错,因为异常或正常流量控制可能会绕过您的关闭呼叫。命令和读取器也可以与'使用'块一起使用,所以当发生异常时你不需要关注资源管理。 – nvoigt 2014-09-23 05:45:41

回答

1

我希望下面ARTICAL将帮助你得到你的第二点的答案

http://dev.mysql.com/doc/refman/5.5/en/too-many-connections.html

在应用程序不关闭连接正常的情况下,WAIT_TIMEOUT是调整的一个重要参数,并丢弃未使用或空闲连接以最大限度地减少到MySQL服务器的活动连接数 - 这最终将有助于避免“太多连接”错误。

Threads_running是一个有价值的指标监测,因为它不指望睡线程 - 它显示主动和目前正在处理的查询量,同时threads_connected的状态变量显示所有连接线的值,包括空闲连接以及

+0

@Rachit Patel我正在考虑使用solaris来托管mysql服务器。任何mysql配置脚本都将有助于处理巨大的流量。 – Redone 2014-09-23 06:10:28

+0

@Redone是的,你可以改变“max_connections”属性的值来增加最大连接。 http://dev.mysql.com/doc/refman/5.0/en/show-variables.html。我对solaris或windows服务器不太了解mysql的好处。 – 2014-09-23 06:31:13