當前位置:
首頁 > 知識 > SQL性能調優:查找慢查詢的5種方法

SQL性能調優:查找慢查詢的5種方法

SQL性能調優:查找慢查詢的5種方法

SQL Server的查詢運行太慢了,以至於大家都不太喜歡。我們來看看如何快速跟蹤它們,以便您可以處理這些查詢!

SQL性能調優是一場永無止盡的鬥爭。我不是一名DBA,而是一名15年的開發人員。我從開始用SQL Server資料庫工作,一直到用Stackify的大SQL Azure資料庫。這麼多年來,我看到了一切。

在本文中,我將提供一些技巧,以便開發人員可以在SQL Server中查找SQL慢查詢並進行性能調優。

查找SQL慢查詢的5種方法

1

使用SQL DMVs查找慢查詢

SQL Server的一個重要特性是內置的動態管理視圖(DMVs)。他們可以提供大量關於各種主題的信息。

有幾個DMVs提供關於查詢統計信息,執行計劃,近期查詢等數據。這些可以一起使用來提供一些驚人的見解。

例如,下面的查詢可用於查找使用最多讀取,寫入,工作時間(CPU)等的查詢。

查詢的結果如下圖所示。下面的圖片是我製作的一款營銷應用程序。您可以看到一個特定的查詢(前一個查詢)佔用了所有的資源。

通過查找這個,我可以複製該SQL查詢,看看是否有改進方法,添加索引等。

優點:始終可用的基本匯總統計。

缺點:沒有告訴您什麼是查詢。當查詢被調用時無法可視化。

2

通過APM解決方案查詢報告

許多應用程序性能管理(APM)工具的一大特性就是能夠跟蹤SQL查詢。例如,Retrace跟蹤跨越多個資料庫提供程序(包括SQL Server)的SQL查詢。Retrace可以告訴您一個查詢執行了多少次,平均需要多長時間,以及調用哪些事務。對於SQL性能調優,這是真正有價值的信息。

APM解決方案通過在運行時對應用程序代碼進行輕量級性能分析來收集這些數據。

以下是Retrace的應用程序儀錶板的屏幕截圖,顯示了特定的應用程序,其中SQL查詢花費的時間最長。

Retrace高級SQL查詢

Retrace收集正在執行的每個SQL查詢的性能統計信息。您可以搜索特定的查詢來尋找潛在的問題。

Retrace查看所有的SQL查詢

通過選擇一個查詢,您可以看到該查詢被調用的頻率和時間。您還可以看到網頁使用SQL查詢以及它們的性能是如何受到影響的。

隨著時間的推移Retrace SQL性能

由於Retrace是一個輕量級的代碼分析器並獲取了ASP.NET請求跟蹤,它甚至可以向您展示您的代碼正在做什麼。

下面是一個獲取的跟蹤,顯示了所有的SQL查詢以及有關代碼正在做什麼的細節。Retrace甚至可以在同一視圖中顯示日誌消息。另外請注意,它顯示了正在執行查詢的伺服器地址和資料庫名稱。您還可以看到返回了多少記錄。

Retrace Web事務跟蹤

如您所見,Retrace提供了全面的SQL報告功能,作為其APM功能的一部分。它還在SQL查詢中提供了多個監視和警報功能。

優點:每個應用程序和每個查詢的詳細報告。可以顯示事務跟蹤細節,詳細說明如何使用查詢。每月只需10美元。總是在安裝後運行。

缺點:不提供每個查詢的讀寫數量。

3

SQL Server Profiler(棄用!)

SQL Server Profiler已經存在很長一段時間了。如果您嘗試實時查看針對資料庫執行的SQL查詢,那麼這是非常有用的。

注意:Microsoft已經宣布SQL Server Profiler已被棄用!

SQL Profiler獲取了與SQL Server交互的非常詳細的事件:

登錄連接,斷開連接和故障。

SELECT,INSERT,UPDATE和DELETE語句。

