分析執行緩慢之查詢的檢查清單

有多種原因會造成查詢或更新需花費超過預期的時間執行。與網路或執行 SQL Server 之電腦有關的效能問題,可能會造成查詢執行緩慢。實體資料庫設計的問題也可能是造成查詢執行緩慢的原因。

造成查詢與更新執行緩慢的一些常見原因如下:

  • 網路通訊緩慢。

  • 伺服器電腦的記憶體不適當,或是 SQL Server 的記憶體不足。

  • 缺少有用的統計資料。

  • 缺少有用的索引。

  • 缺少有用的索引檢視。

  • 缺少有用的資料條狀配置。

  • 缺少有用的統計資料。

當查詢或更新所花費的時間超過預期,請詢問自己以下的問題,找出造成查詢執行緩慢的原因 (如前一節所列):

提示提示

若要節省時間,當您向技術支援提供者求助之前,請先參閱此份檢查清單。

  1. 效能問題是不是與查詢以外的元件有關?例如,問題是不是因為網路效能太慢?有沒有任何其他元件可能造成或促成效能降低?

    Windows [系統監視器] 可用來監視 SQL Server 與非 SQL Server 相關元件的效能。如需詳細資訊,請參閱<監視資源使用量 (系統監視器)>。

  2. 效能問題是不是與查詢有關,涉及哪個查詢或哪組查詢?

    使用 SQL Server Profiler 來協助找出速度慢的查詢。如需詳細資訊,請參閱<使用 SQL Server Profiler>。您可以使用 sys.dm_exec_query_statssys.dm_exec_requests 動態管理檢視來尋找共同耗用大量資源的類似查詢。如需詳細資訊,請參閱<使用查詢和查詢計畫雜湊來尋找並微調類似的查詢>。

  3. 如何分析執行速度很慢之查詢的效能?

    在您識別慢速執行的查詢之後,可產生執行程序表,進一步分析查詢效能,這個執行程序表可以用文字、XML 或圖形來表示查詢最佳化工具產生的查詢執行計畫。您可以使用 Transact-SQL SET 選項、SQL Server Management Studio 或 SQL Server Profiler 來產生執行程序表。

    如需有關使用 Transact-SQL SET 選項來顯示文字和 XML 執行計畫的資訊,請參閱<使用 Showplan SET 選項來顯示執行計畫 (Transact-SQL)>。

    如需有關使用 SQL Server Management Studio 來顯示圖形式執行計畫的資訊,請參閱<顯示圖形執行計畫 (SQL Server Management Studio)>。

    如需有關使用 SQL Server Profiler 來顯示文字和 XML 執行計畫的資訊,請參閱<使用 SQL Server Profiler 事件類別來顯示執行計畫>。

    您可以利用這些工具所收集的資訊,判定 SQL Server 查詢最佳化工具執行查詢的方式,以及所用的索引。利用這些資訊,就可以決定重寫查詢、變更資料表索引或修改資料庫設計等方法是不是可以提升效能。如需詳細資訊,請參閱<分析查詢>。

  4. 是不是以有用的統計資料將查詢最佳化?

    查詢最佳化工具會使用統計資料來建立可改善查詢效能的查詢計畫。對於大部分查詢而言,查詢最佳化工具已經產生高品質查詢計畫的必要統計資料。不過,在少數情況下,您必須建立其他統計資料或修改查詢設計,以便獲得最佳結果。

    如需詳細資訊,請參閱<使用統計資料來改善查詢效能>。此主題會提供指導方針來改善統計資料的有效性,以便提高查詢效能。這些指導方針包括:

    • 使用資料庫範圍統計資料選項。例如,您應該確認自動建立統計資料 AUTO_CREATE_STATISTICS 以及自動更新統計資料 AUTO_UPDATE_STATISTICS 的資料庫範圍選項已開啟。如果它們已關閉,查詢計畫可能只有達到次佳程度,而且查詢效能可能會降低。

    • 判斷要建立統計資料的時機。在少數情況下,您可以使用 CREATE STATISTICS (Transact-SQL) 陳述式來建立其他統計資料,以便改善查詢計畫。這些額外的統計資料可以擷取查詢最佳化工具在建立索引或單一資料行的統計資料時無法解釋的統計相互關聯。

    • 判斷要更新統計資料的時機。在某些情況下,您可以讓統計資料的更新頻率高於 AUTO_UPDATE_STATISTICS 開啟時的更新頻率,藉以改善查詢計畫,因而改善查詢效能。您可以使用 UPDATE STATISTICS 陳述式或 sp_updatestats 預存程序來更新統計資料。

    • 設計有效使用統計資料的查詢。某些查詢實作 (例如查詢述詞中的區域變數和複雜運算式) 可能會導致次佳的查詢計畫。不過,遵循查詢設計指導方針來有效使用統計資料有助於避免這種情況發生。

  5. 有沒有適當的索引可用?新增一或多個索引對查詢效能有沒有幫助?如需詳細資訊,請參閱<一般索引設計指導方針>、<尋找遺漏索引>和<Database Engine Tuning Advisor 概觀>。Database Engine Tuning Advisor 也會建議建立必要的統計資料。

  6. 有沒有任何資料或索引是作用點?考慮使用條狀磁碟。您可以使用 RAID (獨立磁碟備援陣列) 層級 0 來實作等量磁碟,在此 RAID 層級中,資料會分散寫入到多個磁碟機。如需詳細資訊,請參閱<使用檔案與檔案群組>和<RAID>。

  7. 查詢最佳化工具有沒有最適當的機會可將複雜的查詢最佳化?如需詳細資訊,請參閱<查詢微調建議>。

  8. 如果有大量的資料,有需要分割嗎?分割的主要好處是有資料易於管理,然而如果大量資料上的資料表與索引的分割方式相似,那麼進行分割,也可以提升查詢效能。如需詳細資訊,請參閱<瞭解分割>和<微調實體資料庫設計>。