事务日志记录

Neo4j 会跟踪对每个数据库的所有写入操作,以确保数据一致性并启用恢复。

事务日志文件

事务日志文件包含一系列记录,其中包含对特定数据库所做的所有更改,作为每个事务的一部分,包括数据、索引和约束。

事务日志有多种用途,包括提供差异备份和支持集群操作。至少,对于任何给定配置,都会保留最新的非空事务日志。请注意,事务日志与日志监控无关。

事务日志记录配置是按数据库设置的,可以使用以下配置设置进行配置

配置事务日志位置

默认情况下,数据库的事务日志位于 *<NEO4J_HOME>/data/transactions/<database-name>*。

这些文件夹所在的根目录由 server.directories.transaction.logs.root 配置。该值是路径。如果为相对路径,则从 `server.directories.data` 解析。为了获得最佳性能,建议将事务日志配置为存储在专用设备上。

配置事务日志预分配

您可以使用参数 db.tx_log.preallocate 指定 Neo4j 是否应尝试预先分配逻辑日志文件。默认情况下,它是 true。日志预分配通过确保有空间容纳新生成的文件并避免文件级碎片来优化文件系统。此配置设置是动态的,可以在运行时更改。

配置事务日志轮换大小

您可以使用 db.tx_log.rotation.size 指定单个事务日志文件可以粗略占用多少空间。默认情况下,它设置为 256 MiB,这意味着事务日志文件达到此大小后,它将被轮换,并创建一个新的文件。最小接受值为 128K(128 KiB)。此配置设置是动态的,可以在运行时更改。

此设置会影响以下所有检查点策略可以回收多少空间。

要回收给定文件,事务日志的最新检查点必须存在于另一个文件中。因此,如果您有一个巨大的事务日志,那么您的最新检查点很可能在同一个文件中,这使得无法回收该文件。有关检查点的更多信息,请参阅 控制事务日志修剪

配置事务日志保留策略

不支持手动删除事务日志文件。

您可以使用参数 db.tx_log.rotation.retention_policy 控制 Neo4j 保留多少个事务日志来备份数据库。此配置设置是动态的,可以在运行时更改。有关如何执行此操作的更多信息,请参阅 更新动态设置

在 Neo4j 5.12 之前,默认值设置为 2 days,这意味着 Neo4j 保留包含 2 天内提交的任何事务的逻辑日志,并修剪仅包含超过 2 天的事务的日志。

从 Neo4j 5.9 开始,您可以选择添加对要保留的日志大小的基于周期的限制。例如,2 days 1G 修剪仅包含超过 2 天的事务或大小大于 1G 的逻辑日志。

从 Neo4j 5.13 开始,默认值更改为 2 days 2G,这意味着 Neo4j 保留包含从当前时间起 2 天内提交的任何事务的逻辑日志,以及在分配的日志空间 (2G) 内的逻辑日志。

配置日志保留策略的其他可能方法是

  • db.tx_log.rotation.retention_policy=true|keep_all — 无限期保留事务日志。

    此选项不建议使用,因为它会导致存储使用量无限增长。旧的事务日志无法通过外部作业安全地归档或删除,因为安全日志修剪需要了解最新的成功检查点。

  • db.tx_log.rotation.retention_policy=false|keep_none — 仅保留最新的非空日志。

    只有在检查点完成后才会调用日志修剪,以确保至少有一个检查点并指向事务日志数据中的有效位置。实际上,这意味着在检查点之间创建的所有事务日志都会保留一段时间,并且只有在检查点完成后,修剪策略才会删除它们。有关如何加速检查点的更多详细信息,请参阅 配置日志修剪。要强制执行检查点,请运行过程 CALL db.checkpoint()

    此选项不建议在生产企业版环境中使用,因为 差异备份 依赖于自上次备份以来的事务日志的存在。

  • <number><可选单位> <类型> <可选空间限制>,其中有效单位为 KMG,有效类型为 filessizetxsentrieshoursdays。有效的可选空间限制是逻辑日志空间限制,例如 1G。例如,2 days 1G 将数据库的逻辑日志空间限制在最多 1G,最长 2 天。

    表 1. 可用于控制日志保留的类型
    类型 描述 示例

    files

    修剪后要保留的最近事务日志文件的数量。

    db.tx_log.rotation.retention_policy=10 files

    size

    修剪后要保留的事务日志文件的最大磁盘大小。例如,500M size 会保留至少 500M 的文件。

    db.tx_log.rotation.retention_policy=300M size

    txs or entries

    修剪后要保留的事务数量(在文件中),无论文件计数或大小。txsentries 是同义词。如果设置了此策略,则会保留每个数据库的 500k 个最新事务,并修剪任何更旧的事务。

    db.tx_log.rotation.retention_policy=500k txs

    hours

    保留包含从当前时间起指定小时内提交的任何事务的日志。10 hours 的值确保日志中至少存在 10 小时的交易记录。

    db.tx_log.rotation.retention_policy=10 hours

    days

    保留包含从当前时间起指定天内提交的任何事务的日志。

    db.tx_log.rotation.retention_policy=30 days

    days and size

    保留包含从当前时间起指定天内提交的任何事务的日志,以及在分配的日志空间内。

    db.tx_log.rotation.retention_policy=2 days 1G