使用Firebase CLI中內置的數據庫分析器工具測量 Firebase 實時數據庫的性能。分析器工具記錄給定時間段內數據庫中的所有活動,然後生成詳細報告。使用詳細的報告來解決數據庫性能問題、發現問題區域並減少未索引的查詢。
建立個人資料
在開始分析 Firebase 實時數據庫之前,請確保您使用的是最新版本的Firebase CLI ,並且已針對要分析的數據庫和項目對其進行了初始化。請注意,您必須是要分析的項目的編輯者或所有者。
使用以下命令開始分析數據庫:
firebase database:profile
分析器在記錄數據庫操作並構建配置文件時會顯示一條狀態消息。按Enter完成配置文件並顯示結果。
解釋您的結果
分析器工具會聚合所收集的有關數據庫操作的數據,並按三個主要類別顯示結果:速度、帶寬和未索引查詢。
速度
速度報告測量服務器對每種操作類型的響應時間(以毫秒為單位)。但是,速度報告中測量的速度可能並不真正反映最終用戶體驗的速度。包括網絡條件在內的不同因素可能會增加客戶端的延遲。
速度報告包括以下屬性:
- 路徑:數據庫中發生操作的路徑。如果子節點超過 25 個,探查器工具會將它們折疊到父路徑中並添加
$wildcard
標記。您可能會在報告中看到數據庫的根目錄,由正斜杠/
表示。 - 計數:給定路徑上發生的操作數。
- 平均執行速度:服務器執行處理該路徑上的特定操作類型所需的業務邏輯所需的平均時間。這裡測量的時間間隔在下面描述的“平均等待時間”測量的時間間隔之後開始。
- 平均待處理時間:請求在執行之前排隊的平均時間。這種延遲對於所有客戶端發起的請求都是常見的。服務器端請求總延遲大致是該請求的待處理時間和執行速度的總和。
- 權限被拒絕:給定路徑上被數據庫上的Firebase 數據庫規則阻止的操作數。
按操作類型劃分的速度報告 | |
---|---|
讀取執行速度 | 客戶端請求從數據庫讀取數據的服務器響應時間。讀取執行時間通常隨讀取的數據量而變化,但即使是一些小讀取也可能因緩存預取而延遲。 |
寫入執行速度 | 客戶端請求將數據寫入數據庫的服務器響應時間。寫入執行時間隨寫入的數據量而變化。 | 連接執行速度 | 向數據庫客戶端建立請求的服務器響應時間。連接請求的延遲主要由與連接管理相關的內存服務器端簿記決定。 |
廣播執行速度 | 服務器將數據分發到偵聽給定路徑以進行實時更新的客戶端所花費的時間。 廣播速度報告中的計數屬性聚合發生的廣播數量,而不是接收信息的客戶端數量。例如,如果 10 個客戶端正在給定路徑上偵聽,並且服務器向所有 10 個客戶端廣播更新,則廣播計數僅反映 1 個廣播,即使 10 個客戶端收到了數據。 “權限被拒絕”屬性不包含在“廣播速度”報告中。 |
帶寬
帶寬報告可深入了解數據庫在傳入和傳出操作中消耗的數據量。但是,您不應該使用帶寬報告來估計賬單,因為它不包括用於其他操作(例如分析數據庫)的帶寬。帶寬報告粗略估計數據庫的讀取、寫入和廣播操作所消耗的數據的有效負載大小。它是一種衡量性能的工具,而不是預測計費的工具。
帶寬報告包括以下屬性:
路徑:數據庫中發生操作的路徑。如果子節點超過 25 個,分析器工具會將這些節點折疊到父路徑中。
總計:給定路徑上所有操作使用的傳出或傳入字節總數。
計數:給定路徑上發生的操作數。
平均值:給定路徑上的操作中下載或上傳的平均字節數(字節/寫入或字節/讀取)。
帶寬報告 | |
---|---|
下載字節數 | 通過客戶端 SDK 和 REST API 發送的讀取和廣播操作消耗的數據。 |
上傳字節數 | 通過進入數據庫服務器的寫入請求消耗的數據。刪除顯示為寫入,傳入下方有 0 字節。 |
未索引的查詢
未索引的查詢可能會很昂貴,因為客戶端會下載某個位置的所有數據,然後對其執行查詢。這會消耗比必要的更多的帶寬。解決盡可能多的未索引查詢以優化數據庫的性能。
未索引查詢報告顯示以下屬性:
- 路徑:數據庫中發生未索引查詢的路徑。
- 索引:您應該添加的規則來解決未索引的查詢。在索引數據中了解有關索引的更多信息。
- 計數:給定路徑上發生的未索引查詢的數量。
高級分析
要查看數據庫正在處理的所有操作,請在分析數據庫時使用--raw
標誌,如下所示:
firebase database:profile --raw
原始輸出還包括每個操作的客戶端信息,例如userAgent
字符串和 IP 地址。在 Firebase 實時數據庫操作類型 中詳細了解 Firebase 實時數據庫中分析的不同操作。
分析器工具:不是計費工具
不要使用分析器工具來估計帶寬成本。分析器工具旨在讓您全面了解數據庫的性能,幫助您監控操作並解決問題,而不是估計賬單。它不考慮網絡流量,僅記錄響應中發送的應用程序數據的估計。
以下是 Firebase 計費的網絡流量的一些常見示例,但您的數據庫配置文件中未涵蓋這些流量:
- 協議開銷:服務器和客戶端之間需要一些額外的流量才能建立和維護會話。根據底層協議,此流量可能包括:Firebase 實時數據庫的實時協議開銷、WebSocket 開銷和 HTTP 標頭開銷。每次建立連接時,此開銷與任何 SSL 加密開銷相結合,都會增加連接成本。雖然這通常不是很大的帶寬,但如果您的有效負載很小或者您進行頻繁的短連接,那麼它可能會很大。
- SSL 加密開銷:安全連接所需的 SSL 加密開銷會產生相關成本。平均而言,初始握手的成本約為 3.5KB,每條傳出消息上的 TLS 記錄標頭的成本約為 40B。對於大多數應用程序來說,這只是您賬單的一小部分。但是,如果您的特定情況需要大量 SSL 握手,則該比例可能會很大。例如,不支持 TLS 會話票證的設備可能需要大量 SSL 連接握手。
詳細了解了解和估算您的賬單。