You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何查询PostgreSQL中某行数据最后一次被查询访问的时间

无文档遗留JSON常量表使用情况排查方案

第一阶段:代码层面全量排查

  • 拉取全量业务代码仓库,针对常量表的表名、待确认行的唯一标识(比如主键ID、JSON字段里的唯一key值)做全局检索,注意区分大小写、拼写变体
  • 重点排查数据库操作层(DAO层、ORM映射文件)的SQL语句,尤其注意拼接动态SQL、硬编码的查询语句,是否有涉及该行数据的查询逻辑
  • 检查代码中所有JSON解析相关的逻辑,确认是否有读取该行JSON字段内特定key的代码段,关联的业务场景是否还在迭代或对外提供服务
  • 若存在微服务、多系统调用的情况,同步排查跨服务的接口定义、入参出参是否有涉及该行常量的传递逻辑

第二阶段:数据库层面流量排查

  • 开启数据库的慢查询日志/全量查询日志(注意调整日志采集阈值,避免占用过多磁盘IO),针对该常量表的表名设置过滤规则,持续采集1-2个完整业务周期(覆盖日常流量、峰值流量、定时任务执行周期)的查询请求
  • 若使用的是MySQL数据库,可以执行SELECT * FROM performance_schema.table_io_waits_summary_by_table WHERE OBJECT_NAME = '你的常量表名';查询统计周期内该表的IO操作记录,若业务已经运行较长时间未重启,该统计结果可以覆盖较长时间的访问情况
  • 针对待确认的目标行,可以临时添加触发器,记录每次访问记录:
DELIMITER //
CREATE TRIGGER record_const_row_access BEFORE SELECT ON 你的常量表名
FOR EACH ROW
BEGIN
    IF OLD.主键ID = 目标行ID THEN
        INSERT INTO access_log (row_id, access_time, access_user) VALUES (OLD.主键ID, NOW(), USER());
    END IF;
END //
DELIMITER ;

注意:触发器仅适用于访问量较低的业务场景,高并发场景下会增加数据库性能开销,验证完成后记得及时删除触发器

  • 若数据库支持审计功能,直接开启对应表的访问审计规则,可以直接获取所有访问该表、访问特定行的用户、SQL、时间等信息

第三阶段:业务灰度验证

  • 先在测试环境将目标行数据修改为异常值,跑全量自动化测试用例,观察是否有用例报错
  • 若没有自动化测试覆盖,先在预发环境注释/删除目标行,观察1-3天是否有业务报错、日志异常、用户反馈
  • 确认预发无异常后,可以在线上环境先将目标行的JSON内容修改为和原值一致的冗余备份,标记为待下线状态,再观察7-14天,确认无任何访问记录后再正式删除

内容的提问来源于stack exchange,提问作者Irfandy J.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 22:18:04