问题排查

本页介绍了如何解决 Datastore 模式 Firestore 的问题。

延迟时间

下表介绍可能导致延迟时间增加的原因:

延迟原因 受影响的操作类型 解决方法
超出 500-50-5 规则的持续流量。 读取、写入

对于流量快速增加,Datastore 模式会尝试自动扩缩以满足增加的需求。当 Datastore 模式扩缩时,延迟时间会开始缩短。

热点(窄实体范围的高读取、写入和删除速率)限制了 Datastore 模式的扩缩能力。查看可扩缩设计,并确定应用中的热点。

由于更新单个实体过于频繁或由于事务导致争用。 读取、写入

降低对各个实体的写入速率。

查看事务隔离和一致性以及您如何使用事务。

合并联接查询速度缓慢。 read 例如,使用多个等式过滤条件 (==) 但不受复合索引支持的查询可能会导致合并联接查询速度缓慢。如需提升性能,请为这些查询添加复合索引,请参阅优化索引
返回许多实体的大批量读取操作。 read 使用查询光标拆分大批量读取操作。
最近删除的项目过多。 读取
这大大影响了列出数据库中种类的操作。
如果延迟是由最近的删除操作过多导致的,则问题应会在一段时间后自动解决。如果问题未解决,请与支持团队联系
索引扇出,特别是对于数组属性。 write 查看 展开索引以及您对数组属性的使用方式。

错误代码

本部分列出了您可能遇到的问题,并提供了有关如何解决这些问题的建议。

DEADLINE_EXCEEDED

DEADLINE_EXCEEDED

A deadline was exceeded on the server.

如需解决此问题,请参阅有关排查延迟时间问题的指南

ABORTED

以下情况可能会增加 ABORTED 错误:

  • 实体每秒收到的更新过多。
  • 由于事务重叠导致争用。
  • 流量增加超过 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 错误:

  • 尝试提交已编入索引的属性值超过 1500 字节的实体。此限制适用于媒体资源价值的 UTF-8 编码。
  • 尝试提交未编入索引的属性值大于 1048487 字节(1 MiB - 89 字节)的实体。此限制适用于实体中属性值的总和。例如,如果有四个大小均为 256 KiB 的媒体资源,则会超出此限制。

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

要解决此问题,请执行以下操作:

  • 对于已编入索引的属性值,请将该属性拆分为多个属性。如果可能,请创建不编入索引的媒体资源,并将不需要编入索引的数据移至该媒体资源。
  • 对于未编入索引的属性值,请将该属性拆分为多个属性,或对属性值实现压缩。