事务日志记录
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()
。不建议在生产 Enterprise Edition 环境中使用此选项,因为 差异备份 依赖于自上次备份以来事务日志的存在。
-
<数字><可选单位> <类型> <可选空间限制>
,其中有效单位为K
、M
和G
,有效类型为files
、size
、txs
、entries
、hours
和days
。有效的可选空间限制是逻辑日志空间限制,例如1G
。例如,2 days 1G
将每个数据库磁盘上的逻辑日志空间限制为最多 2 天的 1G。表 1. 可用于控制日志保留的类型 类型 描述 示例 文件数
修剪后保留的最新事务日志文件的数量。
db.tx_log.rotation.retention_policy=10 files
大小
修剪后保留的事务日志文件的最大磁盘大小。例如,
500M size
会保留至少 500M 大小的文件。db.tx_log.rotation.retention_policy=300M size
事务数或条目数
修剪后保留的事务(文件中)数量,不考虑文件计数或大小。
txs
和entries
是同义词。如果设置,此策略会保留每个数据库中最新的 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
天数和大小
保留包含在当前时间指定天数内以及在分配的日志空间内提交的任何事务的日志。
db.tx_log.rotation.retention_policy=2 days 1G