我正在重建一个在过去五年中发展起来的系统,最初是从经典ASP开始的,我现在正在将整个事情转移到ASP.NET(使用VB.NET)
系统一直受到打开过多数据连接的持续问题的困扰,导致周期性的“max_connections超出”错误。
多次向我的服务器主机询问过这个问题后,我仍然遇到了麻烦,以为我会把它打开到SO。
我目前正在打开如下连接:
Dim sql = "SQL SELECT"
Dim oConnection As OdbcConnection = New OdbcConnection(ConfigurationManager.ConnectionStrings("dbConn").ConnectionString)
oConnection.Open()
openDatabase = New OdbcCommand(sql, oConnection)
连接字符串包含在web.config文件中,看起来像这样
<add name="dbConn" connectionString="DRIVER={MySQL ODBC 3.51 Driver}; SERVER=mysql.dc-servers.com; DATABASE=dbName; UID=user; PASSWORD=pwd; OPTION=3; pooled=true" providerName="System.Data.Odbc"/>
我使用像这样的DataReader获取实际数据:
Dim objDataReader As OdbcDataReader
objDataReader = openDatabase.ExecuteReader(CommandBehavior.CloseConnection)
While (objDataReader.Read())
// do stuff
End While
objDataReader.Close()
我的理解是,假设数据或数据库(CommandBehavior.CloseConnection)
没有错误,应确保当行objDataReader.Close()
关闭Reader时,它应该关闭连接(或将其返回到游泳池)
我收到了这些max_connections错误。
查看MySQL管理员的开放流程,我可以看到连接没有被关闭。
我对连接过程的理解很少,我担心并且访问MySQL服务器非常有限,因此很难找到这里发生的事情......除非当然......我误解了一些东西,我希望是这样的,你们可以指点我!
答案 0 :(得分:0)
我对DataReader了解不多,但似乎你需要找到这个漏洞。我建议首先使用以下内容手动设置连接字符串中的池大小:最大和最小池大小属性请参阅详细信息:http://dev.mysql.com/doc/refman/5.0/en/connector-net-connection-options.html
我还建议监视打开和关闭与池集的连接以关闭以查看连接生命周期实际发生的情况。您可以在mysql控制台中使用
show processlist;
查看当前连接和
show global status;
监控所有数据库属性。我还建议从mysql阅读这篇文章,解释&#34;太多的连接问题&#34;
http://dev.mysql.com/doc/refman/5.5/en/too-many-connections.html
确保mysql配置与您的应用程序配置一致,以确保您不允许的连接数超过服务器实际允许的数量。
干杯,