问题一:如何查询大表的dead tuple占比和空间?
如何查询大表的dead tuple占比和空间?
参考回答:
可以使用以下SQL命令查询大表的dead tuple占比和空间:
SELECT ((btdrelpages/btdexppages)-1)*100||'%', b.relname FROM gp_toolkit.gp_bloat_expected_pages a JOIN pg_class b ON a.btdrelid=b.oid WHERE btdrelpages/btdexppages > 1.2;
关于本问题的更多问答可点击原文查看:
https://developer.aliyun.com/ask/667962
问题二:VACUUM和VACUUM FULL命令的主要区别是什么?
VACUUM和VACUUM FULL命令的主要区别是什么?
参考回答:
VACUUM命令只是回收表的空间并令原表可以再次使用,但额外的空间并不返回给操作系统,且可以与表的普通读写并发操作。而VACUUM FULL将表的全部内容重写到一个没有垃圾数据的新文件中,并释放旧表占用的空间给操作系统,但处理时需要在表上施加排他锁,影响业务使用。
关于本问题的更多问答可点击原文查看:
https://developer.aliyun.com/ask/667963
问题三:为什么在某些情况下需要手动执行VACUUM而不是依赖自动清理?
为什么在某些情况下需要手动执行VACUUM而不是依赖自动清理?
参考回答:
在大库和大表场景下,由于表可能非常大,数据变化量虽然相对于表的总大小来说比例不高,但绝对量仍然很大,多个大表一起变化会累计给整体空间带来问题。因此,需要辅以手动回收来更有效地管理空间。
关于本问题的更多问答可点击原文查看:
https://developer.aliyun.com/ask/667964
问题四:哪些系统表容易因为频繁DDL操作而膨胀?
哪些系统表容易因为频繁DDL操作而膨胀?
参考回答:
容易因为频繁DDL操作而膨胀的系统表包括pg_attribute(存储表字段详情)、pg_attribute_encoding(表字段的扩展信息)、pg_class(存储pg的所有对象)和pg_statistic(存储pg的数据库内容的统计数)。
关于本问题的更多问答可点击原文查看:
https://developer.aliyun.com/ask/667965
问题五:手动执行VACUUM时有哪些限制需要注意?
手动执行VACUUM时有哪些限制需要注意?
参考回答:
手动执行VACUUM时,首先不要在IO使用率高的期间执行,以免影响系统性能;其次,VACUUM FULL需要额外的磁盘空间才能完成,如果磁盘剩余空间不足,可能无法对大表执行VACUUM FULL,需要先删除一些历史表以腾出空间;最后,必须确保目标表上的所有大事务都已经结束,否则内核会认为旧的数据还可能被使用,从而无法回收空间。
关于本问题的更多问答可点击原文查看: