用於對執行慢的查詢進行優化
引起查詢或更新的執行時間超過預期時間的原因有多種。查詢執行慢,可能是由與執行 SQL Server 的網路或計算機相關的效能問題引起的,也可能是由物理資料庫設計問題引起的。
查詢和更新執行慢的常見原因有多種:
網路通訊速度慢。
伺服器的記憶體不足,或者沒有足夠的記憶體供 SQL Server 使用。
索引列上缺少有用的統計資訊。
索引列上的統計資訊過期。
缺少有用的索引。
缺少有用的索引檢視。
缺少有用的資料條帶化。
缺少有用的分割槽。
當查詢或更新花費的時間比預期時間長時,請考慮以下問題,找到可解答前一節中列出的查詢執行慢的原因:
提示:
為了節省時間,請在與技術支援提供商聯絡之前查閱此清單。
是與元件而不是與查詢相關的效能問題嗎?例如,是網路效能低的問題嗎?有其他可能引起或造成效能降低的元件嗎?
Windows 系統監視器可用於監視與 SQL Server 和非 SQL Server 相關的元件的效能。有關詳細資訊,請參閱監視資源使用情況(系統監視器)。
如果效能問題與查詢相關,那麼涉及到的是哪個或哪組查詢?
使用 SQL Server Profiler 幫助識別速度緩慢的查詢。有關詳細資訊,請參閱使用 SQL Server Profiler。使用 sys.dm_exec_query_stats 和 sys.dm_exec_requests 動態管理檢視查詢共同消耗大量資源的類似查詢。有關詳細資訊,請參閱使用查詢和查詢計劃雜湊值查詢和優化類似查詢。
如何分析執行慢的查詢的效能?
標識了執行慢的一個或多個查詢之後,可以通過生成顯示計劃來進一步分析查詢效能,該顯示計劃可以是查詢優化器生成的文字、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 事件類別(資料庫引擎)。
查詢統計是最新的嗎?統計資訊是自動更新的嗎?
SQL Server 自動在索引列上建立並更新查詢統計資訊(只要沒有禁用對查詢統計資訊的自動更新)。另外,也可以手動(使用 SQL Server Management Studio 或 UPDATE STATISTICS 語句)或自動(如果將 AUTO_UPDATE_STATISTICS 資料庫選項設定為 TRUE)在非索引列上更新統計資訊。最新的統計資訊不取決於日期或時間資料。如果尚未執行 UPDATE 操作,則查詢統計資訊仍是最新的。
如果沒有將統計資訊設定為自動更新,請進行設定。有關詳細資訊,請參閱索引統計資訊。
有合適的索引嗎?新增一個或多個索引會不會提高查詢效能?有關詳細資訊,請參閱常規索引設計指南、查詢缺失索引和資料庫引擎優化顧問概述。資料庫引擎優化顧問也可能建議建立必要的統計資訊。
有資料熱點或索引熱點嗎?請考慮使用磁碟條帶化。使用 0 級 RAID(獨立磁碟冗餘陣列)可實現磁碟條帶化,在這種 RAID 上,資料分佈在多個磁碟驅動器上。有關詳細資訊,請參閱使用檔案和檔案組和 RAID。
是否為查詢優化器提供了優化複雜查詢的最有利條件?有關詳細資訊,請參閱查詢優化建議。
如果資料量很大,需要將其分割槽嗎?便於資料管理是分割槽的主要優點,而如果將資料的表和索引進行相似的分割槽,則分割槽還可以提高查詢效能。有關詳細資訊,請參閱瞭解分割槽和優化物理資料庫設計。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/16436858/viewspace-520798/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 用於對執行慢的查詢進行分析的清單
- 查詢執行慢的SQL語句SQL
- SQL Server調優系列進階篇(查詢優化器的執行方式)SQLServer優化
- MySQL 慢查詢優化MySql優化
- TiDB 查詢優化及調優系列(四)查詢執行計劃的調整及優化原理TiDB優化
- Oracle 優化器與sql查詢執行順序Oracle優化SQL
- Mysql 慢查詢優化實踐MySql優化
- 通過spid,查詢執行慢的sql指令碼SQL指令碼
- MySQL查詢優化之優化器工作流程以及優化的執行計劃生成MySql優化
- ORDER對查詢結果進行排序排序
- oracle中對LONG列進行查詢Oracle
- 當查詢A表的時候,查詢還沒執行完,為什麼能夠對錶進行刪除?
- MySQL索引原理及慢查詢優化MySql索引優化
- 用並行查詢讓SQL Server加速執行並行SQLServer
- 查詢前等待事件語句,進行效能分析和優化事件優化
- Sql語句本身的優化-定位慢查詢SQL優化
- mysql效能優化-慢查詢分析、優化索引和配置MySql優化索引
- Parallel Query Tuning(並行化查詢優化)Parallel並行優化
- 並行查詢緩慢的問題分析並行
- 如何使用 MySQL 慢查詢日誌進行效能優化 - Profiling、mysqldumpslow 例項詳解MySql優化
- 【實戰】利用多執行緒優化查詢百萬級資料執行緒優化
- Django中views資料查詢使用locals()函式進行優化DjangoView函式優化
- 《MySQL慢查詢優化》之SQL語句及索引優化MySql優化索引
- 多執行緒查詢執行緒
- 資料庫查詢優化:使用explain分析sql語句執行效率資料庫優化AISQL
- sql查詢是如何執行的?SQL
- oracle 正在執行的物件查詢Oracle物件
- SQL Server查詢速度慢的原因及優化方法SQLServer優化
- PHP效能調優—php-fpm中啟用慢日誌配置(用於檢測執行較慢的PHP指令碼)PHP指令碼
- 關於一個使用者SQL慢查詢問題的分析及優化SQL優化
- 執行長查詢時,怎樣獲取進度?
- 關於樹結構的查詢優化,及許可權樹的查詢優化優化
- 檢視慢查詢進度
- python對solr進行查詢、插入操作(GET\POST)PythonSolr
- 查詢Oracle正在執行和執行過的SQL語句OracleSQL
- TiDB 查詢優化及調優系列(三)慢查詢診斷監控及排查TiDB優化
- mysql 表資料量大量查詢慢如何優化MySql優化
- SQL Server查詢速度慢原因及優化方法SQLServer優化