故障排除
此页面提供了使用 Neo4j Aura 时可能遇到的几个常见问题的解决方案。
无论问题是什么,始终建议查看Aura 查询日志以监控流程并验证任何问题。
查询性能
MemoryLimitExceededException
在 Aura 实例的常规操作过程中,您有时可能会看到某些查询因以下错误而失败:
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 BY
或DISTINCT
)的情况下运行相同的查询。此外,如果可能,请在您的应用程序中处理此排序或唯一性。
如果删除ORDER BY
或DISTINCT
子句不能解决问题,则此错误的主要缓解措施是执行以下一项或多项操作:
-
在您的代码中处理此异常,并准备在出现间歇性错误时重试。请记住,查询无论如何都可能成功。
-
重新设计相关的查询以对其进行优化。
-
使用
EXPLAIN
或PROFILE
来查看计划(有关查询调整的更多信息)。 -
在 Cypher Shell 中使用
PROFILE
检查查询的总体内存占用。输出将包括内存消耗信息、查询结果(如果有)和执行计划。在以下示例中,消耗的内存为 11,080 字节
-
-
增加 Aura 部署的实例大小以获取更多资源。
-
减少对资源依赖较重的查询的并发性,以获得更好的成功机会。
如果在从 CSV 文件加载数据时发生此错误,请使用 |
有关内存管理的进一步阅读,请参阅内存配置注意事项。
Neo4j Admin 数据库上传错误
database upload
命令是在 Neo4j Admin 版本 5 中引入的,取代了 Neo4j Admin 版本 4.4 及更早版本中存在的push-to-cloud
命令。以下解决方案与这两个命令相关。
LegacyIndexes
当尝试在存在原生LegacyIndexes
的情况下使用database upload
时,请求可能会因以下错误而失败:
ERROR: Source dumpfile has legacy indexes enabled, which we do not support.
User needs to manually follow instructions in neo4j logs to upgrade indexes.
- 解决方案
-
要解决此问题,请按照以下步骤操作:
-
确保您至少使用 Neo4j 版本 4.4 或更高版本。有关更多信息,请参阅升级和迁移。
-
在您的本地图中,使用以下命令获取索引及其类型的列表。这还将提供删除然后重新创建索引的顺序命令列表
返回索引及其类型的列表CALL db.constraints() YIELD description UNWIND ["DROP", "CREATE"] AS command RETURN command + " " + description
-
在 Neo4j 浏览器中,选择浏览器设置下的“启用多语句查询编辑器”选项。
-
从第 2 步获取命令列表,并将它们复制到浏览器中的一个多查询列表中,并运行这些查询。
-
重新创建索引后,再次尝试
database upload
命令。
-
LogicalRestrictions
当您要上传的存储库超过数据库的逻辑限制时,可能会收到此错误。
- 解决方案
-
-
删除节点和关系以确保数据在实例的指定限制内,然后再次尝试上传。
-
如果您确信没有超过这些限制,请向我们的客户支持团队提交工单。
-
驱动程序集成
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(....)
快速创建会话可能会超过数据库的最大并发连接限制,从而导致在创建更多会话时出现“会话已过期”错误。 |