跳到主要内容

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 语句 不会 触发删除清理,因此不能用于回收此类空间。