有多種原因會造成查詢或更新需花費超過預期的時間執行。與網路或執行 SQL Server 之電腦有關的效能問題,可能會造成查詢執行緩慢。實體資料庫設計的問題也可能是造成查詢執行緩慢的原因。
造成查詢與更新執行緩慢的部份常見原因如下:
- 網路通訊緩慢。
- 伺服器電腦的記憶體不適當,或是 SQL Server 的記憶體不足。
- 索引資料行缺少有用的統計資料。
- 索引資料行的統計資料已過時。
- 缺少有用的索引。
- 缺少有用的索引檢視。
- 缺少有用的資料條狀配置。
- 缺少有用的統計資料。
疑難排解執行緩慢之查詢的檢查清單
當查詢或更新所花費的時間超過預期,請詢問自己以下的問題,找出造成查詢執行緩慢的原因 (如前一節所列):
提示: |
|---|
| 若要節省時間,當您向技術支援提供者求助之前,請先參閱此份檢查清單。 |
- 效能問題是不是與查詢以外的元件有關?例如,問題是不是因為網路效能太慢?有沒有任何其他元件可能造成或促成效能降低?
Windows [系統監視器] 可用來監視 SQL Server 與非 SQL Server 相關元件的效能。如需詳細資訊,請參閱<監視資源使用量 (系統監視器)>。 - 效能問題是不是與查詢有關,涉及哪個查詢或哪組查詢?
先使用 SQL Server Profiler 來協助找出速度慢的查詢。如需詳細資訊,請參閱<使用 SQL Server Profiler>。
在您識別慢速執行的查詢之後,可產生顯示計劃,進一步分析查詢效能,這個顯示計劃可以用文字、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 查詢最佳化工具執行查詢的方式,以及所用的索引。利用這些資訊,就可以決定重寫查詢、變更資料表索引或修改資料庫設計等方法是不是可以提升效能。如需詳細資訊,請參閱<分析查詢>。 - 是不是以有用的統計資料將查詢最佳化?
SQL Server 會自動建立有關索引資料行上數值散發方面的統計資料。您也可以使用 SQL Server Management Studio 或 CREATE STATISTICS 陳述式,手動建立非索引資料行上的統計資料,而當 AUTO_CREATE_STATISTICS 資料庫選項設為 TRUE 時,則會自動建立。查詢處理器可以利用這些統計資料來決定評估查詢的最佳策略。對涉及聯結作業的非索引資料行維護其他的統計資料,可改善查詢效能。如需詳細資訊,請參閱<索引統計資料>。
使用 SQL Server Profiler 或 SQL Server Management Studio 中的圖形執行計劃來監視查詢,可以決定該查詢有沒有足夠的統計資料。如需詳細資訊,請參閱<Errors and Warnings 事件類別目錄 (Database Engine)>。 - 查詢統計資料是不是最新的?統計資料會不會自動更新?
SQL Server 會自動建立與更新索引資料行上的查詢統計資料 (前提是不能停用自動查詢統計資料更新功能)。此外,還可以使用 SQL Server Management Studio 或 UPDATE STATISTICS 陳述式,手動更新非索引資料行上的統計資料,而當 AUTO_UPDATE_STATISTICS 資料庫選項設為 TRUE 時,則會自動更新。最新的統計資料與日期或時間資料無關。如果未發生任何 UPDATE 作業,則查詢統計資料依然是最新的。
如果未將統計資料設為自動更新,請將它們設為自動更新。如需詳細資訊,請參閱<索引統計資料>。 - 有沒有適當的索引可用?新增一或多個索引對查詢效能有沒有幫助?如需詳細資訊,請參閱<一般索引設計指導方針>、<尋找遺漏索引>和<Database Engine Tuning Advisor 參考>。Database Engine Tuning Advisor 同樣會建議建立必要的統計資料。
- 有沒有任何資料或索引是作用點?考慮使用條狀磁碟。您可以使用 RAID (獨立磁碟備援陣列) 層級 0 來實作等量磁碟,在此 RAID 層級中,資料會分散寫入到多個磁碟機。如需詳細資訊,請參閱<使用檔案與檔案群組>和<RAID>。
- 查詢最佳化工具有沒有最適當的機會可將複雜的查詢最佳化?如需詳細資訊,請參閱<查詢微調建議>。
- 如果有大量的資料,有需要分割嗎?分割的主要好處是有資料易於管理,然而如果大量資料上的資料表與索引的分割方式相似,那麼進行分割,也可以提升查詢效能。如需詳細資訊,請參閱<瞭解分割>和<微調實體資料庫設計>。
請參閱
概念
使用 Showplan SET 選項來顯示執行計劃 (Transact-SQL)
使用 SQL Server Profiler 事件類別來顯示執行計劃
顯示計劃安全性
產生顯示計劃的 Transact-SQL 陳述式
提示: