在群集中分发数据后,每个worker都会针对最佳性能进行优化。在此之后,是调整一些分布式性能调整参数。
在讨论特定配置参数之前,澳门游戏平台注册网站建议查看分布式群集上的查询时间(启用\ timing),并将它们与单个分片性能进行比较。这有助于确定在master和worker上花费的时间,找出瓶颈并进行相应的优化。
本节中,澳门游戏平台注册网站将讨论有助于优化分布式查询计划程序和执行程序的参数。澳门游戏平台注册网站分两部分讨论,一般和高级。一般性能调优满足大部分用例,涵盖所以常见的配置。高级性能调优主要是在特定用例中提供性能增益。
一般调优
对于INSERT来说,对插入率影响最大的因素是并发级别。可以尝试并行运行多个INSERT语句。这样,如果您具有强大的master节点并且能够同时使用该节点上的所有CPU核心,则可以实现非常高的插入速率。
uxmpp有两种执行器类型用于运行SELECT查询。可以通过设置uxmpp.task_executor_type配置参数来选择所需的执行程序。如果您的用例主要需要简单的键值查找或需要对聚合和连接进行亚秒级响应,则可以选择实时执行程序。另一方面,如果有长时间运行的查询需要跨节点重新分区和重排数据,那么您可以切换到任务跟踪器执行程序。
除了上述之外,有两个配置参数在产生近似有意义的结果的情况下是有用的。这两个参数是uxmpp.limit_clause_row_fetch_count和uxmpp.count_distinct_error_rate。前者设置在计算时限制从每个任务获取的行数,而后者在计算近似不同计数时设置所需的容错率。
对于子查询/CTE,最好的情况下,在一个步骤中包含子查询/CTE。因为常是因为主查询和子查询都按表的分布列以相同的方式过滤,并且可以一起下推到工作节点。但是,uxmpp有时会在执行主查询前强制执行子查询,将子查询产生的中间结果复制到其他worker节点上供主查询使用。
如果子查询在单独的步骤中执行,则可以避免worker之间进行过多的数据传输,产生过多的网络开销,从而影响性能。
此外,可以通过设置uxmpp.max_intermediate_result_size,调整中间结果的大小,默认是1GB,这足以允许一些低效查询。
高级调优
uxmpp查询计划程序根据分片位置将任务分配给工作节点。可以通过设置uxmpp.task_assignment_policy配置参数来选择进行这些分配时使用的算法。用户可以更改此配置参数以选择最适合其用例的策略(修改参数方法可参考第?4.7?节)。
有两个配置参数与中间数据将跨节点间传输的格式相关,uxmpp.binary_master_copy_format和uxmpp.binary_worker_copy_format。启用前者使用二进制格式将中间查询结果从worker传输到master,而后者在worker间动态传输中间数据非常有用。
uxmpp默认以文本格式传输中间查询数据。因为文本文件通常具有比二进制表示更小的大小。因此,这会在写入和传输中间数据时导致较低的网络和磁盘I/O.但是,对于某些数据类型(如hll或hstore数组),序列化和反序列化数据的成本非常高。在这种情况下,使用二进制格式传输中间数据可以提高查询性能,因为CPU使用率降低。
如果需要亚秒响应时间的SELECT查询,则应使用实时执行程序。
实时执行程序打开一个连接,并为每个未修剪的分片使用两个文件描述符(在规划期间不相关的分片被排除)。因此,如果查询遇到大量分片,执行程序可能需要打开比max_connections更多的连接,或者使用比max_files_per_process更多的文件描述符。
这种情况下,实时执行程序将开始限制任务,以防止worker的压倒性资源。由于此限制可能会降低查询性能,因此实时执行程序将发出警告,建议应增加max_connections或max_files_per_process。
如果查询需要重新分区数据或更有效的资源管理,则应使用任务跟踪器执行程序。有两个配置参数可用于调整任务跟踪器执行程序的性能。
第一个是uxmpp.task_tracker_delay。任务跟踪器进程定期唤醒,遍历分配给它的所有任务,并安排和执行这些任务。此参数设置任务跟踪器在这些任务管理轮次之间的休眠时间。当分片查询很短并可以非定期更新其状态时,可以减少此参数的值。
第二个参数是uxmpp.max_running_tasks_per_node。此配置值设置在任何给定时间在一个worker节点上并发执行的最大任务数。此配置条目可避免多个任务同时访问磁盘,并有助于避免磁盘I/O争用。如果查询是从内存或SSD提供的,则可以增加此参数的值。