我在Greenplum中创建了一个表并对其执行插入更新删除操作。我已经在桌上运行了vacuum命令,显示它已成功运行。 但是,当我运行命令select * from gp_toolkit.gp_bloat_diag;
。它显示相同的表名。 重复运行真空后,还会在命令列表中显示表名* select * from gp_toolkit.gp_bloat_diag; 我应该如何确保桌子没有任何膨胀和真空吸尘?无法在greenplum中抽真空表
回答
请参考这个知道Different option to remove bloat from a table
真空不会删除膨胀,但真空FULL意志。检查下面的例子
创建表:
DROP TABLE IF EXISTS testbloat;
CREATE TABLE testbloat
(
id BIGSERIAL NOT NULL
, dat_year INTEGER
)
WITH (OIDS = FALSE)
DISTRIBUTED BY (id);
插入1M记录到表:
INSERT INTO testbloat (dat_year) VALUES(generate_series(1,1000000));
检查表的大小。大小是43MB
SELECT 'After Inserting data',pg_size_pretty(pg_relation_size('testbloat'));
更新的所有表中的记录
UPDATE testbloat
SET dat_year = dat_year+1;
更新后检查表的大小。大小是85MB。这是因为这是因为更新操作
SELECT 'After updating data',pg_size_pretty(pg_relation_size('testbloat'));
造成的桌子上
Vacuum testbloat;
检查表真空后的尺寸施加真空膨胀的增加。大小仍然是85MB。
SELECT 'After Vacuum', pg_size_pretty(pg_relation_size('testbloat'));
应用真空FULL放在桌子上
Vacuum FULL testbloat;
真空FULL后检查表的大小。大小仍然是43MB。它得到了降低表膨胀是不存在
SELECT 'After Vacuum FULL ', pg_size_pretty(pg_relation_size('testbloat'));
对于澄清:
真空的确取消了膨胀(表中的死者元组),并允许该空间被重新使用新的元组。
VACUUM和VACUUM FULL之间的区别在于FULL会重新编写relfiles(表存储)并回收操作系统的空间。
gp_toolkit.gp_bloat_diag不立即更新,但在更新表格的统计信息后更新ANALYZE后不久更新。
我只会建议您在表非常小或系统目录表增长不成比例的情况下运行VACUUM FULL,而您没有太多选项。
VACUUM FULL是一个非常昂贵的操作。 在非常大的表上可能会导致意外的运行时间,并且在此运行期间,表将始终处于独占锁定状态。
一般而言,频繁的VACUUM会使您的表格避免不必要的过大。死元组将被删除,空间将被重用。
如果你的桌子有很大的死角,你可能会想要重新组织 - 这是一种收回空间的较便宜的方法。
alter table <table_name> set with (reorganize=true) distributed (randomly -- or -- by (<column_names1>,<column_names2>....)
真空永远不会释放过期的行所占用的空间,而它标志着新行到同一表本身插入后可以重复使用的空间。因此,即使在运行真空后,桌子的大小也不会下降。
而不是完全使用真空,使用CTAS,它比真空充满速度更快,不像真空充满它,它不锁定pg_class表。
在CTAS操作之后,将表格重命名为旧的表格名称。
- 1. 无法启动greenplum - gpstart失败
- 2. 无法从列表中抽取点
- 3. 无法在Greenplum中使用DO执行匿名代码块
- 4. Greenplum - 外部表格
- 5. 谷歌Appengine:无法真空索引
- 6. PostgreSQL真空大表
- 7. 无法在codemodel中创建抽象类?
- 8. 无法从空表
- 9. mvc表单无法创建抽象类
- 10. 删除greenplum表中的膨胀
- 11. 去聚集在Greenplum的表列
- 12. 抽样HBase表keyspace空间
- 13. 无法在真正的iPhone中调试
- 14. 命名空间中的抽象方法
- 15. xsi:无为真是空还是为空?
- 16. 仿真器列表为空
- 17. oracle中真正的表空间大小
- 18. 无法从表格中选择空格
- 19. ORA-01652无法通过在表空间
- 20. 无法连接,错误消息Greenplum的:“没有pg_hba.conf的条目”
- 21. 无法从windows上的pgadmin连接到greenplum postgresql
- 22. AspNetCore抽象无法加载
- 23. MMDrawerController无法关闭抽屉
- 24. 无法创建抽象类?
- 25. 从可变对象表示中抽取一个真实对象
- 26. cognos greenplum pg_catalog
- 27. Greenplum vs PostgreSQL
- 28. Airflow <--> Greenplum
- 29. StarUML - 无法指示抽象类中的抽象操作(斜体)
- 30. greenplum中的增量负载
感谢您的解释,关于声明真空FULL avee_dev.year1;什么是avee_dev.year1? – vkumar
不好意思。我改变了它 –
好吧。我正在使用talend工作,每小时更新并将记录插入和删除到20个表格中。应该以什么频率吸引桌子?我应该在插入,更新和删除之后立即吸尘吗? – vkumar