记-flink sink to pg卡住且日志没有报错问题排查
参数:reWriteBatchedInserts=true 参数说明如下: 问题描述: 1、flink 任务实时写入kafka和pg , 观察flink DAG图发现写入pg库有压力 2、任务跑了几分钟后,source 端数据已经持续几分钟不变化 3、checkpoint 经常失败,特殊情况会成功一次,但之后的checkpoint 基本都是失败,且source 端数据不在变化【尽管source数据还没跑完】 4、从成功的checkpoint重启任务,source 端数据不在变化【尽管source数据还没跑完】
排查流程: 1、查看数据库日志落后情况
数据库日志落点一点,但不影响任务跑数
2、查看表是否死锁
出现AccessShareLock、RowExclusiveLock 锁, 初步判断是表死锁【锁冲突】了
3、排查是否有对应的sql执行日志
没有找到对应sql执行日志【DBA不在】
4、不做checkpoint , 排除checkpoint问题,只考虑sql问题
任务任不能正常运行
5、是否新加了什么参数
1、最近加了参数:reWriteBatchedInserts=true,但还没全流程验证
2、去掉参数重启任务,任务正常,问题解决
原因分析【个人理解】 1、因业务数据是可以随便删除与写入,实时任务随时回撤数据的可能性 2、flink sink to pg 本身已经做了reWriteBatchedInserts=true参数的功能,若再次对写入pg设置这个参数,因业务修改问题可能会出现操作数据重叠问题,导致表出现死锁【锁冲突】。
查询AAAAAA表执行的sql:
SELECT * FROM pg_stat_activity where query ~ 'AAAAAA';
查询AAAAAA对应的锁类型:
select
a.locktype, a.database, a.pid, a.mode, a.relation, b.relname
from pg_locks a
join pg_class b on a.relation = b.oid
where lower(b.relname) = 'AAAAAA';
kill 进程:
select pg_terminate_backend(pid)
from pg_stat_activity
where state = 'active'
and pid != pg_backend_pid()
and pid in (select a.pid
from pg_locks a
join pg_class b on a.relation = b.oid
where lower(b.relname) = 'AAAAAA')
pg 库锁类型 【备注】锁类型引用:http://t.zoukankan.com/zluckiy-p-12486838.html
|