今天上班qa反馈一个自动化的case没有过,经过排查提示是超时了。
pq: canceling statement due to user request
但是这个sql一直很快,自己测试也就几百毫秒。
SELECT count(*)
FROM "mealplan"
WHERE ((valid_from <= '2023-09-22 10:50:19' AND (valid_to > '2023-09-22 10:50:20' OR valid_to IS NULL)) AND
("mealplan_id" IN (75457720114876416))) and deleted_at is null
自己采取的措施和得出的结论
- 用explain看了一下执行语句,发现前面走的是索引mealplan_id + valid_from.
相当于valid_to和deleted_at是查出数据以后过滤得到的结果。
2.看了一下监控,发现AAS比较高,数据库配置比较低,有些定时周期任务没有必要再sandbox跑的非常频繁,而且表里面有大量无用的数据,所以清理了一下无用的数据,并降低sandbox执行的频率,避免资源浪费。
- 和同事沟通发现他之前删除了一个带有deleted_at的索引,线上环境没有这个索引,是没有影响的。但是在sandbox环境很多数据都是删除的,所以这个deleted_at联合索引就很有必要了,所以把这个联合索引加回来。
网友评论