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