GaussDB表空间膨胀处理

举报
GaussDB 数据库 发表于 2025/12/09 09:51:35 2025/12/09
【摘要】 故障现象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;

232.png

步骤 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;

234.png

步骤 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;

235.png

步骤 6     根据查询结果中的node信息,查询对应各节点的OldestXmin日志。

cd $GAUSSLOG/pg_log/{node}

grep OldestXmin postgresql-2022-12-02_000000.log

236.png

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

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。