您目前已離線,請等候您的網際網路重新連線

INF:發生多個 TCP\IP 連線請求時 SQL 會記錄 17832

本文曾發行於 CHT154628
依現狀不再更新的知識庫內容免責聲明
本文旨在說明 Microsoft 不再提供支援的產品。因此,本文係依「現狀」提供,不會再更新。
重要:本文包含編輯登錄的資訊。在編輯系統登錄之前,請確定萬一發生問題時,您知道如何復原系統登錄。若需如何復原的相關資訊,請參閱 Regedit.exe 中的〈還原登錄〉說明主題,或 Regedt32.exe 中的〈還原登錄機碼〉說明主題。
結論
如果多個一起發生的 TCP/IP 連線請求同時連上 SQL Server (例如全球資訊網WWW伺服器的情形),則 SQL Server 會回應「TCP/IP 重設封包」,快速拒絕這些請求。

此徵狀很難偵測。如果用戶端應用程式包含錯誤碼處理,則 Open() 函數的原生錯誤碼是 10061 (WSAECONNREFUSED)。在伺服器上,SQL 錯誤記錄檔中則會出現錯誤 17832 - "Unable to read loginpacket" (無法讀取登入封包)。

如果您使用通訊協定解析程式來追蹤此問題,就可以看見伺服器已經以「TCP 重設」位元集來回覆某些連線請求封包,告訴傳送封包的工作站,表示伺服器已經收到它所傳送的封包,但是伺服器沒有資源可以處理其連線請求。
其他相關資訊
Winsock 應用程式會經由呼叫 Listen()函數來接受通訊埠的連線,此函數具有一個積存 (Backlog) 參數,可以設定待處理連線佇列的最大長度。Winsock 規格定義最大的 Listen() 積存是 5,超過 5 的時候,TCP/IP 就會發出「重設」封包。

您可以經由修改「Windows NT 登錄」來設定 SQL Server 的積存 (Backlog) 參數,以便處理較多的待處理連線數目。在某些案例中,重設連線的問題可以經由修改登錄獲得解決。

警告:不當使用「登錄編輯器」可能會導致嚴重的問題,甚至必須重新安裝作業系統。Microsoft 不保證可以解決不當使用「登錄編輯器」所造成的錯誤。請自行承擔使用「登錄編輯器」的風險。

如需有關編輯系統登錄的資訊,請檢視「登錄編輯器」(Regedit.exe) 中的〈變更機碼和數值〉說明主題,或是檢視 Regedt32.exe 中的〈新增及刪除登錄中的資訊〉與〈編輯登錄資料〉說明主題。如需編輯登錄的詳細資訊,請檢視「登錄編輯器」(Regedit.exe) 的〈變更機碼與數值〉說明主題,或檢視 Regedt32.exe 中的〈新增及刪除登錄中的資訊〉與〈編輯登錄資料〉說明主題。請注意:您應該先將登錄備份,再開始編輯。如果執行的是 Windows NT ,也應更新「緊急修復磁片」(ERD)。

  1. 啟動「登錄編輯器」(REGEDT32.EXE),然後在 HKEY_LOCAL_MACHINE 子樹狀結構下找出下面登錄子機碼:
          \Software\Microsoft\MSSQLServer\MSSQLServer
    注意:

    1. SQL 4.21a 的 HKEY_LOCAL_MACHINE 子樹狀結構下相對應的登錄子機碼是:
               \Software\Microsoft\SQLServer\Server   
    2. 如果SQL Server 6.5 Enterprise Edition是以Virtual SQL Server執行在叢集式環境中,您就必須變更虛擬伺服器機碼,而不是變更一般的:
               \Software\Microsoft\MSSQLServer\MSSQLServer   
      此虛擬伺服器機碼是:
               \Software\Microsoft\MSSQLServer$VirtualServerName         \MSSQLServer$VirtualServerName         數值名稱:WinsockListenBacklog         資料類型:REG_DWORD         資料:    190   
  2. 選取 MSSQLServer 子機碼。從 [編輯] 功能表中,選取 [新增值]。
  3. 輸入下面各項:
          Value Name:WinsockListenBacklog      Data Type:REG_DWORD      Data:   <Range is 1 to 0xFFFFFFFF>
    注意:如果資料值設的太高會影響系統的總體資源。Windows NT 3.51 所有應用程式的總體積存最大是 100,而 Windows NT 4.0 所有應用程式的總體積存最大是 200。我們建議以 5 為間隔,漸漸增加這個值來做測試,觀察其結果,直到連線重設問題停止。
  4. 按一下 [確定],結束「登錄編輯器」。
  5. 關閉並重新啟動 Windows NT。
有關 Listen() 函數的其他資訊,請參考《WIN32 SDKProgrammer's reference》。

有關 Windows NT 與積存 (Backlog) 參數的其他資訊,請參閱下列兩篇 Microsoft Knowledge Base 文件:
113576: WinSocket App's Reject Connection Requests with Reset Frames

127144: Windows NT 3.5 Winsock Listen (Backlog) Parameter Limit
参考
本文件是根據 Microsoft Knowledgebase 文件編號 Q154628 翻譯的. 若要參考原始英文文件內容, 請至以下網址:

Internet Information Server IIS windows sockets
內容

文章識別碼:154628 - 最後檢閱時間:09/22/2004 03:10:21 - 修訂: 2.2

  • Microsoft SQL Server 6.0 Standard Edition
  • Microsoft SQL Server 6.5 Standard Edition
  • kbnetwork kbhowto kbhowto KB154628
意見反應