hg_parallizator插件并行创建索引出现阻塞情况

环境

系统平台:银河麒麟 (鲲鹏)
版本:4.5.6

症状

1、通过查询锁语句,发现两个创建索引会话(session1、session2)阻塞了后续所有SQL语句的执行。
在这里插入图片描述
2、查看创建索引进程视图,一条信息也没有
在这里插入图片描述
3、查看主表信息,只有928939进程获取到共享锁,创建索引需要访问排它锁,还未获取。
在这里插入图片描述

问题原因

1、在分区表主表创建索引时,数据库内核会自动递归创建所有子分区索引,这是内核原生逻辑。

2、为了提升索引创建效率,使用hg_parallizator插件,该插件会拆分任务在各个子分区并行创建索引,导致:

01)内核递归的子分区索引创建

02)插件下发的子分区索引创建

两个任务同时对同一个子分区申请排他锁,产生锁竞争。

由于数据库内核存在底层缺陷,竞争后无法正常唤醒等待会话,最终引发索引创建永久阻塞。

解决方案

1、如果不是分区表且没有大量索引需要创建,停用hg_parallizator插件。

去掉shared_preload_libraries参数中的hg_parallizator,数据库重启生效。

2、升级新版hg_parallizator插件

主表创建索引语句增加ONLY关键字,限制其仅创建本级索引,不递归创建子索引,避免锁竞争。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值