トラブルシューティング

このページでは、Datastore モードの Firestore での問題を解決する方法について説明します。

レイテンシ

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

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

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

ホットスポット(狭いエンティティ範囲への高頻度での読み取り、書き込み、削除)により、Datastore モードのスケーリングが制限されます。スケールを考慮して設計することで、アプリケーションのホットスポットを特定します。

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

個々のエンティティへの書き込みレートを下げます。

トランザクション分離と整合性とトランザクションの使用方法を確認します。

マージ結合のクエリを遅くします。 read たとえば、複数の等式フィルタ(==)を持つクエリでは、複合インデックスを使用しない場合は、マージ結合のクエリが遅くなる可能性があります。パフォーマンスを向上させるには、これらのクエリに複合インデックスを追加します。詳細については、インデックスの最適化をご覧ください。
多くのエンティティを返す大規模な読み取り。 read クエリカーソルを使用して、大規模な読み取りを分割します。
最近の削除が多すぎる。 読み取り
これは、データベース内の種類を一覧表示するオペレーションに大きな影響を与えます。
最近の削除が多すぎるためにレイテンシが発生している場合、しばらくすると問題は自動的に解決するはずです。問題が解決しない場合は、サポートにお問い合わせください
インデックス ファンアウト、特に配列プロパティの場合。 write インデックス爆発と配列プロパティの使用状況を確認します。

エラーコード

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

DEADLINE_EXCEEDED

DEADLINE_EXCEEDED

A deadline was exceeded on the server.

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

ABORTED

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

  • あるエンティティが 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 Datastore mode
to abort at least one in order to enforce serializability.

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

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

RESOURCE_EXHAUSTED

次の状況では、RESOURCE_EXHAUSTED エラーが発生する可能性があります。

無料枠の割り当てを超過し、プロジェクトに対する課金が有効になっていません。

RESOURCE_EXHAUSTED

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

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

INVALID_ARGUMENT

次の状況では、INVALID_ARGUMENT エラーが発生する可能性があります。

  • 1,500 バイトを超える インデックス付きのプロパティ値を持つエンティティを commit しようとしている。この上限は、プロパティ値の UTF-8 エンコードに適用されます。
  • 1,048,487 バイト(1 MiB - 89 バイト)を超えるインデックスなしのプロパティ値を持つエンティティを commit しようとしている。この上限は、エンティティ内のプロパティ値の合計に適用されます。たとえば、それぞれが 256 KiB である 4 つのプロパティは、上限を超えています。

プロパティ値の上限は、1,500 バイト(インデックス付き)と 1,048,487 バイト(インデックスなし)です。この上限を超えることはできません。また、調整可能な割り当てではありません。

INVALID_ARGUMENT: The value of property property-name is longer than 1500 bytes

または

INVALID_ARGUMENT: The value of property property_name is longer than 1048487 bytes

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

  • インデックス付けされたプロパティ値の場合は、プロパティを複数のプロパティに分割します。可能であれば、インデックスなしのプロパティを作成し、インデックスに登録する必要のないデータを、インデックスなしのプロパティに移動します。
  • インデックスなしのプロパティ値の場合は、プロパティを複数のプロパティに分割するか、プロパティ値の圧縮を実装します。