Azure功能 - SqlConnection连接池&超时

时间:2018-02-02 19:14:12

标签: c# sql-server azure-functions azure-app-service-envrmnt azure-functions-runtime

注意 - 我已经阅读了S.O关于此的其他主题,但不完全相同......

.net 461功能,c#

我有一个应用服务环境,其中包含一个专门针对此单一天蓝色功能的应用服务计划,使用2x P2工作人员。

函数本身以大约每秒1-2的速率响应服务总线主题事件 - 作为响应,我们通过存储过程将数据写入数据中心的SQL服务器。

在负载量大幅减少的预生产环境中,我们认为没有问题。在如上所示的生产负载下,我们始终得到2条SQL错误消息:

1 - SqlException - 发生超时,这可能是由于连接池没有连接

然后在此消息的第一个实例之后,每次运行的函数将始终提供默认值

2 - SqlException - 发生超时,可以到达网络实例等。请检查SQL服务器是否存在

网络人员检查并且流量正在访问SQL Server端口,但实际的SQL Server连接列表中没有连接。

我们的c#代码虽然无法发布实际代码,但却非常简单 - 通过Dapper进行的单个存储过程调用包含在一个使用块中。

using(var sqlConnection = new sqlConnection("connString"))
{
    sqlConnection.Open();
    // setup input params here
    // execute sproc here
    sqlConnection.Close(); // I know, shouldn't need this line when using a using block - but thought would check.
}

我们不理解的是在重新启动整个app-service之后的第一个函数调用 - 我们立即得到连接池错误,然后是超时。

我们的SqlConnection字符串不包含对池大小或超时的特定更改(因此应该是所有SQL默认值) - 唯一的事情是生产SQL服务器在非标准端口上运行(但可以访问)。

要记住两件事:

1 - 我们是否应该使用OpenAsync()和ExecuteAynsc() - 或者同步版本仍然足够,因为我们的负载不是很高。

2 - App Service Environment是否有任何特定的更改连接字符串池的内容?

提前致谢

修改

根据要求:

异步任务RunAsync(BrokeredMessage消息,TraceWriter日志){}

数据中心SQL Server是Sql Server Enterprise 2008R2

呼叫在非生产中工作的平均持续时间为250-300毫秒(我们有快速路线)

Payload - 非常小,5-8个字符串字段作为参数传递

1 个答案:

答案 0 :(得分:0)

弄清楚了这一点 - 连接池耗尽错误消息令人沮丧的红鲱鱼。

标准网络防火墙问题!!

谢谢大家