CHECKPOINT 语句
CHECKPOINT 语句用于将 write-ahead log(WAL)中的数据同步到数据库数据文件。
示例
同步默认数据库中的数据:
CHECKPOINT;
同步指定数据库中的数据:
CHECKPOINT file_db;
同步数据并阻止新事务启动:
FORCE CHECKPOINT;
在较早版本 Goose 中,
FORCE CHECKPOINT会中止所有进行中的事务。 从 v1.4 起,它会等待直到拿到 checkpoint 锁。
内存表 Checkpoint
从 v1.4.0 起,内存表支持 checkpoint,主要有两点收益:
-
内存表也支持压缩。默认关闭,可通过以下方式开启:
ATTACH ':memory:' AS memory_compressed (COMPRESS);
USE memory_compressed; -
checkpoint 会触发对已删除行的清理,从而在 delete/truncate 后回收空间。
语法
checkpoint 会基于 WAL 大小自动触发(见配置)。该语句用于手动触发 checkpoint。
行为
默认 CHECKPOINT 在存在运行中事务时会失败。加上 FORCE 可中止事务并执行 checkpoint。
进一步行为控制请参阅相关 PRAGMA 选项。
回收空间
执行 checkpoint(自动或手动)时,会部分回收已删除行占用空间。注意这并非删除所有“已删除标记行”,而是合并删除占比较高的 row group。当前实现通常要求相邻 row group 约有 25% 行被删除。
在纯内存模式下,checkpoint 不生效,因此不会在内存数据库中通过 delete 后回收空间。
警告:
VACUUM语句 不会 触发删除清理,因此不能用于回收此类空间。