flink sql - 新增pg批量写入参数导致的pg表死锁分析

26 篇文章 0 订阅
8 篇文章 1 订阅

flink sql - 新增pg批量写入参数导致的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 = 14172
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

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值