Files
Jyotisha/docs/tasks/PROGRESS-node-runtime-resources-20261013.md
T
jesse-uxandGrok (agent loop) 4c3485bc23 服务器长跑不再堆积取消监听,数据库少走几趟。
报告工人的等待到点就摘掉取消监听。本地数据库缓存表结构,并把设置身份合成一条语句,对照通过后默认打开,写成 off 仍走原来的语句。交付、重算和限流的内存表会过期。登录读缓存默认关闭,要开再设 IDENTITY_SESSION_COOKIE_CACHE=on。

自测:tsc 通过,lint 0 error,点名测试 134 通过,test:db 开关关和开都只有已知的 13 条失败,往返 49 降到 32。

Co-Authored-By: Grok (agent loop)
2026-10-14 03:32:39 +08:00

4.2 KiB
Raw Blame History

进度 · 服务器内存与数据库往返(2026-10-13)

issue #58。分支 codex/node-runtime-resources-20261013。

任务书基线写的是 77057a819,计划评论里的基线是 2994588ad4d858dead4835943e5883c5aa2b03f8。本分支实际从当时的 origin/staging 66cd60081f37a57680274633fcb3fb942d01bb2f 拉出。没有因此停下来问产品,改动仍按任务书做。

做了什么

  • 报告工人的等待:计时器到点就摘掉取消监听。引导打分里同一段等待也摘掉。空转不再往进程上堆监听。
  • 本地数据库:列、主键、函数签名缓存 300 秒;设置角色和两条身份合成一条语句。开始和提交仍分开。两个开关默认打开,写成 off 时语句顺序与改前一致。
  • 三张内存表:交付记录超过 60 秒删除,最多 1 万条;重算记录超过 6 小时删除,最多 5 千条;限流按见过的最大窗口清理已出窗的键。
  • 登录读缓存:只有 IDENTITY_SESSION_COOKIE_CACHE=on 才缓存 300 秒。默认关闭。

不做的

只读、又没有身份时省掉事务:不做。那种做法只能用会话级角色,归还连接前再清。往返数不降,而且一旦没清掉,下一次请求会带着上一次的角色。违反「连接还回池子时不能带着角色或身份」。

begin 没有并进一条多语句查询。

语义变化

同一道校正题、同一份证据,6 小时后或因为超过 5 千条被挤出后,可能再重算一次。这比「进程重启后才会再算」更收敛。60 秒内的交付去重、窗口内的限流允许或拒绝,都没有改。

基线失败

修之前的等待写法,在第 200 次空转时取消信号上还有 199 个监听。同形脚本输出:listenersAt200=199,assertion failed: 199 !== 0。修之后的测试断言是 0,并且通过。

登录读取的调用点

敏感,每次跳过缓存:

  • 改密码:frontend/src/app/api/account/password/route.ts
  • 注销账户:frontend/src/app/api/account/deletion/route.ts
  • 全部后台入口:frontend/src/lib/admin/auth.ts

其余业务接口走 createServerSupabaseClient(),不带跳过参数。开关打开后,这些普通读取可以走 300 秒缓存。

改邮箱、两步验证、后台插件自带的敏感入口本来就会重新读库,这次没改。咨询里检查「正在注销」的那次调用,以及后台查封禁的语句,都没有改成缓存。

对照结论

详见 docs/testing/node-runtime-resources-ab-20261013.md。两个数据库开关一起:往返 49 → 32(低于 70%),耗时中位数 75.84 → 36.48 毫秒(下降 51.9%),返回内容一致。npm run test:db 开关关、开关开各一轮,都是 81 项、通过 68、失败 13、取消 0。失败名称与 tools/agent-loop/windows-known-failures.txt 的 13 条相同,没有多出来的。运行器因此退出码是 1,这 13 条是 Windows 上原有的。两个数据库开关默认打开。

登录读缓存的查库次数在测试里从 3 降到 1,但没有对真实身份库做耗时对照,默认保持关闭。要打开,把 IDENTITY_SESSION_COOKIE_CACHE 设成 on。

网页容器已经用 env 文件读环境变量,所以这三个名字不必改 Compose。

自测

检查 命令 结果
类型 tsc --noEmit -p frontend 通过,退出码 0
规范 npm run lint(在 frontend) 0 error,125 条原有 warning,未改
本单测试 tsx --test 任务书点名的文件加登录缓存测试 134 通过,0 失败,0 取消
真库身份 database-local-postgres-session-setup.test.ts 1 通过。事务内角色和身份生效,连接归还后再借出时身份已空
数据库套件 npm run test:db,两开关先关后开 各 81 / 通过 68 / 失败 13 / 取消 0,名称与已知清单一致
往返对照 scripts/bench-local-pg-roundtrips.ts 见上,payloadMismatch false

没有跑前端全量 npm test、Python 快速门、next build。生产内存曲线要等部署后看。真机两台设备改密码的步骤在 docs/testing/node-runtime-resources-20261013.md,登录缓存默认关着,那份清单的第 2 步要先把开关打开才看得到。