⌘+k ctrl+k
1.4 (LTS)
搜索快捷键 cmd + k | ctrl + k
CHECKPOINT 语句

CHECKPOINT 语句将预写式日志 (WAL) 中的数据同步到数据库数据文件中。

示例

同步默认数据库中的数据

CHECKPOINT;

同步指定数据库中的数据

CHECKPOINT file_db;

同步数据并阻止新的事务开始

FORCE CHECKPOINT;

在 DuckDB 的早期版本中,FORCE CHECKPOINT 会中止任何正在进行的事务。从 v1.4 版本开始,它会等待直到能够获取检查点锁为止。

内存表检查点 (Checkpointing In-Memory Tables)

从 v1.4.0 版本开始,内存表支持检查点功能。这具有两个主要优势:

  • 内存表也支持压缩。该功能默认处于禁用状态——您可以使用以下方式开启:

    ATTACH ':memory:' AS memory_compressed (COMPRESS);
    USE memory_compressed;
    
  • 执行检查点会触发已删除行的清理 (vacuuming),从而允许在删除/截断操作后回收空间。

语法

检查点操作会根据 WAL 大小自动触发(请参阅配置)。此语句用于手动执行检查点操作。

行为

如果存在任何正在运行的事务,默认的 CHECKPOINT 命令将会失败。包含 FORCE 将中止所有事务并执行检查点操作。

另请参阅相关的 PRAGMA 选项以了解进一步的行为修改。

回收空间

在执行检查点(自动或其他方式)时,已删除行所占用的空间会被部分回收。请注意,这并不会移除所有已删除的行,而是合并那些包含大量已删除数据的行组。在当前的实现中,这要求相邻行组中有约 25% 的行被删除。

当在内存模式下运行时,检查点操作无效,因此它不会在内存数据库中删除数据后回收空间。

警告:VACUUM 语句不会触发删除数据的清理,因此无法回收空间。

© 2025 DuckDB 基金会,阿姆斯特丹,荷兰
行为准则 商标使用指南