Sql-Server
為什麼我的查詢在環境 A 中執行得很快,而在環境 B 中卻很慢?
我有一段 SQL 似乎在環境 A 中執行得非常快,但完全相同的查詢在環境 B 中執行得非常慢!
環境應該是相同的,所以我應該怎麼做和/或我應該去哪裡看看為什麼查詢不執行相同的?
SQL Server 內部和外部的許多因素都可能導致同一查詢在不同環境中執行不同,即使它們的配置幾乎完全相同,其中任何一個都可能導致查詢計劃和性能大相徑庭。
伺服器
跨環境的硬體是否相同(磁碟、記憶體、CPU 等)?
- 如果正在使用虛擬機,嘈雜的鄰居會影響虛擬機的整體性能嗎?
- 如果在雲中,自動縮放和其他配置是否具有奇偶性?
物理/虛擬/雲之間的環境是否混合?
作業系統版本是否匹配?
環境是否在不同的數據中心?
實例
SQL Server 版本是否相同?
- 即使主要版本相同,CU 或 SP 也可以改變世界。
查詢執行期間的活動工作負載是否具有可比性?
- 所有環境中是否存在相同數量的查詢?
- 工作負載的性質在所有環境中是否相同?
是否所有環境都參與相同的 HA/DR 設置?
- 很多時候,較低的環境沒有可用性組、日誌傳送或複制設置,而生產/災難恢復可能正在使用這些技術。
相同的維護作業是否在所有環境中按相同的時間表執行?
跟踪標誌在所有環境中是否等效?
是否在所有環境中執行相同的備份作業?
- 備份的影響應該很小,但通常它們根本不會在較低的環境中執行。
sys配置是否相同?
數據庫
- 架構/索引/統計資訊/對像在不同環境中是否都相等?
- 跨環境
是否存在完全相同的數據?
- 數據量
- 數據分佈
- 數據大小(認為可變長度數據類型中的虛擬數據可能無法反映其他環境中實際值的大小)
- 數據庫級別的配置是否相同?
- 兼容性級別是否相同?
考慮到所有這些,在許多情況下根本不可能在不同的環境中完美地複制數據庫的各個方面,這並不奇怪。雖然測試可以很好地確定查詢在每個環境中的執行方式,但如果環境之間存在差異也就不足為奇了。在開發新查詢時,通常需要在它進入生產階段時進行額外的調整。
通常,調整在一個環境中速度較慢的查詢不會導致生成的執行計劃出現回歸,因此這是調整索引、統計資訊或查詢本身以進行整體改進的機會。
最後說明:較低的環境規模較小,通常不應期望提供與生產或預生產環境相同的性能。
更多資源:
- Aaron Bertrand的“相同”伺服器的不同計劃