簡體   English   中英

.NET Web服務通過TIME_WAIT打開許多MySQL連接

[英].NET Web Service leaving many MySQL connections open with TIME_WAIT

我想知道這是什么最佳實踐。 我有一個處理大量流量的Web服務。 我們將很快進行負載測試,但我想知道這是否會成為問題。

該Web服務具有類似於以下功能的幾個功能(這是最簡單的功能,因此我以該功能為例)。 每個函數都需要對MySQL數據庫進行一些查詢。 我正在使用MySQL ODBC 3.51驅動程序。 連接字符串如下所示:

“驅動程序= {MySQL ODBC 3.51驅動程序};服務器= IPADDRESS;數據庫= DBNAME; UID = BLAH; Pwd = BLAH;”

每個函數都建立一個新的連接(帶有USING語句)和閱讀器,運行查詢,並關閉連接和閱讀器。

Public Function ServerTime() As String
    Dim now As DateTime = DateTime.UtcNow

    Using connection As New OdbcConnection(ConnectionString)

        Dim command As OdbcCommand

        command = New OdbcCommand("SELECT NOW()", connection)

        connection.Open()

        Dim reader As OdbcDataReader = command.ExecuteReader

        If reader.HasRows Then
            While reader.Read()
                Dim dbtime As String = reader.GetValue(0).ToString()
                DateTime.TryParse(dbtime, now)

            End While
        End If

        reader.Close()
        connection.Close()

    End Using

    Dim t As TimeSpan = now.ToUniversalTime() - New DateTime(1970, 1, 1)
    Dim timestamp As Double = Math.Round(t.TotalMilliseconds)

    Return timestamp.ToString()
End Function

該Web服務在當前負載下每秒完成2-3個數據庫調用。 同樣,並非所有調用都來自上述示例函數。 有許多功能遠不止此功能,但它們都以類似的方式運行數據庫事務。

即使在當前的負載下(比我們的目標要輕得多),在IIS服務器上運行netstat仍顯示有大約400個端口仍處於TIME_WAIT狀態。 據我了解,它們保持打開狀態約四分鍾。

有沒有更好的方法來處理數據庫連接,而不會導致所有這些端口保持打開狀態? 我已經看到我可以將注冊表更改為TcpTimedWaitDelay來減少四分鍾的等待時間,但是我想知道是否可以一起避免此問題,而不是避免使用帶助手。 這損害了可伸縮性。

提前致謝。

顯然,MySQL ODBC 3.51驅動程序未進行任何連接池。 我切換到使用Oracle的Connector / NET ,現在,它正確地建立了連接池,並且TIME_WAIT問題消失了。

唯一的缺點是,如果我的數據庫從MySQL遷移到MS SQL,這可能會在不久的將來發生,那么我將不得不進行一些小的代碼更改,而不僅僅是更改連接字符串。

那好吧。 問題解決了。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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