如何判断 Postgres table 何时集群以及使用了哪些索引
How to tell when a Postgres table was clustered and what indexes were used
我对集群实现的性能改进印象深刻,但对它花费的时间却没有印象。
我知道如果 table 或分区在集群后更改,则需要重建集群,但除非我记下上次集群 table 的时间,否则我怎么能告诉我什么时候需要再做一次?
我可以使用这个查询来告诉我什么 table(s) 有一个或多个聚簇索引
SELECT *
FROM pg_class c
JOIN pg_index i ON i.indrelid = c.oid
WHERE relkind = 'r' AND relhasindex AND i.indisclustered
我的问题是。
- 如何判断哪些索引已经聚集?
- 有什么方法可以准确找出 table 上次聚类的时间?
- 如何判断聚簇索引是否仍为 'valid',或者换句话说,如何判断 table/index 的变化程度足以让我需要重新构建聚簇。
我注意到重新构建聚簇索引所花的时间与最初构建它所花的时间一样长(即使在此期间未触及 table) .所以我想避免重新聚类,除非我知道 table 需要它。
为清楚起见更新(我希望)
如果我使用这个命令....
CLUSTER tableA USING tableA_idx1;
- 我如何才能在以后找到引用了哪个索引,即
tableA_idx1(table定义了多个索引)?
- 是否在任何地方记录何时此命令是运行?
- 我知道集群可能需要 rebuilt/refreshed/recreated(不确定措辞是否正确)偶尔使用 CLUSTER tableA 当 table 发生变化。无论如何知道什么时候 table 发生了很大的变化以至于集群不再有用?
我对集群实现的性能改进印象深刻,但对它花费的时间却没有印象。
我知道如果 table 或分区在集群后更改,则需要重建集群,但除非我记下上次集群 table 的时间,否则我怎么能告诉我什么时候需要再做一次?
我可以使用这个查询来告诉我什么 table(s) 有一个或多个聚簇索引
SELECT *
FROM pg_class c
JOIN pg_index i ON i.indrelid = c.oid
WHERE relkind = 'r' AND relhasindex AND i.indisclustered
我的问题是。
- 如何判断哪些索引已经聚集?
- 有什么方法可以准确找出 table 上次聚类的时间?
- 如何判断聚簇索引是否仍为 'valid',或者换句话说,如何判断 table/index 的变化程度足以让我需要重新构建聚簇。
我注意到重新构建聚簇索引所花的时间与最初构建它所花的时间一样长(即使在此期间未触及 table) .所以我想避免重新聚类,除非我知道 table 需要它。
为清楚起见更新(我希望)
如果我使用这个命令....
CLUSTER tableA USING tableA_idx1;
- 我如何才能在以后找到引用了哪个索引,即 tableA_idx1(table定义了多个索引)?
- 是否在任何地方记录何时此命令是运行?
- 我知道集群可能需要 rebuilt/refreshed/recreated(不确定措辞是否正确)偶尔使用 CLUSTER tableA 当 table 发生变化。无论如何知道什么时候 table 发生了很大的变化以至于集群不再有用?