返回 30 分钟教程

Codex 持续写入
logs_2.sqlite?
先检查,再决定是否处理

电脑变卡、磁盘一直忙,不等于一定是这个问题。先用四次采样确认,再决定要不要动数据库。

排查记录 · 约 7 分钟 · 2026-07-14 更新

我遇到过 Codex 日志数据库持续写入,使用时间越长,电脑越容易发热、卡顿。OpenAI Codex 仓库里也有用户报告类似现象,可参考 Issue #17320Issue #20213

这更像是部分 Codex 客户端或 app-server 版本的日志持久化问题,不是 GPT 模型本身的问题,也不是每台电脑都会遇到。正常日志本来就会写入;只有在没有任务时仍连续、快速增长,才值得继续排查。

先看自己有没有这些现象

如果没有这些现象,不用为了“预防”去改数据库。想检查,就新建一个 Codex 对话,把下面整段粘贴到对话框:

先只检查,不修改任何文件。请定位当前 Codex 使用的 logs_2.sqlite 和对应的 -wal 文件:
1. 记录数据库和 WAL 当前大小;
2. 在没有其他 Codex 任务运行时,每隔 10 秒采样一次,共 4 次;
3. 检查 logs 表近期记录是否主要为 TRACE 级别;
4. 报告文件是否持续增长、增长速度和判断依据。
不要创建 trigger,不要 checkpoint,不要删除或截断任何文件。

确认异常后,先备份再临时拦截

这不是官方修复。它会阻止 logs 表继续保存本地日志,可能减少以后排查问题所需的诊断信息。数据库路径、表结构或备份只要有一项不对,就应停止。

如果检查结果明确显示持续异常增长,再把下面整段发到同一个 Codex 对话。执行前关闭其他 Codex 任务,避免数据库正被多个进程占用:

我已确认 logs_2.sqlite 在持续异常增长,准备使用临时 workaround。请按下面顺序操作:
1. 再确认目标文件属于当前 Codex 数据目录;
2. 使用 Python sqlite3 backup API 创建带时间戳的备份,并对备份运行 PRAGMA integrity_check;
3. 备份有效后,执行 CREATE TRIGGER IF NOT EXISTS block_log_inserts BEFORE INSERT ON logs BEGIN SELECT RAISE(IGNORE); END; 创建临时拦截 trigger;
4. 执行 PRAGMA wal_checkpoint(TRUNCATE);
5. 每隔 10 秒采样 MAX(id) 和 WAL 大小,共 4 次,确认不再持续增长;
6. 报告备份路径、trigger 定义、采样结果和撤销方法。
如果数据库被占用、表结构不符、备份失败或 integrity_check 不是 ok,立即停止。不要删除数据库或 WAL,也不要强制结束其他进程。

不要只看“命令执行成功”。最后四次采样里,MAX(id) 和 WAL 大小不再持续增长,才算临时拦截生效。备份路径也要自己记下来。

更新后想恢复日志,删掉 trigger 即可

Codex 更新后,可以先撤销临时办法,再跑一次普通任务复测。新建对话,把下面整段粘贴进去:

请恢复 Codex 日志写入:先确认当前数据库和之前的备份路径,再执行 DROP TRIGGER IF EXISTS block_log_inserts;,执行一次 PRAGMA wal_checkpoint(TRUNCATE),然后运行一条普通 Codex 任务并检查 logs 表是否恢复新增记录。只处理这个 trigger,不恢复整个数据库;如果验证失败,停止并报告,不要删除任何文件。

简单说:没有异常增长就别处理;确认异常才备份和临时拦截;版本更新后再撤销、复测。这样比直接删数据库安全得多。

返回 30 分钟教程