簡體   English   中英

修復連接池最大化/查找到 SQL 服務器的打開連接

[英]Fixing Connection Pool maxing out / Finding open connections to SQL Server

我從某人那里繼承的舊網站有點麻煩。 它拋出有關連接池被最大化的錯誤。 當它發生時,網站只會加載 HTML 而不會從數據庫中加載任何內容。 當它被放置一段時間后,它會正常工作,或者當我在 Plesk 中回收 IIS 應用程序池時。

我已經做了很多閱讀和研究,但我仍然無法完全解決。
我閱讀的第一件事是查找在檢索信息后數據庫連接未關閉的任何代碼。 到目前為止,我還沒有發現類似的東西。

接下來是我發現了一個存儲過程sp_who2 ,我被引導相信它會給我打開連接,但我有點困惑,這是否是我真正在看的東西。

運行sp_who2時,我得到以下信息。

在此處輸入圖像描述

這是一個開放的連接嗎? 還是只是我當前通過 SQL Server Management Studio 查看數據庫的連接?

該數據庫當前位於共享托管平台上,因此我沒有運行我發現的其他一些命令所需的訪問權限。

理想情況下,我會將網站從共享主機上移開,但我想在此之前找出原因。 我希望找到的是需要調整代碼以使其工作的地方。

這是一個開放的連接嗎? 還是只是我當前通過 SQL Server Management Studio 查看數據庫的連接?

兩者都是。 您的連接來自 SSMS,它是一個開放連接。

有很多方法可以獲得比這更詳細的信息。 例如,您可以使用sys.dm_exec_connections以及其他 DMV,例如sys.dm_exec_sessions ,並構建一個可以告訴您大量信息的查詢。

但與其自己編寫這樣的查詢,我建議您下載 Adam Machanic 的優秀sp_whoisactive 它只是您創建的一個存儲過程,其中包含從系統元數據中提取大量有用信息的查詢,並能夠提供自定義 output 的選項。 我可以肯定地說,這個過程是每個人最終用於此類查詢的“默認”過程。 我可能會不時針對 DMV 編寫我自己的更有限的查詢,但大多數時候, sp_whoisactive可以為您提供您想要的一切。

例如,其中一個參數是@show_sleeping_spids 即使它們實際上沒有運行任何查詢,這也會向您顯示連接。 考慮到程序名稱是“誰是活動的”,這有點好笑,但用處很明顯。 您可能希望像這樣執行此過程: exec sp_whoisactive @show_sleeping_spids = 1 ,並且可能還添加其他參數。 它也有強大的過濾選項,但如果你通常沒有很多連接,你可能可以抓住整個 output 並關注它以獲取相關信息。

如果由於共享主機提供給您的權限而無法運行此程序,那么您的選擇將受到嚴重限制。 如果您只是從 sp_who2 獲得自己的sp_who2 ,但您知道其他東西正在運行,那么您沒有view server state權限。 在這種情況下, sp_who2只輸出您自己的 session(因為您可以查看有關您自己的會話的信息)。

暫無
暫無

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

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