哈尔滨市网站建设,wordpress导入word,杨中市网站建设,明薇通网站建设哪家好概述
Greenplum是基于Postgresql数据库的分布式数据库#xff0c;而PG数据库在事务及多版本并发控制的实现方式上很特别#xff0c;采用的是递增事务id的方法#xff0c;事务id大的事务#xff0c;认为比较新#xff0c;反之事务id小#xff0c;认为比较旧。
事务id的上…概述
Greenplum是基于Postgresql数据库的分布式数据库而PG数据库在事务及多版本并发控制的实现方式上很特别采用的是递增事务id的方法事务id大的事务认为比较新反之事务id小认为比较旧。
事务id的上限是21亿正常使用时事务id只增不减到达一定程度时就会触发数据库告警直至数据库只读无法创建新事务
减少事务id的方法是执行提供的回收命令。
gp一共是21亿可以使用使用超过5亿就告警超过11亿就锁库
两个重要参数
postgres# show xid_warn_limit;xid_warn_limit
----------------500000000
(1 row)postgres# show xid_stop_limit;xid_stop_limit
----------------1000000000
(1 row)这个两个参数是控制事务id剩余值多少时数据库会告警或切换为只读的
注意事务id的总值是21亿
xid_warn_limit 当距离stop的值不足5亿时数据库会触发年龄告警 xid_stop_limit 当距离21亿总值的剩余值不足10亿时数据库会切换为只读
简单来说针对默认的设置
年龄1-5亿无年龄问题 年龄5-11亿会触发年龄告警但不影响数据库使用 年龄11-21亿数据库为只读不能创建新事务
如何检查数据库年龄
1.执行命令时年龄告警
查询表统计数据是出现异常提示:
WARNNING:database “XXX” must be vacuumed within 177009986 transactions
HINT: To avoid a database shutdown,execute a database-wide VACUUM in “XXX”当数据库查询或者日志中出现上面告警时说明需要对GP事务id进行清理
If these warnings are ignored, the system will shut down and refuse to start any new transactions ince there are fewer than 1 million transactions left until wraparound:
ERROR: database is not accepting commands to avoid wraparound data loss in database “XXXX”当数据库查询或者日志中出现上面告警时说明GP停止对外提供服务
2.查询当前数据库年龄
SELECT gp_segment_id,datname, age(datfrozenxid) FROM gp_dist_random(‘pg_database’) ORDER BY 3 DESC;
例子 比如这里查询当前年龄最上面的值为2亿多说明年龄在2亿左右
postgres# SELECT gp_segment_id,datname, age(datfrozenxid) FROM gp_dist_random(pg_database) ORDER BY 3 DESC;gp_segment_id | datname | age
----------------------------------------------------------------------0 | test01 | 2707979230 | test02 | 2707979230 | test03 | 270797923如果是11亿告警锁库了
3.如何界定年龄是否要处理
如果出现上面1 的告警说明年龄已经到达警戒值需要处理。 如果2 年龄超过5亿说明即将告警也需要处理
超过11亿数据库就会锁库
告警年龄处理
在年龄到达告警值且未到锁库值的时候此时数据库服务正常就是命令会有warning输出
此时需要再master daedb用户下执行 nohup vacuumdb -F -a /home/gpadmin/vacuumdb.log
该命令执行时间可能很长并且会消耗一定资源如果过于影响客户使用请选择执行时间保证执行时间有5 小时
数据库锁库处理
还有一种情况就是数据库已经到达只读阈值 数据库只读了因为vacuumdb的命令也需要创建事务所以直接运行命令会报错无法进行回收
就需要先修改上面的参数阈值使其能正常运行事务
1.停止数据库
gpstop -M fast -aps -ef|grep postgres 关闭确保进程都不在了再继续 2.找到所有数据目录
在master的daedb用户下执行
gpstate -s|grep -E Address|Datadir该命令会将集群所有的数据目录及对应的主机名打印出来
另外有两台master一般是在/gpmaster/gpseg-1 里可以使用gpstate -f 查看
3.修改所有节点数据目录里配置文件参数
修改配置找到所有节点的postgresql.conf为其增加或修改参数
xid_stop_limit800000000 #改为8亿或者更小全部修改完成之后启动数据库:gpstart -a 启动完成以后此时数据库就可以正常使用了
4.回收数据库年龄
此时需要再master 数据库用户下执行
nohup vacuumdb -F -a /home/gpadmin/vacuumdb.log 5.还原参数
改完还有个事要将上面加的参数全部注释掉 。有个简便方法find 出来后替换
find /* -name postgresql.conf|xargs sed -i s/xid_stop_limit500000000/#xid_stop_limit500000000/g重启数据库生效
gpstop -M fast -agpstart -a