事务日志

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 为备份数据库而保留的事务日志数量。此配置项是动态的,可在运行时更改。有关具体操作,请参阅 更新动态设置

默认值为 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><optional unit> <type> <optional space restriction>,其中有效的单位为 KMG,有效的类型为 filessizetxsentrieshoursdays。可选的空间限制是逻辑日志空间限制,如 1G。例如,2 days 1G 将每个数据库的磁盘上逻辑日志空间限制为最多 2 天或 1G。

    表 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

    小时

    保留包含当前时间起指定小时数内提交的任何事务的日志。10 hours 表示日志中至少包含最近 10 小时的事务。

    db.tx_log.rotation.retention_policy=10 hours

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

    db.tx_log.rotation.retention_policy=30 days

    days and size

    保留包含当前时间起指定天数内提交的任何事务且位于已分配日志空间内的日志。

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