我使用的是 PostgreSQL 12,并且有分区表,我想将它们聚类。每个分区的大小大致相同(以 GB 为单位)。但是,性能可能会有很大差异,每个分区的聚类时间从 5 分钟到 1000 分钟不等。
我正在并行对多个分区进行集群,并且我的数据库当前没有收到除 CLUSTER 请求之外的任何请求。
我不完全了解 CLUSTER 过程的来龙去脉。如何解释聚类时间如此大的变化?我可以做些什么来提高性能?
编辑:更准确地说,我有一个 34 GB 的分区,在 13 分钟内完成聚类,还有一个 56 GB 的分区,在 1288 分钟内(几乎一天)完成聚类。这些大小值是聚类前的大小。我正在重新计算大小。
用于检索大小的查询:
SELECT table_name,
pg_size_pretty(pg_total_relation_size(table_schema || '."' || table_name || '"')) AS size
FROM information_schema.tables
WHERE table_schema = 'partitionschema' and table_name like 'mytable_%' order by table_name;
不过,在聚类之前我没有执行 ANALYZE 或 VACUUM。
我有 900MB/s 的磁盘 I/O 和 128GB 的 RAM(尽管根据我的 datadog 仪表板,似乎只使用了 40 左右)。我的处理器似乎也不是一个限制。
我有 300 个分区需要集群,在流程的每个步骤中,我都尝试并行集群 8 个分区。每个分区都在 ~50GB 中
其他一些信息:
- 维护工作内存:4GB
- 工作模因:64MB
- 共享缓冲区:32GB
- 最大wal大小:4GB