【问题标题】:Too many connections error in mysqlmysql中的连接过多错误
【发布时间】:2014-09-23 05:36:49
【问题描述】:

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

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

[注意:我的应用程序没有问题,因为我已经关闭了每个 mysql 连接]

提前致谢。

【问题讨论】:

  • 您的注释听起来像是您实际上在连接上调用了Close。你有没有想过using 块?这比自己处理所有可能的异常情况要容易得多。
  • 是的,我正在使用Close。如果没有任何效果,我会尝试一下。
  • 手动调用Close 容易出错,因为异常或正常的流程控制可能会绕过您的 Close 调用。命令和阅读器也可以与using 块一起使用,因此您无需在发生异常时关注资源管理。
  • 如果我必须使用using,那么我必须对我的应用程序进行更多更改。有 300 多个地方可以进行更改。所以我一直在寻找捷径。
  • 好吧,using 在手动编程正确的Close 行为时可以使用的快捷方式太多了。你是说你手动做了300个地方,你有问题。最有可能的是,您在这 300 个地方中的一些地方犯了一些小错误。这很正常,每个人都会这样做,这就是using 构造存在的原因。帮助开发者减少错误。

标签: c# mysql database-administration


【解决方案1】:

我希望下面的文章能帮助你得到你的第二点的答案

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

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

Threads_running 是一个有价值的监控指标,因为它不计算休眠线程——它显示活动和当前正在处理的查询数量,而threads_connected 状态变量显示所有连接的线程值,包括空闲连接

【讨论】:

  • @Rachit Patel 我正在考虑使用 solaris 来托管 mysql 服务器。任何 mysql 配置脚本都有助于处理巨大的流量。
  • @Redone 是的,您可以更改“max_connections”属性的值以增加最大连接数。 dev.mysql.com/doc/refman/5.0/en/show-variables.html。而且我对适用于 mysql 的 solaris 或窗口服务器没有太多明确的想法。
猜你喜欢
  • 2012-12-29
  • 2020-09-03
  • 2010-11-15
  • 2017-10-29
  • 2015-03-01
  • 2011-06-29
  • 2018-11-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多