定期使用Vacuum analyze tablename 回收垃圾和收集统计信息,尤其在大数据量delete和update,或者导入以后,非常重要。
vacuum分两种,一种是analyze,优化查询计划的。还有一种是清理垃圾数据。
postres删除工作,并不是真正删除数据,而是在被删除的数据上,坐一个标记,只有执行vacuum后,才会真正的把物理空间释放,这个非常重要,有些经常更新的表,各种查询、更新效率会越来越慢,这个多是因为没有做vacuum的原因。
下面看一个例子
create table dw_temp.category_detail_test as select * from dw_stage.category_detail;
select count(1) from dw_temp.category_detail_test;
--9800
select pg_relation_size('dw_temp.category_detail_test');
--2228224
delete from dw_temp.category_detail_test where category_id<99999;
--查询成功: 共计 3805 行受到影响,耗时: 15 毫秒(ms)。
select pg_relation_size('dw_temp.category_detail_test');
--2228224
vacuum dw_temp.category_detail_test;
select pg_relation_size('dw_temp.category_detail_test');
该动作会消耗系统一定的资源,引起系统的IO上升,对有一定系统瓶颈来说容易造成堵塞,严重会把GP宕掉,造成数据库瞬断。
转载于:https://blog.51cto.com/jackwxh/1311321