分析您的數據庫

使用內置於Firebase CLI中的數據庫分析器工具衡量 Firebase 實時數據庫的性能。探查器工具記錄給定時間段內數據庫中的所有活動,然後生成詳細報告。使用詳細報告解決數據庫性能問題、發現問題區域並減少未編制索引的查詢。

建立個人資料

  1. 在開始分析您的 Firebase 實時數據庫之前,請確保您使用的是最新版本的Firebase CLI ,並且您已經為要分析的數據庫和項目對其進行了初始化。請注意,您必須是該項目的編輯者或所有者才能進行概要分析。

  2. 使用以下命令開始分析您的數據庫:

    firebase database:profile
    分析器在記錄數據庫操作並構建分析時顯示一條狀態消息。

  3. Enter完成配置文件並顯示結果。

解釋你的結果

探查器工具匯總它收集的有關數據庫操作的數據,並在三個主要類別中顯示結果:速度帶寬未索引查詢

速度

速度報告測量服務器對每種操作類型的響應時間(以毫秒為單位)。但是,速度報告中測得的速度實際上可能無法反映最終用戶的速度體驗。包括網絡條件在內的不同因素可能會增加客戶端的延遲。

速度報告包括以下屬性:

  • 路徑:數據庫中發生操作的路徑。如果有超過 25 個子節點,探查器工具會將它們折疊到父路徑中並添加一個$wildcard標記。您可能會在報告中看到數據庫的根目錄,用正斜杠/表示。
  • 計數:在給定路徑上發生的操作數。
  • 平均執行速度:服務器執行處理該路徑上特定操作類型所需的業務邏輯所需的平均時間。此處測量的時間間隔從下面描述的“平均等待時間”測量的時間間隔開始。
  • 平均等待時間:請求在執行之前排隊的平均時間。這種延遲對於所有客戶端發起的請求都是常見的。總的服務器端請求延遲大致是該請求的掛起時間和執行速度的總和。
  • 權限被拒絕:給定路徑上被Firebase 數據庫規則阻止的操作數。
按操作類型的速度報告
讀取執行速度客戶端請求從數據庫讀取數據的服務器響應時間。讀取執行時間通常與讀取的數據量成比例,但即使是一些小的讀取也可能因緩存預取而延遲。
寫入執行速度客戶端請求將數據寫入數據庫的服務器響應時間。寫入執行時間與寫入的數據量成比例。
連接執行速度建立數據庫客戶端請求的服務器響應時間。連接請求的延遲主要由與連接管理相關的內存服務器端簿記決定。
廣播執行速度

服務器將數據分發給偵聽給定路徑以獲取實時更新的客戶端所花費的時間。

Broadcast Speed Report 中的Count屬性聚合發生的廣播數,而不是接收信息的客戶端數。例如,如果 10 個客戶端在給定路徑上偵聽,並且服務器向所有 10 個客戶端廣播更新,則廣播計數僅反映 1 個廣播,即使有 10 個客戶端接收到數據。

Permission Denied屬性不包含在 Broadcast Speed 報告中。

帶寬

帶寬報告提供有關數據庫在傳入和傳出操作中消耗了多少數據的見解。但是,您不應該使用帶寬報告來估算費用,因為它不包括用於其他操作的帶寬,例如分析您的數據庫。帶寬報告粗略估計了對數據庫的讀取、寫入和廣播操作所消耗的數據的有效負載大小。它是一種衡量績效的工具,而不是預測賬單的工具。

帶寬報告包括以下屬性:

  • 路徑:數據庫中發生操作的路徑。如果有超過 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 連接握手。

閱讀更多關於了解和估算您的賬單的信息。