Sql-Server

連接池正在重置,錯誤:18056,嚴重性:20,狀態:46。& 性能計數器未顯示

  • May 8, 2020

我們正在使用 SQL 身份驗證(以減少連接池的數量)和 .NET 4.0 連接字元串來連接到 Windows 2008 R2 Enterprise Server 上的 SQL Server Enterprise Edition 2012 SP1:

Microsoft SQL Server 2012 (SP1) - 11.0.3000.0 (X64)

Oct 19 2012 13:38:57

版權所有 (c) Microsoft Corporation

Enterprise Edition (64-bit) o​​n Windows NT 6.1 (Build 7601: Service Pack 1)

我們使用大約 50 台伺服器,分成 8 個不同的組,位於網站的不同部分。

我們的網站正在使用此 SQL Server 來記錄訪問跟踪數據。在過去的幾天裡,它吐出了以下有關重置連接池的消息:

客戶端無法重用 SPID 1327 的會話,該會話已為連接池重置。失敗 ID 為 46。此錯誤可能是由較早的操作失敗引起的。在此錯誤消息之前檢查失敗操作的錯誤日誌。

錯誤日誌顯示:

錯誤:18056,嚴重性:20,狀態:46

。客戶端無法重用 SPID 959 的會話,該會話已為連接池重置。失敗 ID 為 46。此錯誤可能是由較早的操作失敗引起的。在此錯誤消息之前檢查失敗操作的錯誤日誌。

使用者“xxxx”登錄失敗。原因:重新驗證連接上的登錄時,無法打開登錄對像中配置的數據庫“xxxxxxxx”。

$$ CLIENT: 10.xx.xx.xxx $$

經過一番探勘,我在 CSS 部落格上找到了這個文件:它的工作原理:錯誤 18056 – 客戶端無法重用帶有 SPID ## 的會話,該會話已被重置為連接池,而這個由 Aaron Bertrand:故障排除錯誤 18456 . 我知道錯誤號不同,但故障 ID 相同,許多消息相同)。

失敗 ID 46 表明登錄沒有權限。我們的登錄預設到主數據庫,數據庫名稱在連接字元串中指定。

我想檢查連接字元串池的數量等,並檢查了 Perfmon 中的所有計數器.Net Data Provider for SqlServer。它只給了我defaultdomain9675實例的選項,所以我選擇了假設這是我們的數據中心網路的系統生成的 ID 名稱。不幸的是,所有的計數器讀數都為零。在我們的其他主要伺服器之一上,連接池徘徊在 10 左右,這是我期望在具有這種負載的健康伺服器上看到的。

我的問題是3折

  1. 誰能建議為什麼沒有顯示 Windows 2008 R2 Server .Net Data Provider for SqlServer
  2. 有沒有人經歷過這種情況,因為我顯然認為沒有權限的登錄是紅鯡魚?
  3. 如果不同組的 Web 伺服器具有相同的連接字元串語法但空格略有不同,這會導致伺服器使用另一個連接池嗎?

最小和最大記憶體設置分別為 20GB 和 58GB。該伺服器是具有 64GB RAM 的專用數據庫伺服器。我不認為記憶體是問題,因為盒子似乎有一個不錯的頁面壽命預期。自動關閉未啟用。伺服器始終處於執行狀態:這是一個 24x7 的網站,使用量很大。

1 - 不能肯定地說,我必須去找一個伺服器來探勘自己。

2 - 是的,我會在我的環境中定期看到這個,雖然我們還沒有在我們看到這個的系統上使用 sql 2012。儘管狀態 46 似乎與連接字元串中有特定的 Database=xxx 有關,但您可能還想查看這篇文章,該數據庫是否仍然存在?

我的網路設置方式我懷疑這是網路在空閒 5 分鐘後自動關閉 tcp 會話的問題 - 數據庫和客戶端都沒有關閉會話,所以連接池仍然認為連接是打開的並嘗試使用它只是發現它不再是真正開放的了。你沒有提到你的網路伺服器和數據庫之間的網路是如何配置的,也許你的情況是相似的。

另一種可能性可能是有關 TCP 煙囪解除安裝設置的(舊的,不確定是否真正解決,請參閱http://support.microsoft.com/kb/942861 )問題。

3 - 我的理解是池化需要精確的字元串匹配,因此空格和不同的參數順序會導致不同的池。(如果我錯了,請告訴我。)

社區 Wiki 答案最初由問題作者作為評論留下

就我而言,它原來是一個失控的日誌表,有人已經切換到詳細以解決問題,但忘記關閉。它最終每秒記錄多達 1000 條記錄。

另一項工作是嘗試從表中刪除舊記錄。最終陷入困境,就像在嘗試刪除時鎖定一樣,阻止了所有連接池資源不足的插入。

我一找到工作,就打了那個在該伺服器上濫用權利的人的頭,並停止了工作,連接池的所有錯誤消息都停止了。

引用自:https://dba.stackexchange.com/questions/41820