Citus插件初始化流程

2022-04-13 00:00:00 查询 执行 节点 设置 初始化

这一部分,主要是整理init时候,citus的实现。
入口函数为shared_library_init的_PG_init函数。

这里首先说一下在这一步处理的参数:

propagate_set_commands none/local
task_assignment_policy greedy/first-replica/round-robin
replication_model statement/streaming
task_executor_type adaptive/real-time/task-tracker
shard_placement_policy local-node-first/round-robin/random
use_secondary_nodes never/always
shard_commit_protocol 1pc/2pc
multi_task_query_log_level off,debug,log,notice,warning,error
multi_shard_modify_connection parallel/sequential

在hook这一步处理时候,首先判断当前是否有别的hook介入,如果有,则报错。
citus必须是个初始化的插件。

当前检查这四个hook:

planner_hook
ProcessUtility_hook
ExecutorStart_hook
ExecutorRun_hook

上来的步,是创建必要的文件夹CreateRequiredDirectories:

pg_foreign_file
pg_foreign_file/cached
“base/” PG_JOB_CACHE_DIR

RegisterCitusConfigVariables 设置必要的参数(详细参数列表见后附)

RegisterNodes 设置节点方法
RegisterCitusCustomScanMethods 设置自定义扫描方法

AdaptiveExecutorCustomScanMethods
TaskTrackerCustomScanMethods
CoordinatorInsertSelectCustomScanMethods
DelayedErrorCustomScanMethods

distributed_planner 设置执行计划hook

multi_ProcessUtility 设置进程工具hook

multi_relation_restriction_hook 设置表查询hook

multi_join_restriction_hook 设置join hook

CitusExecutorStart 设置启动hook

CitusExecutorRun 设置执行hook

multi_log_hook 设置日志hook

InitializeMaintenanceDaemon 初始化维护进程

TaskTrackerRegister 任务追踪器注册

InitializeTransactionManagement 初始化事务管理

InitializeBackendManagement 初始化后台进程管理

InitializeConnectionManagement 初始化连接管理

InitPlacementConnectionManagement 初始化placement连接管理

InitializeCitusQueryStats 初始化查询相关状态

后,对于upgrade时候,设置allow_system_table_mods为true,允许pg的er’jin’zhi升级

参数列表:

citus.node_connection_timeout 连接超时时间
citus.binary_master_copy_format 使用原生二进制序列化拷贝模式
citus.binary_worker_copy_format 使用原生二进制序列化拷贝模式
citus.enable_local_execution 允许shard的上的本地查询
citus.enable_single_hash_repartition_joins 在hash分区表之间,允许单个hash
citus.enable_fast_path_router_planner 允许快速路径路由的planner
citus.override_table_visibility 允许citus修改表的可见性
-在shard节点屏蔽掉shard出来的表
citus.enforce_foreign_key_restrictions 允许级联的外键检查
citus.subquery_pushdown 允许子查询下推到worker节点。
citus.log_multi_join_order 记录多表关联的顺序到服务器日志
citus.log_remote_commands 记录远程命令
citus.log_local_commands 记录本地命令
citus.log_intermediate_results 记录临时的结果
citus.log_distributed_deadlock_detection 记录发现的分布式死锁
citus.explain_distributed_queries 允许对分布式查询执行explain
citus.explain_all_tasks 显示所有的执行计划
citus.all_modifications_commutative 检查所有通讯
citus.distributed_deadlock_detection_factor
    设置检查死锁的延迟时间,如果设置为1000,则认为设置关闭
citus.recover_2pc_interval 设置2PC情况下,等待recovery的时间
citus.metadata_sync_interval 设置元数据同步的间隔时间
citus.metadata_sync_retry_interval 设置元数据同步重试的间隔时间
citus.select_opens_transaction_block 对于select也同样发出begin开启事务
citus.function_opens_transaction_block 对于函数调用显式开启事务
citus.force_max_query_parallelization 设置采用大并行度执行查询
citus.executor_slow_start_interval 是否对查询进行延迟发送,以重用连接
citus.enable_deadlock_prevention 避免在同一个shard上事务的并行执行
    从而避免死锁
citus.enable_ddl_propagation 允许DDL传播
citus.enable_object_propagation 允许创建的对象传播
citus.enable_create_type_propagation 允许create type传播
citus.enable_alter_role_propagation 允许alter role传播
citus.propagate_set_commands 允许set命令传播
citus.enable_router_execution 允许轮询执行
citus.shard_count 创建新表时候,默认的shard数量
citus.shard_replication_factor shard的复制的数量
citus.shard_max_size 设置单个shard大的大小,超过大小会被分裂
citus.sort_returning 对RETURNING返回的数据进行排序
citus.max_intermediate_result_size 设置CTE等内部结果集的大大小
citus.max_adaptive_executor_pool_size
    设置执行跨shard查询的时候,对于单个查询的执行
    调度器在每个工作节点可用的大的连接数
citus.max_worker_nodes_tracked 设置大的可以追踪的worker数量
citus.remote_task_check_interval 设置远程检查的间隔
citus.task_tracker_delay 设置task轮询调度的间隔
citus.max_cached_conns_per_worker 设置每个worker缓存的连接数量
citus.max_assign_task_batch_size 设置每次轮询时候,master发送的task数量
citus.max_tracked_tasks_per_node 设置每个节点“追踪的”任务数量
citus.max_running_tasks_per_node 设置每个节点可以运行的任务数量
citus.partition_buffer_size 设置分区时候,缓存的大小
citus.limit_clause_row_fetch_count 对于limit语句,每次获取的行数数量
citus.count_distinct_error_rate 对于使用了 postgresql-hll的情况
    期望的错误比例 count(distinct)
    0.0 则不修正,1.0不保证结果集可靠
citus.multi_shard_commit_protocol 提交时候的协议,2pc或者1pc
citus.single_shard_commit_protocol 单个shard提交时候的协议,2pc或者1pc
citus.task_assignment_policy 调度shar的顺序,具体解释看前文
citus.replication_model 复制模式,一般建议为streaming
citus.task_executor_type 这里adaptive为简单查询优化,tasktracker为复杂查询优化
citus.enable_repartition_joins 允许必要的时候,执行task tracker调度
citus.shard_placement_policy 设置新shard的位置
citus.use_secondary_nodes 允许select到从库节点查询
citus.multi_task_query_log_level 多节点查询的日志级别
citus.multi_shard_modify_mode 设置连接类型,并行还是顺序
citus.version citus的版本
citus.cluster_name cluster的名称
citus.writable_standby_coordinator 允许coordinator从库节点可写
citus.enable_version_checks create,alter extension时候检查版本
citus.enable_unique_job_ids 打开任务ID。
citus.next_shard_id 创建新的shard时候使用指定名称
citus.next_placement_id 创建新的placement时候使用指定名称
citus.max_task_string_size 设置worker上task部分描述内容的长度
citus.enable_statistics_collection 允许采集分析信息
citus.node_conninfo 设置到其他节点的连接参数

相关文章