跨多個連結伺服器的 SQL Server 查詢 - 性能極差
在三個獨立的連結伺服器上存在三個不同的數據庫
SQL0
,SQL1
(託管 2 個數據庫),SQL2
(託管 1 個數據庫)。SQL0
充當報告伺服器並將託管所有有問題的數據庫(方法 TBD - 也許複製可能其他),但由於某些審計目的數據將是舊的(<24H),仍然需要實時執行一些查詢數據。兩種設置:
設置 1.
Localhost\SQL0
- 連結到SQL1
和SQL2
(每個都使用各自的sa
憑據進行連接)設置 2.
SQL1
連結到SQL2
(同樣,使用sa
憑據)有問題的查詢連接(目前)這三個數據庫中的 8 個表。將來,查詢中將有另一台伺服器、另一個數據庫和幾個連接表,由代理定期執行並通過電子郵件發送結果。它通常返回少於 100 行,但
TOP 10
在開發中使用受限。為什麼執行此查詢
SQL2
需要 3 秒或更短的時間才能執行,但執行時需要 105 秒SQL0
?只要它只是網路流量,我願意忽略 30 倍的執行時間,但如果它影響連結伺服器的性能,我需要找到解決方案統計資訊。所有伺服器都在同一個 LAN 上,但
SQL2
在另一個通過 VPN 連接的建築物中。一切都在 SSMS 中,在與所有其他人連接到同一網路的機器上,沒有視圖,沒有連結伺服器到連結伺服器或其他“並發症”;我可以以 sa 身份訪問所有伺服器。
性能不佳是因為您使用的是連結伺服器。開發人員和數據庫管理員之間始終存在意見分歧。數據庫管理員知道連結伺服器連接很慢。開發人員想要他們,因為他們為他們解決問題。我既是開發人員又是數據庫管理員,我記得作為開發人員,我推動添加連結伺服器。作為過去 20 年的數據庫管理員,我遇到了數千次性能不佳的問題,以找到連結的伺服器連接是原因。
使用事務複製將實時數據獲取到您的報表伺服器。這將消除 24 小時的延遲,並消除您使用連結伺服器的需要。您還將在源伺服器上獲得性能提升,因為只讀報告查詢不會與執行您公司的實時事務競爭。