【发布时间】: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
- 此解决方案是否对应用程序有任何影响,因为它会自动终止连接?如果从数据库中获取数据的时间有点长,会发生什么?
- 我预计一次大约有 1000 个巨大的流量。那么mysql中的最大连接数应该是多少?这会降低 mysql 的性能吗?
[注意:我的应用程序没有问题,因为我已经关闭了每个 mysql 连接]
提前致谢。
【问题讨论】:
-
您的注释听起来像是您实际上在连接上调用了
Close。你有没有想过using块?这比自己处理所有可能的异常情况要容易得多。 -
是的,我正在使用
Close。如果没有任何效果,我会尝试一下。 -
手动调用
Close容易出错,因为异常或正常的流程控制可能会绕过您的 Close 调用。命令和阅读器也可以与using块一起使用,因此您无需在发生异常时关注资源管理。 -
如果我必须使用
using,那么我必须对我的应用程序进行更多更改。有 300 多个地方可以进行更改。所以我一直在寻找捷径。 -
好吧,
using是在手动编程正确的Close行为时可以使用的快捷方式太多了。你是说你手动做了300个地方,你有问题。最有可能的是,您在这 300 个地方中的一些地方犯了一些小错误。这很正常,每个人都会这样做,这就是using构造存在的原因。帮助开发者减少错误。
标签: c# mysql database-administration