Greenplum 临时表年龄问题

目前在使用的greenplum是基于postgresql 8.2.*版本的
之前写过一篇文章,可以使用vacuum freeze来冻结年龄
但是正常情况下,Greenplum是用作OLAP来使用的,所以数据量会比较大,手工做全库的freeze明显是不现实的

目前实际情况是大批的临时表存在,而且年龄很高,
这个估计是8.2版本的bug,因为临时表都是随着session结束而消失的。但是这里一直存在,而且年龄无法回收,导致整个集群的年龄都很高
那么,现在我们需要人为干预,删除这些临时表
1.创建函数:
cat  /home/gpadmin/drop_tmp_function

create or replace function drop_tmp_table() returns int 
as $$
declare
ns_name text;
rel_name text;
v_tablename text;
begin
for ns_name,rel_name in  
(select b.nspname,a.relname from pg_class a ,pg_namespace b 
where a.relnamespace=b.oid 
and b.nspname ~ 'pg_temp' 
and a.relkind='r' order by age(a.relfrozenxid) desc)
loop 
 v_tablename := ns_name||'.'||rel_name;
 execute 'drop table '||v_tablename;
end loop;
RAISE NOTICE 'The all temp table  be successful droped !';
return 1;
end;
$$ LANGUAGE plpgsql;

2.cat  drop_tmp_sh.sh
#!/bin/bash
source /home/gpadmin/.bash_profile
for host in `cat /home/gpadmin/segment_hosts_file`;do
PGOPTIONS="-c gp_session_role=utility" psql -h ${host} -p xxx -d  warehouse -f /home/gpadmin/drop_tmp_function;
PGOPTIONS="-c gp_session_role=utility" psql -h ${host} -p xxx -d  warehouse -c "select * from drop_tmp_table()";
done
echo "All table of the greenplum has be deleted!"

segment_hosts_file 内容是对应的greenplum下面的segment节点地址或者主机名

3.后台执行脚本,删除临时表
nohup sh drop_tmp_sh.sh > drop_tmp_sh.log 2>&1 &


另外的话还有外部表年龄也会逐渐升高,生产环境用了很多文件的外部表,而且外部表不能做vacuum,所以目前的方法只能是删除后重建。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值