剖析資料庫

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

建立個人資料

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

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

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

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

解讀結果

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

速度

速度報表會測量伺服器針對每種作業類型的回應時間 (以毫秒為單位)。不過,速度報告中測量的速度不一定能反映出使用者的速度體驗。許多因素 (包括網路狀況) 都會增加用戶端的延遲時間。

速度報表包含下列屬性:

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

伺服器將資料提供給用戶端監聽指定路徑以進行即時更新所需的時間。

廣播速度報表中的 Count 屬性會匯總發生的廣播次數,而非收到資訊的用戶端數量。舉例來說,假設有 10 個用戶端正在監聽特定路徑,且伺服器向全部 10 個用戶端廣播一次更新,則即使有 10 個用戶端收到資料,廣播計數只會反映 1 個廣播訊息。

「廣播速度」報表沒有「權限遭拒」屬性。

頻寬

頻寬報表可讓您深入瞭解資料庫在傳入和傳出作業中使用多少資料。不過,請不要使用頻寬報表估算費用,因為其中不含剖析資料庫等其他作業使用的頻寬。頻寬報表會大致估算往來資料庫讀取、寫入和播送作業所耗用資料的酬載大小。這項工具是用來評估成效,但不能預測帳單。

頻寬報表包含下列屬性:

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

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

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

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

頻寬報表
下載的位元組數 透過用戶端 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 連線握手。

如要進一步瞭解如何解讀及預估帳單金額,請參閱本文