簡體   English   中英

SQL連接池超時

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM