剖析資料庫

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

建立設定檔

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

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

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

  3. 按下 Enter 鍵即可完成個人資料並顯示結果。

解讀結果

分析器工具會匯總收集到的資料庫作業相關資料,並將結果分成三種主要類別:速度頻寬未建立索引的查詢

速度

速度報表會評估各個運算類型的伺服器回應時間 (以毫秒為單位)。然而,速度報表中測量的速度可能無法實際反映使用者體驗。網路狀況等各種因素都會增加用戶端的延遲時間。

速度報表包含下列屬性:

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

伺服器將資料分散到監聽指定路徑以進行即時更新所花費的時間。

廣播速度報表中的 Count 屬性會匯總已發生的廣播次數,而不是收到資訊的用戶端數量。例如,如果有 10 個用戶端監聽特定路徑,而伺服器廣播更新到全部 10 個用戶端,那麼即使 10 個用戶端收到資料,廣播次數也只會反映 1 次廣播。

廣播速度報表不會提供「權限遭拒」屬性,

頻寬

「頻寬報表」提供深入分析資訊,讓您瞭解資料庫在傳入和傳出作業中消耗多少資料。但是,請勿使用「頻寬報表」來估算帳單費用,因為其中不包括剖析資料庫等其他作業的頻寬。「頻寬報表」會大致估算往返資料庫讀取、寫入和廣播作業耗用的資料酬載大小。它是評估成效的工具,不是預測帳單的工具。

頻寬報表包含下列屬性:

  • 路徑:資料庫中執行作業的路徑。如果子節點超過 25 個,分析器工具會將這些節點收合為父項路徑。

  • Total:在指定路徑中所有作業使用的外送或傳入位元組總數。

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

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

頻寬報表
下載的位元組 透過用戶端 SDK 和 REST API 傳出的讀取和廣播作業耗用的資料。
已上傳的位元組數 透過傳送至資料庫伺服器寫入要求而使用的資料。刪除作業會顯示為寫入,但傳入的位元組數為 0。

未建立索引的查詢

未建立索引的查詢可能會耗用大量資源,因為用戶端下載特定位置的所有資料,然後對資料執行查詢。這樣會使用超過所需頻寬。請盡可能解決未建立索引的查詢,藉此提高資料庫效能。

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

  • 路徑:資料庫中未建立索引查詢的發生路徑。
  • 索引:應新增的規則,才能解決未建立索引的查詢。如要進一步瞭解如何建立索引,請參閱為資料建立索引
  • 計數:在指定路徑中發生的未建立索引查詢數量。

進階剖析

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

firebase database:profile --raw

原始輸出內容也包含每項作業的用戶端資訊,例如 userAgent 字串和 IP 位址。如要進一步瞭解 Firebase 即時資料庫中剖析的不同作業,請參閱 Firebase 即時資料庫作業類型

分析器工具:非帳單工具

請勿使用分析器工具估算頻寬費用。分析器工具的用意是讓您大致掌握資料庫效能,協助您監控作業及排解問題,而不是估算帳單費用。並不會考量網路流量,而只會記錄回應中傳送的應用程式資料的估計值。

以下列舉一些由 Firebase 收費的常見網路流量示例,但這些流量不在資料庫設定檔中:

  • 通訊協定負擔:伺服器和用戶端之間需要一些額外的流量,以建立和維護工作階段。視基礎通訊協定而定,這類流量可能包括:Firebase 即時資料庫的即時通訊協定負載、WebSocket 負擔和 HTTP 標頭負擔。每次建立連線時,都會產生連線費用,再加上任何 SSL 加密負擔,都會產生連線費用。雖然這通常不會佔用大量頻寬,但如果酬載不小或頻繁建立短時間連線,則可能帶來大量頻寬。
  • SSL 加密負擔:系統會向您收取安全連線所需的 SSL 加密負擔相關費用。平均而言,初始握手所需的費用約為 3.5 KB,每則傳出訊息的傳輸層安全標準 (TLS) 記錄標頭約為 40B。對大多數應用程式來說,這種情況只佔帳單的一小部分。然而,如果您的特定情況需要大量 SSL 握手,這個百分比可能會變得很大。舉例來說,不支援 TLS 工作階段票證的裝置可能需要大量的 SSL 連線握手。

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