GaussDB表空间膨胀处理
【摘要】 故障现象base目录占用磁盘空间大,监控页面dbsize增长快,不符合预期。故障原因可能原因有以下:长事务阻止。处理方法步骤 1 登录CN节点,并通过gsql连接数据库。gsql -d postgres -p 40000 -U user -W password -r主备版登录主DN节点。步骤 2 查看数据库大小。select datname, pg_database_size...
- 故障现象
base目录占用磁盘空间大,监控页面dbsize增长快,不符合预期。
- 故障原因
可能原因有以下:
长事务阻止。
- 处理方法
步骤 1 登录CN节点,并通过gsql连接数据库。
gsql -d postgres -p 40000 -U user -W password -r
主备版登录主DN节点。
步骤 2 查看数据库大小。
select datname, pg_database_size(datname) as size from pg_database;

步骤 3 确认业务是否执行批量导数据等业务,如在批量导数据,表空间短暂膨胀属于正常现象,若不涉及继续步骤4。
步骤 4 查看数据库中脏页率高的表。
select relname,schemaname,n_live_tup,n_dead_tup,round(n_dead_tup * 100 / (n_live_tup + n_dead_tup+0.0001),2) as dead_tup_ratio,last_autovacuum, last_vacuum,vacuum_count, autovacuum_count from pg_stat_all_tables where dead_tup_ratio > 0 order by dead_tup_ratio desc, last_autoanalyze limit 20;

步骤 5 确认是否存在长事务。
分布式:
execute direct on all 'select * from pg_running_xacts where xmin::text::bigint <>0 order by xmin::text::bigint asc limit 10;';
集中式:
select * from pg_running_xacts where xmin::text::bigint <>0 order by xmin::text::bigint asc limit 10;

步骤 6 根据查询结果中的node信息,查询对应各节点的OldestXmin日志。
cd $GAUSSLOG/pg_log/{node}
grep OldestXmin postgresql-2022-12-02_000000.log

l 如查询出Oldestxmin与步骤5中的xmin一致,且一直未变化,则表明当前pid存在SQL,继续步骤7。
l 若不涉及,联系华为技术支持。
步骤 7 查询当前正在执行的SQL。
分布式:
execute direct on all 'select * from pg_stat_activity where pid in(select pid from pg_running_xacts where xmin::text::bigint <>0 order by xmin::text::bigint asc limit 10);';
集中式:
select * from pg_stat_activity where pid in(select pid from pg_running_xacts where xmin::text::bigint <>0 order by xmin::text::bigint asc limit 10);
如查询出该语句,则继续步骤8,若未查询出结果,则联系华为技术支持。
步骤 8 强制结束该语句。
分布式:
execute direct on all 'select pg_terminate_session(pid,sessionid),pid,sessionid from pg_stat_activity where pid in(select pid from pg_running_xacts where xmin::text::bigint <>0 order by xmin::text::bigint asc limit 10);';
集中式:
select pg_terminate_session(pid,sessionid),pid,sessionid from pg_stat_activity where pid in(select pid from pg_running_xacts where xmin::text::bigint <>0 order by xmin::text::bigint asc limit 10);
须知:
pg_terminate_session为高危操作,执行前需联系业务及华为技术支持确认。
步骤 9 若以上均不涉及,请联系华为技术支持。
----结束
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)