Sql-Server

跨多個連結伺服器的 SQL Server 查詢 - 性能極差

  • October 27, 2016

在三個獨立的連結伺服器上存在三個不同的數據庫SQL0SQL1(託管 2 個數據庫),SQL2(託管 1 個數據庫)。SQL0充當報告伺服器並將託管所有有問題的數據庫(方法 TBD - 也許複製可能其他),但由於某些審計目的數據將是舊的(<24H),仍然需要實時執行一些查詢數據。

兩種設置:

設置 1. Localhost\SQL0- 連結到SQL1SQL2(每個都使用各自的sa憑據進行連接)

設置 2.SQL1連結到SQL2(同樣,使用sa憑據)

有問題的查詢連接(目前)這三個數據庫中的 8 個表。將來,查詢中將有另一台伺服器、另一個數據庫和幾個連接表,由代理定期執行並通過電子郵件發送結果。它通常返回少於 100 行,但TOP 10在開發中使用受限。

為什麼執行此查詢SQL2需要 3 秒或更短的時間才能執行,但執行時需要 105 秒SQL0?只要它只是網路流量,我願意忽略 30 倍的執行時間,但如果它影響連結伺服器的性能,我需要找到解決方案統計資訊。

所有伺服器都在同一個 LAN 上,但SQL2在另一個通過 VPN 連接的建築物中。

一切都在 SSMS 中,在與所有其他人連接到同一網路的機器上,沒有視圖,沒有連結伺服器到連結伺服器或其他“並發症”;我可以以 sa 身份訪問所有伺服器。

查詢計劃(實際)、SQL2 和 SQL0 分別為: SQL2 上的查詢計劃SQL0 上的查詢計劃

性能不佳是因為您使用的是連結伺服器。開發人員和數據庫管理員之間始終存在意見分歧。數據庫管理員知道連結伺服器連接很慢。開發人員想要他們,因為他們為他們解決問題。我既是開發人員又是數據庫管理員,我記得作為開發人員,我推動添加連結伺服器。作為過去 20 年的數據庫管理員,我遇到了數千次性能不佳的問題,以找到連結的伺服器連接是原因。

使用事務複製將實時數據獲取到您的報表伺服器。這將消除 24 小時的延遲,並消除您使用連結伺服器的需要。您還將在源伺服器上獲得性能提升,因為只讀報告查詢不會與執行您公司的實時事務競爭。

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