我正在尝试了解MS Enterprise Library的数据访问块如何管理其与SQL的连接。我遇到的问题是,在稳定负载下(来自负载测试),每隔10分钟,与SQL的连接数量会迅速增加 - 这会导致网站响应时间显着增加。
这是我正在运行的场景:
这就是我们看到的问题:
我看过的内容:
数据库通话:
数据库中的所有调用都以:
开头SqlDatabase database = new SqlDatabase([...]);
执行任一proc而不需要输出:
return database.ExecuteScalar([...], [...]);
或读取包含在using语句中:
using (SqlDataReader reader = (SqlDataReader)database.ExecuteReader([...], [...]))
{
[...]
}
没有直接使用SqlConnection,没有.Open()或.Close()方法,也没有抛出异常
数据库验证:
我们在登录/注销事件上运行SQL分析器,并使用sp_who2命令拍摄快照,显示谁拥有这些连接。后者表明,网站(通过机器+凭证看到)确实存在连接。
没有预定作业(数据库或Web服务器),并且当Web服务器没有负载时用户连接负载稳定。
连接池配置
我知道min&可以使用连接字符串更改连接池的最大大小。
例如:
“数据源= [服务器];初始目录= [x];集成安全性= SSPI; 最大 泳池大小= 75;最小泳池大小= 5; “
后退措施可能是将最小尺寸设置为~10
我理解默认最大值为100,默认最小值为0(from here)
我有点想到连接池(特定于此设置)和SQL中的用户连接性能计数器。 This article将这些连接池引入用于管理连接字符串,这似乎与我的假设不同(保持通常可用的连接池,以避免在SQL上重新打开它们的成本)
我还没有看到任何可以轻易默认为5或10分钟的配置参数,为零...
所以,任何帮助都表示赞赏。
我知道10分钟的峰值听起来像负载的变化,或新的活动正在发生 - 但我们已经很努力地隔离那些&任何其他因素 - 对于这个问题,我希望了解EL扩展其连接和...下来。
感谢。
答案 0 :(得分:0)
因此,事实证明,SQL用户连接已创建&只要所有其他连接都忙,就会添加到池中。因此,当长时间运行的查询发生,或者数据库没有响应时,它将选择扩展以管理负载。
在我们的案例中,原因恰好是SQL复制工作(不幸,但发现......) - 用户连接数的变化只是一个症状,而不是可能的原因。
虽然事情原因在其他地方,但我现在觉得我理解连接池管理,从这个(可以说是其他的)SQL库。