故障排除

此页面提供了使用 Neo4j Aura 时可能遇到的几个常见问题的解决方案。

无论问题是什么,始终建议查看Aura 查询日志以监控流程并验证任何问题。

查询性能

MemoryLimitExceededException

在 Aura 实例的常规操作过程中,您有时可能会看到某些查询因以下错误而失败:

MemoryLimitExceededException 错误
org.neo4j.memory.MemoryLimitExceededException: The allocation of an extra 8.3 MiB would use more than the limit 278.0 MiB.
Currently using 275.1 MiB. dbms.memory.transaction.global_max_size threshold reached

org.neo4j.memory.MemoryLimitExceededException 配置充当安全措施,限制分配给所有事务的内存数量,同时保留 Aura 实例的常规操作。类似地,属性 dbms.memory.transaction.global_max_size 也旨在保护 Aura 实例免受任何 OOM(内存不足)异常的影响并提高弹性。它在 Aura 中已启用,无法禁用。

但是,所有事务的已测堆使用量仅为估计值,可能与实际数量不同。估算算法依赖于保守的方法,这可能导致内存使用量的过高估计。在这种情况下,所有贡献对象的标识都未知,并且不能假定为共享。

解决方案

我们建议在您的应用程序代码中处理此错误,因为它可能是间歇性的。

在对长列表使用UNWIND或扩展可变长度或最短路径模式时,最有可能发生高估。计算结果路径之间共享的许多关系可能是估算算法缺乏精度的起因。

为了避免这种情况,请尝试在不使用排序操作(如ORDER BYDISTINCT)的情况下运行相同的查询。此外,如果可能,请在您的应用程序中处理此排序或唯一性。

如果删除ORDER BYDISTINCT子句不能解决问题,则此错误的主要缓解措施是执行以下一项或多项操作:

  • 在您的代码中处理此异常,并准备在出现间歇性错误时重试。请记住,查询无论如何都可能成功。

  • 重新设计相关的查询以对其进行优化。

    • 使用EXPLAINPROFILE来查看计划(有关查询调整的更多信息)。

    • 在 Cypher Shell 中使用PROFILE检查查询的总体内存占用。输出将包括内存消耗信息、查询结果(如果有)和执行计划。在以下示例中,消耗的内存为 11,080 字节

      Plan summary
  • 增加 Aura 部署的实例大小以获取更多资源。

  • 减少对资源依赖较重的查询的并发性,以获得更好的成功机会。

如果在从 CSV 文件加载数据时发生此错误,请使用apoc.periodic.iterate导入数据,并为batch_size参数使用相对较小的数字。有关更多信息,请访问客户支持门户

有关内存管理的进一步阅读,请参阅内存配置注意事项

Neo4j Admin 数据库上传错误

database upload命令是在 Neo4j Admin 版本 5 中引入的,取代了 Neo4j Admin 版本 4.4 及更早版本中存在的push-to-cloud命令。以下解决方案与这两个命令相关。

LegacyIndexes

当尝试在存在原生LegacyIndexes的情况下使用database upload时,请求可能会因以下错误而失败:

LegacyIndexes 错误
ERROR: Source dumpfile has legacy indexes enabled, which we do not support.
User needs to manually follow instructions in neo4j logs to upgrade indexes.
解决方案

要解决此问题,请按照以下步骤操作:

  1. 确保您至少使用 Neo4j 版本 4.4 或更高版本。有关更多信息,请参阅升级和迁移

  2. 在您的本地图中,使用以下命令获取索引及其类型的列表。这还将提供删除然后重新创建索引的顺序命令列表

    返回索引及其类型的列表
    CALL db.constraints() YIELD description
    UNWIND ["DROP", "CREATE"] AS command
    RETURN command + " " + description
  3. 在 Neo4j 浏览器中,选择浏览器设置下的“启用多语句查询编辑器”选项。

  4. 从第 2 步获取命令列表,并将它们复制到浏览器中的一个多查询列表中,并运行这些查询。

  5. 重新创建索引后,再次尝试database upload命令。

InconsistentData

当 Neo4j Aura 由于不一致而无法安全地加载提供的数据时,此错误消息可能会触发。

解决方案

如果您遇到此错误,请向我们的客户支持团队提交工单。

UnsupportedStoreFormat

如果您要上传的存储库位于 Neo4j 版本中,而该版本在 Neo4j Aura 中不受直接支持,则可能会收到此错误。

解决方案
  1. 升级您的数据库。确保您使用 Neo4j 4.4 或更高版本。

  2. 如果您在升级过程中遇到问题,请向我们的客户支持团队提交工单。

LogicalRestrictions

当您要上传的存储库超过数据库的逻辑限制时,可能会收到此错误。

解决方案
  1. 删除节点和关系以确保数据在实例的指定限制内,然后再次尝试上传。

  2. 如果您确信没有超过这些限制,请向我们的客户支持团队提交工单。

Fallback

当上传的文件无法识别为有效的 Neo4j 导出文件时,可能会触发此错误。

解决方案
  1. 检查文件并重试。

  2. 如果您确信要上传的文件是正确的,请向我们的客户支持团队提交工单。

驱动程序集成

JavaScript 路由表错误

JavaScript 驱动程序版本 4.4.5 及更高版本假定存在数据库连接。当连接失败时,两个最常见的错误消息是“会话已过期”或路由表错误

路由表错误
Neo4jError: Could not perform discovery.
No routing servers available.
Known routing table: RoutingTable[database=default database, expirationTime=0, currentTime=1644933316983, routers=[], readers=[], writers=[]]

当未定义默认数据库时,也会遇到此错误。

解决方案

在创建会话对象之前验证连接,并在驱动程序定义中指定默认数据库。

验证连接
const session = driver.session({ database: "neo4j" })
driver.verifyConnectivity()

let session = driver.session(....)

快速创建会话可能会超过数据库的最大并发连接限制,从而导致在创建更多会话时出现“会话已过期”错误。