使用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 連線握手。
詳細了解了解和估算您的帳單。