暂无图片
暂无图片
1
暂无图片
暂无图片
暂无图片

GaussDB drop 1.4TB表卡住不动了

原创 笑看风云 2023-07-11
668

1、问题描述

    GaussDB有表膨胀的问题,业务有张表,膨胀了1.4TB,膨胀率高达98%, 表里目前有的数据差不多100w多点,由于磁盘空间告警,而且暂时无法扩容,需要重建表膨胀的问题来缓解磁盘空间。

2、问题分析

     表膨胀问题很严重,需要进行处理,处理的方案通常有三种: 

    2.1  开源工具:pg_repack  

       --资源不可控,有可能获取锁失败

    2.2 Guassdb内置的命令vacuum full  --会锁表,阻塞表上的DML

       --会锁表,阻塞表上的DML

    2.3 手动重建表 

        纯sql脚本,过程可控,会丢失更新数据,跟业务沟通后影响不大,最多就是修复几条脏数据

最终采用手动重建表的方式来做,执行完之后,需要删除1.4TB的老表的时候,执行了50min都没完成,怀疑是锁等导致的,于是就去看了下pg_stat_activity视图果然发现有一个

autovacuum: VACUUM PG_TOAST.PG_TOAST_12345; 通过select * from pg_class where oid = 12345查询得知正是正在执行drop的表,由于这表有有Text大字段,当内容超过块大小8K时就会启动TOAST,将大的字段压缩或切片成多个物理行存到另一张系统表中(TOAST表)。

通过分析了明白了是执行vacuum toast表的进程阻塞了执行drop table的进程,于是杀掉vacuum进程之后,drop table的操作瞬间完成,在后台df -h看磁盘是在缓慢释放的。

3、总结

    删除大表的时候,可以考虑设置alter table xxx set (autovacuum_enabled=off);关闭autovacuum之后,再进行删除操作,其实pg_repack也是建议先设置为off,再执行膨胀回收,不然也会锁表。

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论