postgres sql查询语句堵塞排查
前言:工作期间遇到查询表的时候sql语句堵塞的情况,这边记录下如何进行排查和处理
查询sub_tasks表的时候,发现存在堵塞情况,该表sub_tasks查询的数据一直不会响应,如下图所示
通过相关语句排查堵塞情况,如下图所示,可以看到相关的堵塞卡在了delete
相关的语句操作上面
SELECT a.pid AS waiting_pid, a.query AS waiting_query, a.state AS waiting_state, b.pid AS blocking_pid, b.query AS blocking_query, b.state AS blocking_state FROM pg_stat_activity a JOIN pg_locks l1 ON a.pid = l1.pid JOIN pg_locks l2 ON l1.locktype = l2.locktype AND l1.database = l2.database AND l1.relation = l2.relation JOIN pg_stat_activity b ON l2.pid = b.pid WHERE l1.granted = false AND l2.granted = true AND a.pid <> b.pid;
通过排查可以知道是该工程中定时清理已完成任务的时候出现的问题,具体问题还未排查
确定了跟当前业务无相关影响,通过相关的sql语句将相关的堵塞任务进行关闭,如下所示
DO $$ DECLARE r record; BEGIN FOR r IN SELECT b.pid AS blocking_pid FROM pg_stat_activity a JOIN pg_locks l1 ON a.pid = l1.pid JOIN pg_locks l2 ON l1.locktype = l2.locktype AND l1.database = l2.database AND l1.relation = l2.relation JOIN pg_stat_activity b ON l2.pid = b.pid WHERE l1.granted = false AND l2.granted = true AND a.pid <> b.pid LOOP -- Terminate the backend process PERFORM pg_terminate_backend(r.blocking_pid); RAISE NOTICE 'Terminated blocking process with PID: %', r.blocking_pid; END LOOP; END $$;
然后重新进行查询的时候已经可以正常查询了,如下图所示
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
2020-01-15 个人感想_2019_01_15
2020-01-15 referer校验不严+cors跨域+API泄露身份令牌组合拳