2023-05-07
为什么要使用 create index concurrently 以及 CIC 的危害
为什么要使用 create index concurrently 以及 CIC 的危害
收藏
分享
2条回答
默认
最新
回答交流
提交
问题信息
请登录之后查看
邀请回答
暂无人订阅该标签,敬请期待~~
墨值悬赏
为什么要用CIC
降低锁级别,提升业务并发度。create index需要持有5级锁,会阻塞对表的DML操作;而CIC只需要持有4级锁,与DML操作兼容,基本可以做到不影响业务。
CIC的危害
有一些算不上危害这么严重,但需要注意:
pg 14中,14.4版本前CIC有重大bug,有概率导致索引损坏、数据丢失。
CIC需要扫描两遍表,耗时更长,资源消耗更多
当有长事务(参考第3题)时,创建语句会持续被阻塞
如果CIC语句异常结束(被取消、被kill等),会在DB中留下一个invalid索引。该索引无法被使用,但每次DML操作还需要更新它,降低效率
CIC是自阻塞的,不能在一个表同时执行
分区表不支持在主表CIC创建索引(单独在各子表可以)
评论
有用 0
墨值悬赏