【发布时间】:2013-07-30 08:23:56
【问题描述】:
在我们的 ASP.NET 应用程序中,我们实现了一个构建在 MySQL 之上的数据层,它使用Connector/NET 来实现实体框架。
这对于我们的大多数 CRUD 操作都非常有效,但是当我们运行包含数百条记录的 INSERT 语句时,它会引发“连接过多”异常。
虽然我接受我们正在进行大量单独的读/写调用(我们在每次插入之前查询重复条目,而且还有一个审计日志,该日志也使用每个插入的单独查询写入)但不应该连接池会处理这个吗?
另外,在this similar thread 中,OP 被告知要使用我完全同意的 using 语句,在我们的例子中,每个查询 is 都已经包含在 using 语句,我假设它正在以一种有效的方式管理连接:即,如果另一个请求已排队,则不处理它们。
不管怎样,connect timeout 目前是 50,已经很小了,对吧?将其移至 500 没有任何区别,而将其移至 10 使我在抛出相同异常之前多插入了大约 50%。
那么,既然 DbContext 的每个实例都包含在 using 语句中,为什么我们会收到“连接太多”异常?
更新:我们发现问题的根源实际上是由于我们的一个存储库在其构造函数中打开了一个数据库连接,即使这个连接从未使用过。对不起,伙计们,这原来是一个红鲱鱼。感谢您的建议。
【问题讨论】:
-
max_connections 的值是多少?尝试阅读这篇文章,也许它可以帮助您:mysqlperformanceblog.com/2010/03/23/… 有趣的是:“您通常会为超级用户保留一个连接,但如果您的应用程序以超级用户身份连接,这将无济于事(这是一个坏主意无论如何)。”
-
max_connections = 100。我不想增加这个,因为我觉得这不是答案。它只是将问题推得更远。
标签: mysql .net entity-framework connector-net