如何在PostgreSQL 12的Citus数据库上链接协调器和工作程序上的作业

问题描述

我在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; | ...

解决方法

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

,

(无法回答以上答案,因此请在此处添加我的答案)
您可以使用下面的查询来列出特定工作节点中特定表的分片的位置(请参阅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>%';