Azure SQL忽略工作流程上限忽略池大小

时间:2017-07-26 10:27:12

标签: c# asynchronous stored-procedures azure-sql-database

我必须在SQL中存储很多行。这是我在C#中的一些伪代码:

using (var con = new SqlConnection(ConfigurationManager.ConnectionStrings["DataContext"].ConnectionString))
{
    await con.OpenAsync();
    var sc = new SqlCommand("InsertUpdateMyobject", con);
    sc.CommandType = CommandType.StoredProcedure;
    sc.Parameters.AddWithValue("code", h.Code);
    await sc.ExecuteNonQueryAsync();
    // two more stored proc calls
}

我已将3个存储过程移动到一个,以限制sqlcommands的执行。有一个int作为输出参数,其中包含scope_identity()。我在我的连接字符串中添加了这个:

  

MultipleActiveResultSets = False; Encrypt = True; TrustServerCertificate = False; Connection Timeout = 30; ConnectRetryCount = 3; ConnectRetryInterval = 10; TransparentNetworkIPResolution = False; Max Pool Size = 60

还尝试将Asynchronous Processing=true;添加到连接字符串。

我已将Max pool size设置为60,因为我使用的是S0 Azure SQL数据库。我不想扩展到S1,S2或S3。我只是希望代码执行不会抛出异常,只是等待一段时间再下一次执行。我正在使用.net 4.6.2运行一个控制台应用程序,以便支持连接字符串中的重试部分。

当我运行sql部件大约100次时,我得到一个包含超过60个内部异常的聚合异常:

enter image description here

这是荷兰语,并说:

超时已过期。操作完成之前经过的超时时间或服务器没有响应

及以下:

超时已过期。从池中获取连接之前经过的超时时间。这可能是因为所有池连接都在使用中并且达到了最大池大小。

我的存储过程仅对3个表进行插入和删除,并在int(输出参数)中返回其中一个表的新主键。 (主要,父表有2个孩子,表)

看起来有点像Max pool size was reached error for parallel connections 但我没有datareader或表。输出只有一个int。 PS。这个应用程序是目前唯一一个击中天蓝色数据库的应用程序。

0 个答案:

没有答案