0

我在 PostgresSQL 服务器上有 Citus 扩展。我想pg_stat_statements通过协调节点查看每个工作人员的统计信息。但是,没有与协调员和工作人员的表相匹配的列。有人知道我该怎么做吗?

我也对 PostgreSQL 如何计算 queryId 感兴趣。

所以pg_stat_statements协调器上的表格会显示如下:

userid | dbid | queryid |      query       | other statistics related columns 
1      |  2   | 123     | SELECT * FROM a; | ...

虽然pg_stat_statements工作人员的表格会显示如下内容:

userid | dbid | queryid |          query          | other statistics related columns 
1      |  2   | 456     | SELECT * FROM a_shard1; | ...
1      |  2   | 789     | SELECT * FROM a_shard2; | ...
4

2 回答 2

0

在pg_dist_partitionpg_dist_shard_placement表的帮助下,您可以将工作器(分片)上的表名与协调器上的分布式表匹配。要匹配统计信息,您可以查看citus_stat_statements视图。

于 2020-10-02T05:55:01.520 回答
0

(无法回复上面的答案,所以在这里添加我的答案)
您可以使用下面的查询来列出特定工作节点中特定表的分片的位置(请参阅 WHERE 子句中的最后三个过滤器)。

SELECT pg_dist_shard.shardid, pg_dist_node.nodename, pg_dist_node.nodeport
FROM pg_dist_shard, pg_dist_placement, pg_dist_node
WHERE pg_dist_placement.groupid = pg_dist_node.groupid AND
      logicalrelid = '<distributedTableName>'::regclass AND
      pg_dist_node.nodename = '<nodeName>' AND
      pg_dist_node.nodeport = '<nodePort>';

然后,您可以在您感兴趣的工作节点中执行以下查询,以查看 Citus 对该工作节点中的特定分片执行什么操作:

SELECT * FROM pg_stat_statements WHERE query LIKE '%_<shardId>%';
于 2020-10-06T14:25:14.177 回答