SQL语句执行卡住类问题 本页介绍天翼云TeleDB数据库SQL语句执行卡住类问题。 SQL语句执行卡住问题部分排查思路 平时正常执行的SQL,某个时刻执行了很长时间仍未返回结果。通常有以下几种情况: 1)SQL语句执行可能涉及到不同粒度级别的锁申请和对象锁定,也就是说不同的SQL语句执行时,如果访问相同对象可能会冲突,需要先排查锁冲突情况,SQL被哪些会话阻塞了,,表现为有阻塞会话(pid大于0); 2)SQL语句可能被2pc两阶段事务阻塞,表现为阻塞会话pid0; 3)SQL语句可能被同步事务阻塞,在配置了同步备机,但同步备机有异常或延迟的情况,表现为会话等待事件类型为SyncRep; 4)SQL语句没有被阻塞,可能因统计信息不准确而生成了差的执行计划,执行时间太长。 TeleDB分布式架构,在CN节点上显示为运行中的SQL,可能会在某个DN节点上执行被阻塞,所以需要检查每个DN节点该SQL的执行情况。 SQL语句被其它SQL语句阻塞问题 问题描述 平时正常执行的SQL,执行了很长时间仍未返回结果,通过pgblockingpids(pid)得到有阻塞的会话pid,且pid大于0。 每个CN、DN主节点上执行以下SQL,检查是否有会话阻塞: select pid,pgblockingpids(pid),EXTRACT(EPOCH FROM (now()querystart)), waiteventtype,waitevent,query from pgstatactivity where waiteventtype 'Lock' and pid!pgbackendpid(); 返回如下示例内容,pgblockingpids 返回非0,则表示该进程阻塞了当前SQL; pid pgblockingpids datepart waiteventtype waitevent query +++++ 1302 {11582} 102.134252 Lock transactionid INSERT INTO test (id, c1) VALUES (1, 1) (1 row)