[英]Sql Connection Pool timeout
[免責聲明]:我想我已經閱讀過關於此的每篇stackoverflow帖子
我已經打破了很長一段時間了。 我在asp.net web.api中遇到以下異常。
拋出異常:mscorlib.dll中的“System.InvalidOperationException”
其他信息:超時已過期。 從池中獲取連接之前經過的超時時間。 這可能是因為所有池連接都在使用中並且達到了最大池大小。
大多數人建議我應該在我的應用程序中查找泄露的連接。 這是我的代碼。 現在我確信我沒有泄漏任何聯系
public async Task<IEnumerable<string>> Get()
{
var ds = new DataSet();
var constring = "Data Source=xxx;Initial Catalog=xxx;User Id=xxx;Password=xxx;Max Pool Size=100";
var asyncConnectionString = new SqlConnectionStringBuilder(constring)
{
AsynchronousProcessing = true
}.ToString();
using (var con = new SqlConnection(asyncConnectionString))
using (var cmd = new SqlCommand("[dbo].[xxx]", con))
{
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@x1", 1);
cmd.Parameters.AddWithValue("@x2", "something");
await con.OpenAsync();
using (var rdr =await cmd.ExecuteReaderAsync())
{
if (rdr.HasRows)
{
ds.Load(rdr, LoadOption.OverwriteChanges, "MyTable");
}
rdr.Close();
con.Close();
ds.Dispose();
}
}
//I know this looks wrong, just an empty api method to show the code
return new string[] { "value1", "value2" };
}
我使用本地Sql Server時不會發生異常。 只有在我連接到“測試服務器”時才會發生。 在嘗試解決此問題時,還有什么我可以看到的。 像Sql server設置/網絡設置等。
我調用的存儲過程不會鎖定我已經檢查過的數據庫。 如果是這種情況,它也應該在我的本地Sql實例上失敗。
我使用jmeter生成負載,1500 - 線程(用戶)。 當然,我應該能夠處理更多的方式。
提前致謝
您尚未指定任何“連接超時”屬性,因此默認值為15秒。 在沒有適當的硬件資源之前,使用Max Pool Size = 100並不是一個好主意。
你啟動了1500個線程,所以似乎有些線程會等待15秒才能獲得連接打開的機會。 隨着時間的推移,你會得到連接超時錯誤。
所以我認為增加連接字符串中的“連接超時”屬性可能會解決您的問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.