云端数据管理#
在云端管理数据时需要注意两个问题:
- 内存使用:处理大量数据的复杂工作流可能会超出 n8n 的内存限制。一旦发生这种情况,实例可能会崩溃并无法访问。
- 数据存储:根据您的执行设置和执行量,n8n 数据库的大小可能不断增长,最终耗尽存储空间。
为避免这些问题,n8n 建议您在设计工作流时注重内存效率,并避免保存不必要的数据。
各个云端套餐的内存限制#
当前套餐:
- 试用版(Trial):320MiB RAM,10 millicore CPU(可突发)
- 入门版(Starter):320MiB RAM,10 millicore CPU(可突发)
- 专业版-1(10k 次执行):640MiB RAM,20 millicore CPU(可突发)
- 专业版-2(50k 次执行):1280MiB RAM,80 millicore CPU(可突发)
- 企业版(Enterprise):4096MiB RAM,80 millicore CPU(可突发)
旧版套餐:
- 起步版(Start):320MiB RAM,10 millicore CPU(可突发)
- 强力版(Power):1280MiB RAM,80 millicore CPU(可突发)
n8n 为每个实例提供最多 100GB 的数据存储空间。
如何减少工作流中的内存消耗#
您构建工作流的方式会影响其执行时的数据占用量。尽管以下建议并非适用于所有场景,但它们提供了一套最佳实践的基础,有助于避免超出实例内存限制:
- 将处理的数据拆分为更小的批次(chunks)。例如,不要每次执行都获取 10,000 行数据,而应每次处理 200 行。
- 尽量避免使用代码节点(Code node)。
- 在处理大量数据时,避免手动触发执行。
- 将工作流拆分为多个子工作流(sub-workflows),并确保每个子工作流仅向父工作流返回有限数量的数据。
将工作流拆分起初看起来可能有些违反直觉,因为通常需要额外添加至少两个节点:用于将项目拆分为较小批次的 Loop Over Items 节点,以及用于启动子工作流的 Execute Workflow 节点。 然而,只要你的子工作流为每个批次完成主要处理任务,并仅向主工作流返回少量结果数据,这种方式就能有效降低内存消耗。原因是子工作流在运行时仅将当前批次的数据保留在内存中,处理完成后内存即可释放。
请注意,n8n 自身运行也需要占用内存。平均而言,软件本身大约会使用 180MiB 的 RAM。 与用户界面(UI)的交互也会消耗内存。如果在执行大量任务的同时操作工作流 UI,可能会导致内存使用超出限制。
如何在 Cloud 上管理执行数据#
执行数据包括节点数据、参数、变量、执行上下文以及二进制数据引用(binary data references)。这类数据以文本形式存储。
二进制数据(Binary data)是指 n8n 无法以纯文本表示的非文本数据,例如文件和媒体内容,如图片、文档、音频文件和视频等。其体积远大于文本数据。
如果一个工作流处理大量数据且已通过测试阶段,停止保存成功执行记录是一个不错的选择。
你可以通过以下两种方式控制 n8n 在数据库中存储的执行数据量:
在管理员仪表板中:
- 从你的工作区或编辑器进入 Admin Panel(管理面板)。
- 选择 Manage(管理)。
- 在 Executions to Save(要保存的执行)中取消选中你不希望记录的执行类型。
在工作流设置中:
- 点击 Options !Options menu 菜单。
- 选择 Settings(设置),n8n 将打开 Workflow settings(工作流设置)对话框。
- 将 Save successful production executions(保存成功的生产环境执行)更改为 Do not save(不保存)。
Cloud 数据清理与内存溢出预防#
自动数据清理#
n8n 会在达到最大存储限制或超过保留期限时自动清理执行日志,以先发生者为准。清理始终从最旧的日志开始,具体限制取决于你的 Cloud 套餐计划:
- Start 和 Starter 套餐:最多保存 2500 次执行,日志保留 7 天;
- Pro 和 Power 套餐:最多保存 25000 次执行,日志保留 30 天;
- Enterprise 套餐:最多保存 50000 次执行,执行日志保留时间无限制。
手动数据清理#
尽管有自动清理机制,较重的执行记录和使用场景仍可能超出数据库容量。在这种情况下,n8n 将手动清理数据以保护实例的稳定性。
- 当某个实例的磁盘使用率达到 85% 时,告警系统会向 n8n 发出警告。
- n8n 开始清理执行数据。具体操作是:对实例(包括工作流、用户、凭据和执行数据)进行备份,然后在恢复时不包含执行数据。
由于该过程涉及人工操作,告警系统并非完美。如果警告在非工作时间触发,或数据增长速度过快,则可能没有足够时间在磁盘空间耗尽前完成数据清理。