第?10?章?常见问题

  1. 可以在分布式表上创建主键吗?

    目前,uxmpp只在分布列是主键的一部分时才强制执行主键约束。以确保惟一性。

  2. 如何将节点添加到现有uxmpp集群?

    您可以通过使用新节点的主机名(或IP地址)和端口号调用master_add_node函数来手动添加节点。在将节点添加到现有集群后,它将不包含任何数据(分片)。

  3. uxmpp如何处理工作节点的故障?

    uxmpp支持两种复制模式,允许它容忍工作节点故障。在第一个模式中,澳门游戏平台注册网站使用uxdb的流复制来按原样复制整个工作节点。在第二个模式中,uxmpp在不同的工作节点之间复制分片。它们具有不同的优势,具体取决于工作负载和用例,如下所述:

    • uxdb流复制。此选项最适合繁重的OLTP工作负载。它通过不断地将WAL记录流式传输到备用数据库来复制整个工作节点。

    • uxmpp碎片复制。此选项最适合append分布式表。uxmpp通过自动复制DML语句和管理一致性来复制不同节点上的分片。如果节点发生故障,协调节点通过路由到副本来继续提供查询。要使用此种模式,只需启用分片复制。SET uxmpp.shard_replication_factor = 2;

  4. uxmpp如何处理协调器节点的故障转移?

    由于uxmpp协调器节点类似于标准uxdb服务器,因此可以使用常规uxdb同步复制和故障转移来提供协调器节点的更高可用性。澳门游戏平台注册网站的许多客户以这种方式使用同步复制来增加协调器节点故障的弹性。

  5. 如何将查询结果摄取到分布式表中?

    当表位于同一位置时(协同表),uxmpp支持INSERT / SELECT语法,用于将分布式表上的查询结果复制到分布式表中。

    如果您的表不在同一位置,或者您正在使用append分发,则可以使用COPY将数据复制出来然后再复制到目标表。

  6. 可以在同一查询中将分布式和非分布式表连接在一起吗?

    如果要在小维度表(常规uxdb表)和大型表(分布式)之间进行连接,请将本地表包装在子查询中。uxmpp的子查询执行逻辑将允许联接工作。

  7. 是否有uxmpp不支持的uxdb功能?

    由于uxmpp通过UXDB提供分布式功能,因此,澳门游戏平台注册网站可以使用UXDB自身提供的工具和特性用于分布式表。

    uxmpp支持分布式表上的大部分SQL查询,以下除外:

    • 相关子查询

    • WITH RECURSIVE(递归)

    • TABLESAMPLE

    • SELECT ... FOR UPDATE/SHARE

    • 分组集合(GROUPING SETS、CUBE、ROLLUP)

    • PARTITION BY不包含分布列的OVER函数

    uxmpp对访问数据库集群中单个节点的查询提供100%的SQL支持。

  8. 在对数据进行hash分区时,如何选择分片数?

    首次分发表时可以选择其分片数。可以为每个表设置不同的分片数,最佳值取决于用例。在创建群集后也可以更改分片数,但是比较麻烦,因此建议首次分发的时候确定好分片数。

    在多租户数据库用例中,澳门游戏平台注册网站建议在32到128个分片之间进行选择。对于较小的工作负载(例如<100GB),您可以从32个分片开始,对于较大的工作负载,您可以选择64或128。

    在实时分析用例中,分片数应与worker的CPU核数相关。要确保最大并行度,应在每个节点上创建足够的分片,以使每个CPU核至少有一个分片。建议创建大量初始分片,例如当前CPU核数的2倍或4倍。

    为要分发的表选择分片数,可以修改uxmpp.shard_count的值。这会影响对create_distributed_table的后续调用。例如:

    SET  uxmpp.shard_count  =  64; 

    此时分发的任何表都有64个分片

  9. 在哪些情况下,分布式表支持唯一性约束?

    只有当受约束的列包含分发列时,uxmpp才能强制执行主键或唯一性约束。特别地,这意味着如果单个列构成主键,那么它也必须是分发列。

    此限制允许uxmpp将唯一性检查本地化为单个分片,并让工作节点上的uxdb有效地进行检查。

  10. 如何在uxmpp群集中创建数据库角色,功能,扩展等?

    某些命令在协调器节点上运行时,不会传播给worker,如:

    CREATE ROLE/USER
    CREATE FUNCTION
    CREATE TYPE
    CREATE EXTENSION
    CREATE DATABASE
    ALTER … SET SCHEMA
    ALTER TABLE ALL IN TABLESPACE

    但是可以通过在所有节点上显式运行它们来使用这些命令。uxmpp提供了一个跨所有工作程序执行查询的功能:

    SELECT  run_command_on_workers ($cmd$ 
      / *运行命令* / 
      CREATE FUNCTION ... 
    $cmd$);

  11. 如果工作节点的地址发生变化怎么办?

    如果worker的主机名或IP地址发生更改,则可以通过master_update_node函数来进行变更:

    --更新协调器上的工作节点元数据(记得将'old-address'和'new-address' 替换为实际使用值)
    select master_update_node(nodeid, 'new-address', nodeport)
      from ux_dist_node
     where nodename = 'old-address';

    在执行此更新之前,协调器将无法与该工作程序进行通信。

  12. 哪个分片包含特定租户的数据?

    uxmpp提供元数据表,以确定分发列值到特定分片的映射,以及工作节点上的分片放置。参阅第?4.6?节

  13. 哪个分片包含特定租户的数据?

    uxmpp提供元数据表,以确定分发列值到特定分片的映射,以及工作节点上的分片放置。参阅第?4.6?节

  14. 为什么ux_relation_size报告分布式表的零字节?

    分布式表中的数据存在于工作节点(在分片中),而不在协调器上。分布式表大小的真实度量是作为分片大小的总和获得的。uxmpp提供帮助函数来查询此信息。

  15. 为什么看到有关max_intermediate_result_size的错误?

    uxmpp必须使用多个步骤来运行具有子查询或CTE的查询。它将子查询结果推送到所有工作节点以供主查询使用。如果这些结果太大,则可能会导致不可接受的网络开销,甚至协调器节点上的存储空间不足。

    uxmpp具有可配置的设置,uxmpp.max_intermediate_result_size用于指定取消查询的子查询结果大小阈值。如果您遇到如下错误,可设置此参数:

    ERROR:  the intermediate result size exceeds citus.max_intermediate_result_size (currently 1 GB)
    DETAIL:  Citus restricts the size of intermediate results of complex subqueries and CTEs to avoid accidentally pulling large result sets into once place.HINT:  To run the current query, set citus.max_intermediate_result_size to a higher value or -1 to disable.

  16. cstore_fdw如何与uxmpp合作?

    uxmpp像普通的uxdb表一样处理cstore_fdw表。当cstore_fdw与uxmpp一起使用时,每个逻辑分片都被创建为外部cstore_fdw表而不是常规uxdb表。如果您的cstore_fdw用例适用于uxmpp的分布式特性(例如大型数据集归档和报告),则可以使用这两者来提供一个功能强大的工具,它结合了uxmpp的查询并行化,无缝分片和HA优势以及出色的压缩和I/O利用cstore_fdw。

  17. 无法连接到新增worker节点?

    1. 查看添加节点信息是否正确。

    2. 查看master和worker的网络是否相通。

    3. 查看worker节点集群是否正常启动。

    4. 是否加载了uxmpp插件。

    5. 是否加载了license,可在启动集群的时候查看启动日志,licens是否加载成功。

    6. 重新设置分片规则,uxmpp使用hash分布时,默认遵循前一个分布式表的分布规则。可以设置uxmpp.shard_count来重新生成分布规则。

XML 地图 | Sitemap 地图