gpt4 book ai didi

postgresql - 如何判断 Postgres 表何时聚集以及使用了哪些索引

转载 作者:行者123 更新时间:2023-11-29 11:34:01 24 4
gpt4 key购买 nike

我对集群实现的性能改进印象深刻,但对它花费的时间却没有印象。

我知道如果表或分区在集群后发生更改,则需要重建集群,但除非我记下上次对表进行集群的时间,否则我怎么知道何时需要再次进行集群?

我可以使用这个查询来告诉我哪些表有一个或多个聚簇索引

SELECT *
FROM pg_class c
JOIN pg_index i ON i.indrelid = c.oid
WHERE relkind = 'r' AND relhasindex AND i.indisclustered

我的问题是。

  • 我如何知道哪些索引已经聚集?
  • 有什么方法可以准确查明上次对表进行聚簇的时间?
  • 我如何判断聚簇索引是否仍然“有效”,或者换句话说,如何判断表/索引的变化量足以让我需要重新构建聚簇。

我注意到重新构建聚簇索引所花的时间与最初构建它所花的时间一样长(即使在此期间未触及表)。所以我想避免重新聚类,除非我知道表需要它。


为清楚起见更新(我希望)

如果我使用这个命令....

CLUSTER tableA USING tableA_idx1;
  • 我怎样才能在以后找出引用了哪个索引,即tableA_idx1(该表定义了多个索引)?
  • 是否在此命令运行时在任何地方记录?
  • 我知道当表发生变化时,有时可能需要使用 CLUSTER tableA 重建/刷新/重新创建集群(不确定用语是否正确)。有没有办法知道什么时候表发生了如此大的变化以至于集群不再有用?

最佳答案

要判断最后使用哪个索引对表进行聚类,请使用 pg_index系统目录。

查询表中属于您的表的所有索引,并查看哪个索引设置了 indisclustered。一个表一次只能通过一个索引进行聚簇。

没有办法找出什么时候上次对表进行聚簇,但这无论如何都不是很有趣。你想知道的是聚类仍然有多好。

要找到它,请查询 pg_stats您聚集的列的行。如果 correlation 接近 1,你仍然很好。值越小,表示聚类越多。

关于postgresql - 如何判断 Postgres 表何时聚集以及使用了哪些索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53299733/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com