一些配置参数会影响到uxmpp的使用,包括uxdb本身的参数和uxmpp特有的参数。要了解有关uxdb本身参数,可以参考《优炫数据库用户手册 V2.1》。本节澳门游戏平台注册网站主要讨论uxmpp特有的参数。修改uxmpp参数类似于uxdb参数的修改,可以修改配置文件或使用SET命令。
uxmpp.max_worker_nodes_tracked
(integer
)
此配置值限制哈希表的大小,从而限制工作节点数。此设置的默认值为2048。此参数只能在服务器启动时设置,并且在master节点上有效。
uxmpp.use_secondary_nodes
(enum
)
设置在为SELECT查询选择节点时使用的策略。如果将其设置为“always”,则规划器将仅查询在ux_dist_node中noderole列标记为"secondary"的节点。枚举值为:never:(默认)所有读取都发生在主节点上;always:读取针对secondary节点运行,并且禁用插入/更新语句。
uxmpp.cluster_name
(string
)
通知协调器节点规划器它协调哪个集群。设置cluster_name后,计划程序将仅查询该群集的工作节点。
uxmpp.enable_version_checks
(boolean
)
升级uxmpp版本需要重新启动服务器(以获取新的共享库),以及运行ALTER EXTENSION UPDATE命令。执行这两个步骤失败可能会导致错误或崩溃。此参数是检查代码的版本和扩展匹配的版本。默认是on。在极少数情况下,复杂的升级过程可能需要将此参数设置为off,禁用检查。
uxmpp.log_distributed_deadlock_detection
(boolean
)
是否在服务器日志中记录分布式死锁检测相关处理。它默认为off。
uxmpp.distributed_deadlock_detection_factor
(floating point
)
设置在检查分布式死锁之前等待的时间。默认值为2。设置值为-1则禁用分布式死锁检测。
uxmpp.multi_shard_commit_protocol
(enum
)
该参数时在哈希分布式表上执行复制时要使用的提交协议。对于每个单独的节点,复制在事务块中执行,以确保在复制期间发生错误时不会写入数据。但是,有一种特定情况,即复制在所有节点上都成功,但是提交事务之前发生了错误。此参数可用于在这种情况下通过选择以下提交协议来防止数据丢失:
2pc:(默认)在执行复制的时候,首先在各节点使用uxdb的提交为两段提交做准备,然后再由协调节点决定是否执行提交。可以使用COMMIT PREPARED或ROLLBACK PREPARED手动恢复或中止失败的提交。使用2pc时,应在各个节点上增大参数max_prepared_transactions的值,建议与max_connections相同。
1pc:在各个节点中直接提交。有极小的可能会造成数据丢失。
uxmpp.shard_replication_factor
(integer
)
设置分片的复制因子,即在节点上放置某一个碎片的数量。默认为1,即在节点放置的某一个碎片数为1。此参数可以在运行时设置,即对不同表有不同的值。该参数只对master上设置有效。参数值一般取决于集群的大小和节点故障率。
uxmpp.shard_count
(integer
)
设置hash分布式表的分片总数,默认为32。使用create_distributed_table创建hash分布式表的时候,使用这个值。此参数可在运行过程中设置,即不同的hash分布式表可以有不同的分片总数,此参数只对master上设置有效。
uxmpp.shard_max_size
(integer
)
设置append分布式表的分片表最大大小,默认是1GB。即append分布式表的一个分片超过1GB的时候,就会创建一个新的分片。此参数可在运行过程中设置,即不同的append分布式表可以有不同大小的分片,此参数只对master上设置有效。
uxmpp.limit_clause_row_fetch_count
(integer
)
该参数为limit子句优化设置每个任务获取的行数。在某些情况下,带有limit的查询子句可能需要从每个任务中获取所有行来生成结果。在这种情况下,设置从每个分片中获取指定的行数,会产生和实际结果有点偏差的近似结果。默认情况下,该参数值是-1,即禁用的。这个参数可以在运行时设置,对master生效。
uxmpp.count_distinct_error_rate
(floating point
)
该参数设置计算count(distinct)的容错率。默认是0。如果需要用到此值,建议设置为0.005。此参数可在运行过程中设置,对master生效。
uxmpp.task_assignment_policy
(enum
)
设置将任务分配给worker时的策略。master通过计划程序将任务分发到各worker节点上。该参数指定分发任务时使用哪种策略。目前,有三种策略:
greedy:默认策略,在worker之间平均分配任务。
round-robin:以循环的方式在不同的副本之间交替为worker分配任务。当分片总数小于worker数的时候,可使用这种策略更合适。
first-replica:根据插入顺序分配任务,即将任务分配给第一副本所在的worker。
这个参数可以在运行时设置,对master生效。
uxmpp.binary_worker_copy_format
(boolean
)
使用二进制复制格式在worker之间传输中间数据。在大型表连接期间,uxmpp可能必须在不同worker之间动态地重新分配和重新分配数据。默认情况下,此数据以文本格式传输。启用此参数指示数据库使用uxdb的二进制序列化格式来传输此数据。此参数对worker有效。
uxmpp.binary_master_copy_format
(boolean
)
使用二进制复制格式在master和worker之间传输数据。运行分布式查询时,worker将其中间结果传输master以进行最终聚合。默认情况下,此数据以文本格式传输。启用此参数指示数据库使用uxdb的二进制序列化格式来传输此数据。此参数可以在运行时设置,并且对master有效。
uxmpp.max_intermediate_result_size
(integer
)
通用表表达式(CTE)和复杂子查询的中间结果的最大大小。默认是1GB,值为-1表示没有限制。超出限制查询会被取消并打印错误消息。
uxmpp.enable_ddl_propagation
(boolean
)
该参数指定是否自动将DDL传播到所有的worker节点。默认是on。由于某些情况下,需要对对进行访问并且独占锁定,并自动传播到worker节点上,这会影响到uxmpp集群的性能。此时可以选择关闭该参数。
uxmpp.all_modifications_commutative
(boolean
)
uxmpp强制执行交换规则并获取适当的锁定以进行修改操作,以保证行为的正确性。例如,它假定INSERT语句与另一个INSERT语句交换,但不与UPDATE或DELETE语句交换。同样,它假定UPDATE或DELETE语句不与另一个UPDATE或DELETE语句交换。这意味着UPDATE和DELETE要求uxmpp获得更强大的锁。
如果有与INSERT或其他UPDATE交换的UPDATE语句,那么可以通过将此参数设置为on来放宽这些交换假设。当此参数设置为on时,所有命令都被视为可交换,并声明共享锁,这可以提高整体吞吐量。此参数可以在运行时设置,并且对master有效。
uxmpp.max_task_string_size
(integer
)
设置worker程序任务调用字符串的最大大小(以字节为单位)。更改此值需要重新启动服务器,在运行时无法更改。在主节点上的共享哈希表中跟踪活动worker程序任务。此配置值限制单个worker程序任务的最大大小。最小值:8192,最大值:65536,默认值12288。
uxmpp.remote_task_check_interval
(integer
)
设置uxmpp检查任务跟踪器执行程序管理的任务状态的频率。默认为10ms。master将任务分配给worker,然后定期检查每个任务的进度。这个配置值设置两个检查结果之间的时间间隔。此参数可以在运行时设置,对master生效。
uxmpp.task_executor_type
(enum
)
uxmpp有两种执行器类型用于运行分布式SELECT查询。可以通过设置此配置参数来选择所需的执行程序。此参数可选的值为:
real-time:实时执行程序,默认的执行程序。当涉及到聚合和跨多个分片的联合查询并且需要实时响应的时候,可选择此类型。
task-tracker:适合查询时间较长的复杂查询,这些查询需要跨节点进行数据重组的资源重新分配。
此参数可以在运行的时候设置,对master生效。
uxmpp.multi_task_query_log_level
(enum
)
为生成多个任务的查询(访问多个分片)设置日志级别。对多租户应用程序很有用,可以设置error或warning级别,可以通过租户id过滤到具体的租户。此参数可以在运行时设置,对master生效。默认值是off。此参数可选的值为:
off:关闭生成多个任务查询(跨多个分片)的日志。
debug:生成调试级别的日志。
log:生成日志级别的日志,包含运行的SQL查询。
notice:生成通知级别的日志。
warning:生成警告级别的日志。
error:生成错误级别的日志。
error一般在开发测试期间使用,在实际使用时建议使用log级别。
uxmpp.explain_all_tasks
(boolean
)
默认情况下,在分布式查询上运行EXPLAIN时显示单个劝拿庞蜗菲教ㄗ⒉嵬锯任务的输出。大多数情况下,EXPLAIN在各个任务中都是差不多的。但是有些时候,某些任务的计划方式不同或执行时间特别长。在此情况下,启用此参数可以输出所有任务的EXPLAIN。当然,这也会导致EXPLAIN花费更长的时间。
uxmpp查询计划程序首先屏蔽与查询无关的分片,然后将计划交给实时执行程序。为了执行计划,实时执行程序为每个分片打开一个连接,并使用两个文件描述符。如果查询遇到大量分片,则执行程序可能需要打开比max_connections更多的连接,或者使用比max_files_per_process更多的文件描述符。
在这种情况下,实时执行程序将开始限制任务以防止资源使用过高。由于此限制可能会降低查询性能,因此实时执行程序将发出适当的警告,建议需要增加这些参数才能保持所需的性能。下面简要讨论这些参数。
max_connections
(integer
)
数据库服务器的最大并发连接数,默认是100。某些内核可能只支持更少的连接数,可以在初始化集群的时候手动设置该参数,用以确认是否支持。实时执行程序会为其下发查询的每一个分片打开一个连接。需要在master和worker上同时修改该参数。
max_files_per_process
(integer
)
设置每个进程同时打开的最大的文件数,默认是1000。实时执行程序会为其下发查询的每一个分片提供两个文件描述符。增加此参数允许执行程序打开更多文件描述符,从而可以并行处理更多分片。需要在master和worker上同时修改该参数。
除了max_files_per_process之外,还可能需要使用ulimit命令来修改内核限制每个进程可打开大文件描述符。
uxmpp.enable_repartition_joins
(boolean
)
当实时执行程序执行重新分区连接失败时,会打印错误信息。但是当打开该参数时,可以临时切换到任务跟踪程序执行连接。默认是off。
uxmpp.task_tracker_delay
(integer
)
任务跟踪执行程序休眠时间,默认是200ms。任务跟踪执行器会定期遍历分配的任务,并安排和执行。然后再次遍历前会进入休眠时间。此参数即为休眠时间。此参数在workre上生效。通过减少休眠时间用以减少任务跟踪执行程序的延时,在分片段查询中很适用。
uxmpp.max_tracked_tasks_per_node
(integer
)
设置每个节点的最大跟踪任务数,默认为1024。对worker生效。如果希望每个worker节点能够跟踪更多任务,则需要增加此参数。如果此值低于所需值,则会报错,并提示它超出了共享内存,可以增加此参数。
uxmpp.max_assign_task_batch_size
(integer
)
master上的任务跟踪器执行器同步地将任务分批分配给worker上的守护进程。默认值是64。此参数设置在单个批处理中要分配的任务的最大数量。此参数可以在运行的时候设置,对master生效。
uxmpp.max_running_tasks_per_node
(integer
)
任务跟踪程序进程调度并执行分配给它的任务。此配置值设置在给定时间在一个节点上并发执行的任务的最大数量,默认值为8。对worker生效。此参数可以避免过多的任务访问磁盘出现I/O争用情况。如果查询是通过内存或者SSD提供的,那么可以增大此参数值,并且不必考虑I/O争用的情况。
uxmpp.partition_buffer_size
(integer
)
设置用于分区操作的缓冲区大小,默认为8MB。uxmpp允许在连接两个大表时将表数据重新分区为多个文件。在此分区缓冲区填满后,重新分区的数据将刷新到磁盘上的文件中。此参数可以在运行的时候设置,对worker生效。