概要:
GITHUB ISSUE #28224 提示 Codex 存在 logs_2.sqlite 异常大量写入的问题。
临时措施:向数据库添加 Trigger 以阻止
TRACE/DEBUG级别日志写入。
当前状态:2026/6/23 该问题已关闭,截止 0.143.0
如何检查版本?版本已基本修复。持续观察中。在系统终端运行:
codex --version命令输出中的数字就是当前安装的 CLI 版本。
先关闭 VS Code 和单独打开的 Codex CLI ,避免混入其他会话。
- 打开 Codex 桌面 App。
- 新建对话。随便发送一句内容,等待它回复完成。
- 打开 PowerShell,输入以下命令:
$f=Get-ChildItem "$HOME\.codex\sessions" -Recurse -Filter "rollout-*.jsonl"|Sort-Object LastWriteTime -Descending|Select-Object -First 1;(Get-Content $f.FullName -TotalCount 1|ConvertFrom-Json).payload.cli_version命令输出中的数字就是当前 Codex App 内置的 CLI 版本,Codex 会把它写入每次会话的
session_meta.cli_version
问题分析
1. 检查本地情况
首先,检查本地的 Codex 目录:C:\Users\你的用户名\.codex
发现 logs_2.sqlite 的体积已经达到了 66MB。
2. 可视化查看数据库
为了搞清楚里面到底存了什么,我们需要借助可视化工具:
- 安装 DB Browser for SQLite。
- 打开软件,点击 Open Database,导航并打开
logs_2.sqlite。 - 切换到 Execute SQL 选项卡准备执行查询。
3. 检查日志分布
输入以下 SQL 语句来统计各个级别的日志数量:
1 | SELECT level, COUNT(*) FROM logs GROUP BY level; |
点击▶️执行,得到如下结果
虽然trace很多,但是目前保留的日志量并不大。
保险起见,先用触发器阻止TRACE日志写入。
临时方案
1. 阻止新TRACE日志写入
操作前必须彻底关闭 Codex 软件!
创建触发器,暂时禁用 TRACE 和 DEBUG 级别日志写入
1 | CREATE TRIGGER IF NOT EXISTS block_useless_logs |
点击▶️执行后,点击 Write Changes 将配置保存到硬盘。
2. 清理旧日志
彻底关闭codex后台进程,windows请打开任务管理器搜索codex,node.js,python和终端进程,确认全部进程已关闭。
关掉并重新打开 DB Browser ,重新加载 logs_2.sqlite 文件。
按顺序执行以下SQL语句
1 | -- 清空日志表 |
Write Changes 存盘
1 | -- 释放数据库空间 |
再次存盘
为何要彻底关闭 Codex 进程
实际操作中: 第一遍执行
DELETE FROM logs和VACUUM后,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; |
trigger拦截生效。
评论