トラブルシューティング

このページでは、Firestore の問題を解決する方法を示します。

レイテンシ

次の表に、レイテンシ増加の潜在的な原因を示します。

レイテンシの原因 影響を受けるオペレーションのタイプ 解決策
500-50-5 ルールを超える持続トラフィック。 読み取り / 書き込み

トラフィックが急増する場合、Firestore は需要の増加に対応するために自動的にスケーリングを試みます。Firestore がスケーリングすると、レイテンシが減少し始めます。

ホットスポット(狭いドキュメント範囲に対する高頻度の読み取り、書き込み、削除)により、Firestore のスケーリングが制限されます。スケーリングの設計を確認し、アプリケーションのホットスポットを特定します。

1 つのドキュメントの更新頻度が高すぎるか、トランザクションによって行われた競合。 読み取り / 書き込み

個々のドキュメントへの書き込みレートを 1 秒あたり 1 回未満に抑えます。

トランザクションでのデータ競合とトランザクションの使用方法を確認します。

マージ結合のクエリを遅くします。 読み取る たとえば、複数の等式フィルタ(==)を持つクエリでは、複合インデックスを使用しない場合は、マージ結合のクエリが遅くなる可能性があります。パフォーマンスを向上させるには、これらのクエリに複合インデックスを追加します。詳細については、Firestore クエリが遅い理由の理由 #3 をご覧ください。
大量のドキュメントを返す大規模な読み取り。 読み取る ページ分割を使用して大規模な読み取りを分割します。
最近の削除が多すぎる。 読み取り
これは、データベース内のコレクションを一覧表示するオペレーションに大きな影響を与えます。
最近の削除が多すぎるためにレイテンシが発生している場合、しばらくすると問題は自動的に解決されます。問題が解決しない場合は、サポートにお問い合わせください
リスナーの追加と削除が速すぎる。 リアルタイム リスナー クエリ リアルタイム アップデートのおすすめの方法を確認する
大規模なドキュメント、または多数の結果を含むクエリを聞き取ります。 リアルタイム リスナー クエリ リアルタイム アップデートのおすすめの方法を確認する
インデックス ファンアウト、特に配列フィールドとマップ フィールドの場合。 write 配列フィールドとマップ フィールドの使用方法を確認します。マップ フィールドの場合、サブフィールドのインデックスを無効にすることができます。
大量の書き込みとバッチ書き込み。 write

バッチ書き込みごとの書き込み回数を減らしてみてください。バッチ書き込みはアトミックです。また、1 回のバッチで多数の書き込みを行うと、レイテンシと競合が増加する可能性があります。たとえば、10 回の書き込みのバッチは、500 回の書き込みのバッチよりもパフォーマンスが優れています。

アトミック性を必要としないバルク データ エントリの場合は、並列化された個別の書き込みでサーバー クライアント ライブラリを使用します。バッチ書き込みは、シリアル化された書き込みより優れたパフォーマンスを発揮しますが、並列書き込みほど優れてはいません。

エラーコード

このセクションでは、発生の可能性がある問題を取り上げ、各問題の修正方法のヒントを示します。

DEADLINE_EXCEEDED

次の場合は DEADLINE_EXCEEDED エラーが増加する可能性があります。

  • レイテンシが増大すると、オペレーションが完了するのにデッドラインよりも長くかかることがあります(デフォルトでは 60 秒)。
DEADLINE_EXCEEDED

A deadline was exceeded on the server.

この問題を解決するには、レイテンシのトラブルシューティング ガイドをご覧ください。

ABORTED

次のような状況では ABORTED エラーが増加する可能性があります。

  • 1 つのドキュメントにつき 1 秒あたり 1 回の書き込み制限を超えている。
  • 重複しているトランザクションの競合。
  • 500-50-5 ルールを超えるトラフィック、またはホットスポットが発生しているトラフィックの増加。
ABORTED

Too much contention on these datastore entities. Please try again.

または

ABORTED

Aborted due to cross-transaction contention. This occurs when multiple
transactions attempt to access the same data, requiring Firestore to abort at
least one in order to enforce serializability.

この問題を解決するには:

  • トラフィックが急増する場合、Firestore は需要の増加に対応するために自動的にスケーリングを試みます。Firestore がスケーリングすると、レイテンシが減少し始めます。
  • ホットスポットにより、Firestore のスケールアップが制限されます。ホットスポットを特定するには、スケーリングの設計をご覧ください。
  • トランザクションでのデータ競合とトランザクションの使用を確認します。
  • 個々のドキュメントへの書き込みレートを 1 秒あたり 1 回未満に抑えます。

RESOURCE_EXHAUSTED

次のような状況で RESOURCE_EXHAUSTED エラーが発生することがあります。

  • 無料枠の割り当てを超過し、プロジェクトで課金が有効になっていない。
  • データベース全体で 10,000 回の書き込み、または 10 MiB/秒のスループット上限を超えている。
RESOURCE_EXHAUSTED

Some resource has been exhausted, perhaps a per-user quota, or perhaps the entire file system is out of space.

この問題を解決するには: