SQL语句执行卡住类问题 SQL语句被2pc事务阻塞问题 问题描述 在配置了同步备机,同步备机有异常或延迟的情况下,SQL语句被同步事务阻塞,表现为阻塞会话pid0; 每个CN、D主节点上执行以下SQL,检查是否为同步复制: select pid,pgblockingpids(pid),EXTRACT(EPOCH FROM (now()querystart)), waiteventtype,waitevent,query from pgstatactivity where waiteventtype 'Lock' and pid!pgbackendpid(); 返回以下如内容,pgblockingpids0,则说明被2pc事务阻塞。 datname pid pgblockingpids datepart waiteventtype waitevent query ++++++ teledb 31742 {0} 1385.124791 Lock transactionid Remote Subplan (1 row) 可能影响 发现SQL长时间被2pc事务阻塞,说明有2pc残留,需要及时处理,否则会导致相关SQL持续被阻塞。 解决步骤 参考2pc残留类问题处理,清理2pc残留。 SQL语句被同步事务阻塞问题 问题描述 在配置了同步备机,同步备机有异常或延迟的情况下,SQL语句被同步事务阻塞,表现为会话等待事件类型为SyncRep; 每个CN、D主节点上执行以下SQL,检查是否为同步复制: teledb select currentsetting('synchronouscommit') as synchronouscommit, currentsetting('synchronousstandbynames') as synchronousstandbynames, array((select syncstate from pgstatreplication)) as syncstate; synchronouscommit synchronousstandbynames syncstate ++ on FIRST 1 (172.16.16.16:11300) {sync} (1 row) 如果返回值为synchronouscommit on、synchronousstandbynames 不为空则表示主备为同步复制模式,此时syncstate 值必需为 sync,否则无法执行 ddl 或者更新的 dml 操作。 每个CN、D主节点上执行以下SQL,检查是否有同步复制等待: select query,waiteventtype,waitevent,EXTRACT(EPOCH FROM (now()querystart)) from pgstatactivity where waitevent'SyncRep'; 如果返回有waitevent'SyncRep'的记录,说明SQL在等待同步复制备机响应。