Sql-Server

SP 在新伺服器上執行較慢

  • March 24, 2021

我們將數據庫從 SQLServer 2012 遷移到 SQLServer 2019。我們的 ETL 是在 Visual Studio 中建構的,並且是從主包設置的。masterpackage 呼叫不同的包,這些包沒有部署在 SSIS 中。其中一個包呼叫儲存過程。這個儲存過程呼叫不同的儲存過程。在舊伺服器上,此 SP 步驟耗時 4 小時。在新伺服器上,此步驟需要 7 小時。我們可以做些什麼來加快這個過程?數據庫的兼容級別會影響這個過程嗎?如果我們在 SSIS 中部署包會有所幫助嗎?我們願意接受任何建議。

我們已經嘗試過的事情:

  • 重建索引和更新統計資訊
  • 改進某些查詢
  • 在 tempdb 中創建 8 個文件而不是 1 個(舊伺服器有一個)

感謝您的幫助。埃斯米

跨 SQL Server 2014 升級時的大問題,即從低於 2014 的任何版本升級到 2014 或更高版本的版本,是 SQL Server 的 2014 版本包含一個新的基數估計引擎這一事實。

對於大多數查詢,新的 CE 不會以任何方式影響它們。一些查詢會執行得更快。一些查詢,通常是已經存在問題的邊緣情況的查詢,確實會執行得非常慢。

正如我在最近的這篇博文中所概述的那樣,處理此問題的最佳方法是使用 Query Store 作為升級的一部分。您可能仍然可以這樣做。將數據庫的兼容模式更改回舊版本,然後按照概述的步驟進行操作。但是,這是基於您尚未開始在數據庫中使用僅 2019 年的新編碼機制這一事實。

否則,您需要首先查看所涉及查詢的執行計劃。將 2012 年的計劃與 2019 年的計劃進行比較。看看問題出在哪裡。您真正需要的可能是對程式碼和底層資料結構的更新。然而,許多人不能或不會做這項工作。相反,請閱讀這篇 Microsoft 文章中的 CE 詳細資訊。在那裡,您可以看到可用的選項,從將兼容模式保留在舊設置,到通過數據庫範圍配置更改更改 CE,再到查詢提示,最後返回到查詢儲存。

這些解決方案之一將有所幫助。但是,最好的方法是查看程式碼和結構並將它們調整為更優化。

造成這種情況的一個潛在原因是,與之前相比,您現在對某些查詢有不同的執行計劃。當您看到顯著的性能差異時,原因通常與計劃有關。

兼容性級別會影響優化器。以與舊 SQL Server 相同的兼容級別執行可能會為您提供與以前相同的執行計劃程度。這可以是第一步。完成分析後,有很多方法可以管理此問題 - 但第一步是找出導致性能差異的原因。

當然,也可以有其他的東西。查看羅納爾多建議的等待統計資訊(最好在舊伺服器和新伺服器上)是另一條非常有價值的資訊。

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