剖析資料庫

使用 Firebase CLI 內建的資料庫剖析器工具,評估 Firebase Realtime Database 的效能。剖析工具會記錄資料庫在特定時間範圍內的所有活動,然後產生詳細報表。您可以使用詳細報表排解資料庫效能問題、找出問題區域,並減少未編入索引的查詢。

建立設定檔

  1. 開始剖析 Firebase Realtime Database 之前,請確認您使用的是最新版 Firebase CLI,且已針對要剖析的資料庫和專案將其初始化。請注意,您必須是該專案的編輯者或擁有者,才能進行剖析。

  2. 使用下列指令開始剖析資料庫:

    firebase database:profile
    分析器會在從資料庫記錄作業並建構設定檔時,顯示狀態訊息。

  3. 按下 Enter 鍵即可完成設定,並顯示結果。

解讀結果

Profiler 工具會匯總收集到的資料,並根據「速度」、「頻寬」和「未編入索引的查詢」這三個主要類別顯示結果。

速度

速度報表會針對每種作業類型,評估伺服器的回應時間 (以毫秒為單位)。不過,速度報告中測得的速度可能並非實際反映使用者體驗的速度。包括網路狀況在內的不同因素,都可能會增加用戶端的延遲時間。

速度報表包含下列屬性:

  • 路徑:發生作業的資料庫路徑。如果子節點超過 25 個,剖析器工具會將這些節點折疊至父項路徑,並新增 $wildcard 標記。您可能會在報表中看到資料庫的根目錄,以正斜線 / 表示。
  • 計數:在指定路徑中發生的作業次數。
  • 平均執行速度:伺服器執行商業邏輯所需的平均時間,用於處理該路徑上的特定作業類型。此處測量的時間間隔,是從下方所述的「平均待處理時間」開始計算。
  • 平均待處理時間:要求在排入佇列後,等待執行的平均時間。所有由用戶端發起的要求都會出現這種延遲現象。伺服器端請求的總延遲時間,大致等於該要求的待處理時間和執行速度總和。
  • 權限遭拒:資料庫中,在指定路徑上遭到 Firebase 資料庫規則封鎖的作業數量。
依作業類型劃分的速度報表
讀取執行速度 用戶端要求從資料庫讀取資料的伺服器回應時間。讀取執行時間通常會隨著讀取的資料量而調整,但即使是一些小型讀取作業,也可能會因快取預先載入而延遲。
寫入執行速度 用戶端要求將資料寫入資料庫的伺服器回應時間。寫入執行時間會隨著寫入的資料量而增加。
連線執行速度 建立資料庫用戶端要求的伺服器回應時間。連線要求的延遲時間主要受到與連線管理相關的記憶體內伺服器端記錄影響。
廣播執行速度

伺服器將資料分發至偵聽指定路徑的用戶端,以便即時更新所需的時間。

廣播速度報表中的「Count」屬性會匯總發生的廣播數量,而非收到資訊的用戶端數量。舉例來說,如果有 10 個用戶端在特定路徑上進行監聽,且伺服器向所有 10 個用戶端廣播更新,則廣播計數只會反映 1 次廣播,即使 10 個用戶端都收到資料。

播送速度報表中不包含「Permission Denied」屬性。

頻寬

「頻寬」報表可提供洞察資料,讓您瞭解資料庫在傳入和傳出作業中消耗了多少資料。不過,您不應使用頻寬報表來估算帳單金額,因為這類報表不含用於其他作業 (例如資料庫剖析) 的頻寬。頻寬報表可粗略估算資料庫讀取、寫入和廣播作業所消耗的資料酬載大小。這項工具是用來評估成效,而非預測帳單。

頻寬報表包含下列屬性:

  • 路徑:發生作業的資料庫路徑。如果子節點超過 25 個,剖析器工具會將這些節點折疊至父項路徑。

  • 總計:在指定路徑的所有作業中,傳出或傳入的位元組總數。

  • 計數:在指定路徑中發生的作業次數。

  • 平均值:在指定路徑的作業中,下載或上傳位元組的平均數量 (位元組/寫入或位元組/讀取)。

頻寬報表
已下載的位元組 透過用戶端 SDK 和 REST API 傳送的讀取和廣播作業所消耗的資料。
上傳的位元組 透過寫入要求進入資料庫伺服器的資料用量。刪除作業會顯示為寫入作業,且在「傳入」下方顯示為 0 位元組。

未編入索引的查詢

未編入索引的查詢可能會耗費大量資源,因為用戶端會下載某個位置的所有資料,然後對其執行查詢。這會導致不必要的頻寬用量增加。盡可能解決未編入索引的查詢,以便最佳化資料庫效能。

「未編入索引的查詢」報表會顯示下列屬性:

  • Path:資料庫中發生未編入索引查詢的路徑。
  • 索引:您應新增的規則,用於解決未索引的查詢。如要進一步瞭解索引,請參閱「為資料建立索引」。
  • 計數:在指定路徑中發生的未編入索引查詢數量。

進階剖析

如要查看資料庫處理的所有作業,請在剖析資料庫時使用 --raw 標記,如下所示:

firebase database:profile --raw

原始輸出內容還包含每個作業的用戶端資訊,例如 userAgent 字串和 IP 位址。如要進一步瞭解 Firebase Realtime Database 中剖析的不同作業,請參閱「Firebase Realtime Database 作業類型」。

剖析工具:不是結帳工具

請勿使用分析工具來估算頻寬成本。剖析工具旨在提供資料庫效能的整體情況,協助您監控作業並排解問題,而非用於估算帳單費用。這項指標不會計算網路流量,只會記錄回應中傳送的應用程式資料預估值。

以下列舉 Firebase 會計費的網路流量,但資料庫設定檔未涵蓋的常見情況:

  • 協定額外負擔:建立及維持工作階段時,伺服器和用戶端之間需要額外的流量。視底層通訊協定而定,這類流量可能包括:Firebase 即時資料庫的即時通訊協定額外負擔、WebSocket 額外負擔,以及 HTTP 標頭額外負擔。每次建立連線時,這項開銷加上任何 SSL 加密開銷,都會增加連線成本。雖然這通常不是大量頻寬,但如果酬載很小,或是您經常建立短暫連線,就可能會耗用大量頻寬。
  • SSL 加密額外負擔:SSL 加密額外負擔是安全連線所需的必要成本。平均而言,初始握手的成本約為 3.5 KB,每則傳出訊息的 TLS 記錄標頭約為 40 B。對於大多數應用程式而言,這筆費用只占帳單的一小部分。不過,如果您的特定案例需要大量 SSL 握手,這可能會占很大的比例。舉例來說,不支援 TLS 工作階段票證的裝置可能需要大量 SSL 連線握手。

進一步瞭解如何瞭解及估算帳單金額