Firebase CLIに組み込まれているデータベース プロファイラ ツールを使用して、Firebase Realtime Database のパフォーマンスを測定します。プロファイラー ツールは、データベース内の一定期間のすべてのアクティビティを記録し、詳細なレポートを生成します。詳細レポートを使用して、データベース パフォーマンスの問題をトラブルシューティングし、問題領域を特定し、インデックスのないクエリを減らします。
プロフィールを作成する
Firebase Realtime Database のプロファイリングを開始する前に、 Firebase CLIの最新バージョンを使用していること、およびプロファイリングするデータベースとプロジェクト用に初期化されていることを確認してください。プロファイリングするには、そのプロジェクトの編集者または所有者である必要があることに注意してください。
次のコマンドでデータベースのプロファイリングを開始します。
firebase database:profile
プロファイラーは、データベースからの操作を記録し、プロファイルを作成するときに、ステータス メッセージを表示します。Enterを押してプロファイルを完成させ、結果を表示します。
結果を解釈する
プロファイラー ツールは、データベースの操作に関して収集したデータを集計し、その結果を速度、帯域幅、およびインデックスなしクエリの 3 つの主なカテゴリに分けて表示します。
スピード
速度レポートは、各操作タイプのサーバーの応答時間 (ミリ秒単位) を測定します。ただし、速度レポートで測定された速度は、実際にはエンド ユーザーの速度を反映していない場合があります。ネットワークの状態など、さまざまな要因によって、クライアント側で遅延が発生する可能性があります。
速度レポートには、次のプロパティが含まれます。
- パス:操作が発生したデータベース内のパス。 25 を超える子ノードがある場合、プロファイラー ツールはこれらを親パスに折りたたみ、
$wildcard
マーカーを追加します。レポートには、スラッシュ/
で表されるデータベースのルート ディレクトリが表示される場合があります。 - カウント:特定のパスで発生した操作の数。
- 平均実行速度:サーバーがそのパスで特定の操作タイプを処理するために必要なビジネス ロジックを実行するのにかかる平均時間。ここで測定される時間間隔は、後述の「平均保留時間」で測定された時間間隔の後に開始されます。
- 平均保留時間:リクエストが実行されるまでにキューに入れられた平均時間。この遅延は、クライアントが開始したすべての要求に共通です。サーバー側のリクエストの合計レイテンシは、そのリクエストの保留時間と実行速度のおおよその合計です。
- 許可が拒否されました:データベースのFirebase データベース ルールによってブロックされた、指定されたパスでの操作の数。
操作タイプ別の速度レポート | |
---|---|
読み取り実行速度 | クライアントがデータベースからデータを読み取る要求に対するサーバーの応答時間。読み取りの実行時間は、通常、読み取られるデータの量に比例しますが、一部の小さな読み取りでも、キャッシュのプリフェッチによって遅延する場合があります。 |
書き込み実行速度 | クライアントがデータベースにデータを書き込む要求に対するサーバーの応答時間。書き込み実行時間は、書き込まれるデータの量に比例します。 | 接続実行速度 | データベース クライアントに対して確立するための要求に対するサーバーの応答時間。接続要求の待機時間は、接続管理に関連するメモリ内のサーバー側のブックキーピングによって支配されます。 |
ブロードキャスト実行速度 | サーバーがリアルタイム更新のために指定されたパスをリッスンしているクライアントにデータを配信するのにかかる時間。 ブロードキャスト速度レポートのカウントプロパティは、情報を受信したクライアントの数ではなく、発生したブロードキャストの数を集計します。たとえば、10 個のクライアントが特定のパスでリッスンしていて、サーバーが 10 個のクライアントすべてに更新をブロードキャストした場合、10 個のクライアントがデータを受信したにもかかわらず、ブロードキャスト カウントは 1 回のブロードキャストしか反映しません。 Permission Deniedプロパティは、ブロードキャスト速度レポートには含まれません。 |
帯域幅
帯域幅レポートは、受信操作と送信操作でデータベースが消費するデータ量に関する洞察を提供します。ただし、データベースのプロファイリングなど、他の操作に使用される帯域幅は含まれていないため、帯域幅レポートを請求の見積もりに使用しないでください。帯域幅レポートは、データベースとの間の読み取り、書き込み、およびブロードキャスト操作によって消費されるデータのペイロード サイズを概算します。これはパフォーマンスを測定するツールであり、課金を予測するツールではありません。
帯域幅レポートには、次のプロパティが含まれます。
パス:操作が発生したデータベース内のパス。 25 を超える子ノードがある場合、プロファイラー ツールはこれらを親パスに折りたたみます。
合計:特定のパスでのすべての操作で使用される送信または受信バイトの合計。
カウント:特定のパスで発生した操作の数。
平均:特定のパス (バイト/書き込みまたはバイト/読み取り) での操作全体でダウンロードまたはアップロードされたバイトの平均数。
帯域幅レポート | |
---|---|
ダウンロードされたバイト | クライアント SDK および REST API を介して送信される読み取りおよびブロードキャスト操作によって消費されるデータ。 |
アップロードされたバイト | データベース サーバーへの書き込み要求によって消費されるデータ。削除は、着信の下に 0 バイトの書き込みとして表示されます。 |
索引付けされていないクエリ
インデックスのないクエリは、クライアントがすべてのデータをある場所にダウンロードしてからクエリを実行するため、コストがかかる可能性があります。これにより、必要以上の帯域幅が使用されます。データベースのパフォーマンスを最適化するために、できるだけ多くのインデックスのないクエリを解決してください。
インデックスのないクエリ レポートには、次のプロパティが表示されます。
- パス:インデックス付けされていないクエリが発生したデータベース内のパス。
- インデックス: インデックスのないクエリを解決するために追加する必要があるルール。インデックス作成の詳細については、データのインデックス作成 を参照してください。
- カウント:指定されたパスで発生した、インデックスが作成されていないクエリの数。
高度なプロファイリング
データベースが処理しているすべての操作を表示するには、次
firebase database:profile --rawように、データベースをプロファイリングするときに
--raw
フラグを使用します。 raw 出力には、 userAgent
文字列や IP アドレスなど、各操作のクライアント情報も含まれます。 Firebase Realtime Database オペレーション タイプで、Firebase Realtime Database でプロファイリングされるさまざまなオペレーションの詳細をご覧ください。
プロファイラー ツール: 請求ツールではありません
プロファイラー ツールを使用して帯域幅のコストを見積もらないでください。プロファイラー ツールは、データベースのパフォーマンスの全体像を把握し、操作の監視と問題のトラブルシューティングを支援することを目的としており、課金を見積もることを目的としていません。ネットワーク トラフィックは考慮されず、応答で送信されたアプリケーション データの推定値のみが記録されます。
以下は、データベース プロファイルでカバーされていない、Firebase によって請求されるネットワーク トラフィックの一般的な例です。
- プロトコルのオーバーヘッド:セッションを確立して維持するには、サーバーとクライアント間の追加のトラフィックが必要です。基盤となるプロトコルに応じて、このトラフィックには、Firebase Realtime Database のリアルタイム プロトコル オーバーヘッド、WebSocket オーバーヘッド、および HTTP ヘッダー オーバーヘッドが含まれる場合があります。接続が確立されるたびに、このオーバーヘッドが SSL 暗号化のオーバーヘッドと相まって、接続コストに影響します。通常、これは大量の帯域幅ではありませんが、ペイロードが小さい場合や、短い接続を頻繁に行う場合はかなりの量になる可能性があります。
- SSL 暗号化のオーバーヘッド:安全な接続に必要な SSL 暗号化のオーバーヘッドに関連するコストがあります。平均して、このコストは最初のハンドシェイクで約 3.5KB、各送信メッセージの TLS レコード ヘッダーで約 40B です。ほとんどのアプリでは、これは請求額のわずかな割合です。ただし、特定のケースで多くの SSL ハンドシェイクが必要な場合、これは大きな割合になる可能性があります。たとえば、TLS セッション チケットをサポートしていないデバイスでは、多数の SSL 接続ハンドシェイクが必要になる場合があります。
請求書の理解と見積もりについて詳しくは、こちらをご覧ください。