AI工具

排查 Codex logs_2.sqlite 高频日志写入:检查与临时处理 (一)

发布于 2026-07-09 更新于 2026-07-16 #Codex#TRACE日志

概要:

GITHUB ISSUE #28224 提示 Codex 存在 logs_2.sqlite 异常大量写入的问题。

临时措施:向数据库添加 Trigger 以阻止 TRACE/DEBUG 级别日志写入。

当前状态:2026/6/23 该问题已关闭,截止 0.143.0 版本已基本修复。持续观察中。



问题分析

1. 检查本地情况

首先,检查本地的 Codex 目录:
C:\Users\你的用户名\.codex

发现 logs_2.sqlite 的体积已经达到了 66MB

本地数据库大小

2. 可视化查看数据库

为了搞清楚里面到底存了什么,我们需要借助可视化工具:

  1. 安装 DB Browser for SQLite
  2. 打开软件,点击 Open Database,导航并打开 logs_2.sqlite
  3. 切换到 Execute SQL 选项卡准备执行查询。

3. 检查日志分布

输入以下 SQL 语句来统计各个级别的日志数量:

1
SELECT level, COUNT(*) FROM logs GROUP BY level;

点击▶️执行,得到如下结果

查看日志分布1

虽然trace很多,但是目前保留的日志量并不大。

保险起见,先用触发器阻止TRACE日志写入。


临时方案

1. 阻止新TRACE日志写入

操作前必须彻底关闭 Codex 软件!

创建触发器,暂时禁用 TRACEDEBUG 级别日志写入

1
2
3
4
5
6
CREATE TRIGGER IF NOT EXISTS block_useless_logs
BEFORE INSERT ON logs
WHEN NEW.level IN ('TRACE', 'DEBUG')
BEGIN
SELECT RAISE(IGNORE);
END;

点击▶️执行后,点击 Write Changes 将配置保存到硬盘。


2. 清理旧日志

彻底关闭codex后台进程,windows请打开任务管理器搜索codex,node.js,python和终端进程,确认全部进程已关闭。

  • 关掉并重新打开 DB Browser ,重新加载 logs_2.sqlite 文件。

  • 按顺序执行以下SQL语句

1
2
-- 清空日志表
DELETE FROM logs;

Write Changes 存盘

1
2
-- 释放数据库空间
VACUUM;

再次存盘

为何要彻底关闭 Codex 进程
  • 实际操作中: 第一遍执行 DELETE FROM logsVACUUM 后,WAL 文件变小了,但主库大小没有变化;彻底关闭 Codex 后台并重新执行,主库才缩小。

  • 可能的原因: WAL 模式下,DELETE 只释放数据库页,VACUUM 重建出的紧凑数据也要等 checkpoint 后才会写回并截短主库。WAL 变小只能说明期间可能发生过 checkpoint、重置或截断,无法仅凭文件大小确定具体顺序。

  • 关闭codex的作用: 既释放了可能阻止 VACUUM 的写锁,也释放了可能阻止 checkpoint 完成的旧读事务。第二次操作后主库缩小,证明这次 VACUUM 成功且结果最终写回了主库。
    但没有当时的错误信息,无法确定第一遍究竟是 VACUUM 失败,还是 VACUUM 成功但 checkpoint 未完成。

  • 再碰到时重点记录

    • VACUUM 是否提示 database is locked
    • 每条语句执行前后的主库/ WAL 大小
    • PRAGMA wal_checkpoint; 的返回值

后续观察

清理完毕并再使用codex一段时间后,再次执行查询:

1
SELECT level, COUNT(*) FROM logs GROUP BY level;
检查日志分布2

trigger拦截生效。

评论
分享

评论