【运维变更】【标准变更方案】【HC/HCS/HCSO】清理系统表

1.    适用场景

1) 长时间或者不正确使用的系统表会堆积大量的脏数据,造成系统表膨胀,影响数据库的性能,故需要定期清理系统表。

2.    前提条件

1) GaussDB A集群安装成功,且处于已启动状态。

2)集群状态正常,显示为normal。

3.    对系统影响

操作过程会关闭白名单,禁止业务接入。

4.    实施步骤

4.1准备工作

4.1.1检查集群状态

步骤1 以Ruby用户登录GaussDB A集群的第一个正常的cn节点

步骤2 执行以下命令,启用环境变量

source ${BIGDATA_HOME}/mppdb/.mppdbgs_profile

步骤3 执行以下命令,查看GaussDB A集群当前状态

cm_ctl query

如下则为正常

[   Cluster State   ]

 

cluster_state  :  Normal

redistributing : No

balanced       : Yes

步骤4 如果不满足以上状态,则联系华为工程师处理

4.1.2排查老事务

参考以下链接:

https://bbs.huaweicloud.com/forum/thread-153148-1-1.html

4.2关闭集群通信白名单

步骤 1  现场实施人员知会并确认用户已完成数据库业务停止操作。

步骤 2  以Ruby用户登录第一个正常的CN节点,执行如下命令注释用户白名单

以默认CN实例目录/DWS/data1/coordinator为示例,现场需根据实际情况进行调整。

gs_guc set -Z coordinator -Z datanode -N all -I all -h “host all all 0.0.0.0/0”

步骤 3  以Ruby用户登录第一个正常的CN节点,关闭DWS实例节点下的后台访问连接和应用连接。具体操作如下:

gs_ssh -c “ps ux |grep -w gsql |grep -v grep |awk ‘{print \$2}’ |xargs -r kill -9”

gs_ssh -c “ps ux |grep -w ap_agent |grep -v grep |awk ‘{print \$2}’ |xargs -r kill -9”

步骤 4  以Ruby用户登录每一个CN节点,执行如下命令重启CN。

执行以下命令,获取到CN的进程Pid

ps -ef | grep /DWS/data1/coordinator | grep -v grep

执行以下命令,杀死CN进程

kill -9 Pid

执行以下命令,观察CN被重新拉起,并且Pid与之前获取的Pid不同

ps -ef | grep /DWS/data1/coordinator | grep -v grep

4.3清理pg_class

4.3.1查询内核版本

步骤1Ruby用户登录任一CN节点,执行如下命令:

source ${BIGDATA_HOME}/mppdb/.mppdbgs_profile

gsql -V

执行结果,示例如下:

gsql (GaussDB 8.0.0 build e44e33ab) compiled at 2020-07-30 18:00:55 commit 7768 last mr 13325

8.0.0为内核版本

4.3.2查询表数量

步骤1Ruby用户登录任一CN节点,分别连接所有数据库,执行如下命令,db_name为数据库名字

source ${BIGDATA_HOME}/mppdb/.mppdbgs_profile

gsql -d db_name -p 8000 -U dbadmin -W password -c “select count(1) from pg_tables;”

执行结果,示例如下:

count

——-

960

(1 row)

960为表数量

4.3.3查询pg_class索引位置

步骤1Ruby用户登录任一CN节点,连接所有数据库,执行如下命令,db_name为数据库名字

source ${BIGDATA_HOME}/mppdb/.mppdbgs_profile

gsql -d db_name -p 8000 -U dbadmin -W password -c “select xmin,xmax,ctid from pg_class where oid = 2662;”

执行结果,示例如下:

xmin | xmax |  ctid

——+——+——–

2 |    0 | (21972,3)

(1 row)

21972为索引位置

4.3.4清理pg_class

清理pg_class需要满足以下2个条件中的1个

  1. >4.3.1查得数据库版本不低于8.0.0.9,且数据库版本不为8.1.0
  2. >4.3.2查得,表的数量小于10万;并且>4.3.3查得,pg_class的索引位置小于10万
说明

如果以上2个条件都不满足,则不用执行清理pg_class后续步骤,可以直接执行>4.4清理其他系统表。

步骤1Ruby用户登录任一CN节点,连接所有数据库,执行如下命令,db_name为数据库名字

source ${BIGDATA_HOME}/mppdb/.mppdbgs_profile

gsql -d db_name -p 8000 -U dbadmin -W password -c “set synchronize_seqscans=off; VACUUM FULL FREEZE PG_CLASS;analyze PG_CLASS;”

4.4清理其他系统表

步骤1Ruby用户登录任一CN节点,连接所有数据库,执行如下命令,db_name为数据库名字

source ${BIGDATA_HOME}/mppdb/.mppdbgs_profile

gsql -d db_name -p 8000 -U dbadmin -W password -c “set synchronize_seqscans=off;VACUUM FULL FREEZE PG_ATTRIBUTE;VACUUM FULL FREEZE PG_DEPEND; VACUUM FULL FREEZE PG_PARTITION;VACUUM FULL FREEZE PG_PROC;VACUUM FULL FREEZE PG_STATISTIC;VACUUM FULL FREEZE pgxc_class;VACUUM FULL FREEZE pg_index;analyze PG_ATTRIBUTE;analyze PG_DEPEND; analyze PG_PARTITION;analyze PG_STATISTIC;analyze pgxc_class; “

4.5恢复集群通信白名单

步骤1   以Ruby用户登录第一个正常的CN节点,执行如下命令注释用户白名单

以默认CN实例目录/DWS/data1/coordinator为示例,现场需根据实际情况进行调整。

gs_guc set -Z coordinator -N all -I all -h ‘host all all 0.0.0.0/0 sha256’

原创文章,作者:奋斗,如若转载,请注明出处:https://blog.ytso.com/tech/bigdata/316754.html

(0)
上一篇 5天前
下一篇 5天前

相关推荐

发表回复

登录后才能评论