RPC批處理狀態調用。

存儲過程的開始和結束。

存儲過程中語句的開始和結束。

SQL批處理的開始和結束。

寫入SQL Server錯誤日誌的錯誤。

在資料庫對象上獲取或釋放的鎖。

打開游標。

許可權檢查。

SQL Server Profiler

優點:非常詳細的數據。

缺點:你必須手動打開它。這迫使您重新創建您要捕獲的場景。它最終會消失,取而代之的是擴展事件。

4

SQL Server擴展事件

SQL Profiler已被SQL Server擴展事件所取代。這肯定會激怒很多人,但我理解Microsoft為什麼要這樣做。

擴展事件通過事件跟蹤(ETW)工作。這是所有Microsoft相關技術公開診斷數據的常用方法。

ETW提供了更多的靈活性。作為一名開發人員,我可以輕鬆從SQL Server中獲取ETW事件,來收集用於自定義用途的數據。這真的很酷,而且真的很強大。

優點:更容易啟用並運行。更容易開發定製解決方案。

缺點:相對較新,大多數人可能沒有注意到它。

5

SQL Azure查詢性能洞察

我將假設SQL Azure的性能報告是建立在擴展事件之上的。在Azure Portal中,您可以訪問各種性能報告和優化技巧,這些信息非常有用。

注意:這些報告功能僅適用於在SQL Azure上的資料庫。

在下面的屏幕截圖中,您可以看到SQL Azure如何輕鬆地使用最多CPU,數據IO和Log IO的查詢。

SQL Azure熱門查詢

您還可以選擇單個查詢並獲取更多詳細信息以幫助SQL性能調優。

SQL Azure查詢詳細信息

優點:基礎報告很好

缺點:僅適用於Azure。沒有跨越多個資料庫的報告。

概要

下次您需要使用SQL Server進行性能調整時,您將有幾個選項可以考慮。您將使用以上工具中的一個,具體取決於您要完成的任務。

如果您正在使用像Retrace這樣的APM解決方案,請確保檢查其內置的SQL性能功能。如果您沒有APM解決方案或不確定它是什麼,請務必閱讀:什麼是應用程序性能管理和開發人員在APM中需要的10個關鍵功能(https://stackify.com/what-is-apm/)。

每日推薦:

1.三十五年經驗分享:程序員進階八法

2.職業成長的四個關鍵詞:趨勢、目標、努力和素質

3.轉型互聯網,到底有多難?

4.在「人民的名義」面前,普通人如何成功突圍

如您有任何疑問,

以及想要和優才小編溝通,

請聯繫:15201480058

點擊展開全文

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 優才學院 的精彩文章:

經典語句徵集│你能打動多少人?
Git趨勢Top9
你需要知道的28個人工智慧術語
如何在執行階段對 Angular 除錯?

TAG:優才學院 |

您可能感興趣

MySQL 性能優化 : 索引和查詢優化
MySQL運維:索引與查詢性能優化
分享:更好的SQL查詢如何做到
大升級!蘋果為搜索查詢功能測試更智能的Siri Web答案
Excel中高端數據查詢方法——SQL
django之聚合查詢,分組查詢,F查詢和Q查詢
你的SQL查詢為什麼這麼慢?
MySQL查詢執行
MySQL 索引及查詢優化總結
djang常用查詢SQL語句
SQL複雜查詢語句總結
iPhone XS怎樣查看序列號?教你三種查詢手機序列號的方法,趕快get吧!
JDBC的通用查詢的方法
數據文件移庫之後,SQL 查詢變慢
MySQL資料庫查詢之聚合查詢
iPhone基帶查詢方法!
DBA的五款最佳SQL查詢優化工具,收藏了
Google排名查詢的8個方法
突破!DNA 上的 SQL 查詢已經成為現實
解讀來自Google的程序必備最新高科技-從 F1 Query 論文看 SQL 查詢的執行模式