記錄慢查詢是 Rails 應用程式效能調優的重要部分。Rails 提供了一種用於記錄慢查詢的內建機制,稱為 Active Support Notifications。
本文將向你展示如何使用 Active Support Notifications 記錄 Rails 應用程式中的慢查詢。我們還將提供如何分析緩慢查詢日誌以識別和修復效能問題的技巧。
什麼是慢查詢?
慢查詢是指執行時間超過一定閾值的查詢。構成慢速查詢的閾值可能因應用程式及其效能要求而異。不過,一個好的經驗法則是,將任何耗時超過 100 毫秒的查詢視為慢查詢。
為什麼必須記錄慢查詢?
記錄緩慢查詢的重要性和原因有很多。
首先,慢查詢可能是應用程式中潛在效能問題的訊號。通過記錄緩慢查詢,您可以及早發現這些問題並採取措施加以解決。預防勝於治療。
其次,緩慢查詢可以幫助您識別應用程式中潛在的安全漏洞。例如,惡意 SQL 注入攻擊導致的慢查詢可用於識別漏洞並採取措施加以緩解。
第三,慢查詢可以幫助您提高應用程式的效能。
通過分析慢查詢日誌,您可以找出造成效能問題最多的查詢,並採取措施對其進行優化。我們可以使用 Active Support Notifications 在應用程式中記錄慢查詢事件。
什麼是 Active Support Notifications?
對於希望深入瞭解應用程式效能和行為的 Rails 開發人員來說,主動支援通知是必不可少的工具。通過它們,您可以跟蹤程式碼中發生的特定事件,並收集有關其執行情況的寶貴資料。
通過了解它們的功能並有效利用它們,您可以顯著提高 Rails 應用程式的效能、可維護性和整體健康水平。
以下是主動支援通知及其主要優勢的概述。
功能性
- 儀表化:您可以使用 ActiveSupport::Notifications.instrument 方法對 Rails 應用程式中的特定事件進行儀表化。該方法接收名稱、有效載荷(可選資料)和要執行的程式碼塊。
- 有效載荷:有效載荷允許您傳遞與被檢測事件相關的附加資料。其中可能包括時間戳、使用者 ID、資料庫查詢詳情或任何其他相關資訊。
- 訂閱者:區塊執行後,Active Support 會向已註冊的訂閱者傳送包含名稱和有效載荷的通知。這些訂閱者可以處理這些資訊,並根據事件採取特定行動。
優勢
- 效能監控:通過檢測關鍵事件,您可以跟蹤其執行時間,並識別應用程式中的效能瓶頸。這樣,您就可以優化程式碼,提高 Rails 應用程式的整體效能。
- 除錯:通知可以為應用程式的流程提供有價值的見解,並幫助診斷問題。有效載荷資料可揭示執行期間的意外行為或錯誤。
- 自定義儀表:您可以通過建立自己的自定義工具和訂閱者來擴充套件 Active Support 通知的功能。這樣,您就可以跟蹤與應用程式獨特需求相關的特定事件。
- 與其他庫整合:許多流行的 Rails 庫(如 Action Cable 和 ActiveJob)都利用 Active Support Notifications 提供效能資料和事件跟蹤功能。
如何使用 Active Support Notifications 記錄緩慢查詢
Active Support Notifications 是一種內建的 Rails 機制,用於記錄應用程式中發生的事件。要使用 “主動支援通知” 記錄緩慢查詢,可將下面的示例程式碼放在初始化器中(如 config/initializers/error_notifications.rb
),以確保其在應用程式啟動時執行。或者,將程式碼新增到特定控制器或模型中,以便有針對性地記錄日誌。
config.active_support.Notifications.subscribe('sql.active_record') do |*args| event = ActiveSupport::Notifications::Event.new(*args) if event.duration > 100 Rails.logger.info "Slow query: #{event.payload[:sql]}" end end
這段程式碼將記錄所有執行時間超過 100 毫秒的 SQL 查詢。
記錄的資訊包括 SQL 語句、查詢持續時間、執行查詢的檔名和行號。
如何分析慢查詢日誌
開始記錄慢查詢後,就可以分析日誌,找出造成效能問題最多的查詢。分析慢查詢日誌有幾種不同的方法。
一種方法是使用 Rails Performance Dashboard 之類的工具。Rails 效能儀表板提供了一個圖形介面,用於檢視和分析慢查詢日誌。
另一種分析慢查詢日誌的方法是使用文字編輯器或電子表格程式。您可以使用文字編輯器或電子表格程式按持續時間、SQL 語句或檔名對慢速查詢日誌進行排序和過濾。
這可以幫助你找出造成最多效能問題的查詢。
如何修復緩慢的查詢
一旦確定了造成最多效能問題的查詢,就可以採取措施進行修復。有幾種不同的方法可以解決查詢速度慢的問題。
一種方法是優化 SQL 語句。可以通過使用索引、新增約束或使用更高效的查詢方法來優化 SQL 語句。
另一種修復緩慢查詢的方法是快取查詢結果。可以使用 Rails 快取儲存或資料庫快取(如 Redis、Memcached)來快取查詢結果。
實施分頁並將大型結果集拆分成較小的頁面,可以提高效能並減少記憶體使用量。
此外,還可考慮執行後臺工作,並將長期執行的查詢解除安裝到後臺工作(如使用 Sidekiq、Resque),以防止阻塞網路請求。
小結
主動支援通知(Active Support Notifications)是記錄緩慢查詢的內建 Rails 機制。記錄慢查詢是調整任何 Rails 應用程式效能的重要部分。通過記錄查詢,您可以及早發現效能問題並採取措施加以解決。
您可以使用 Active Support Notifications 記錄慢速查詢,並分析日誌以確定導致最多效能問題的查詢。一旦確定了造成最多效能問題的查詢,就可以採取措施進行修復。
如果您正在執行一個成熟的專案,並且有能力讓初級開發人員加入團隊,那麼這種程度的工作優化將引導他們通過參與流程建立更好的實踐。並讓監控團隊和前輩們參與進來,從而建立一個效能更好的平臺。將緩慢查詢專案交給初級開發人員,他們將從中受益匪淺。
不要坐等問題出現。在緩慢查詢拖慢您的速度之前,先加以預防。要積極主動,而不是被動反應!
評論留言