并行度相关参数主要决定每个 query 并发时的 worker 个数。
上述两个参数一个是控制最大的并发度,一个是用来决策 query 在并行查询时是否排队。两者需要协同工作,如果只使用 parallel_max_servers 设置最大并行度,当查询过多时,会导致所有 worker 都被调度起来,导致 CPU 等资源紧张,查询性能下降。在 CPU 等资源有限的情况下,使用 parallel_servers_target 控制 query 进行排队可以提高整个并发的吞吐量。
可以通过 show variables 来查看这些参数的值,如下例所示:
Exchange(Shuffle)参数
参数名称 | 描述 | 取值范围 | 默认值 | 配置建议 |
dtl_buffer_size | 控制 exchange 算子之间(即transmit 和 receive 之间)发送数据时,每次发送数据的 buffer 的大小。即当数据达到了该值上限才进行发送,减少每行传输的代价。 | [0, 1800] | 10(目前会根据 CPU 个数计算得到,以实际大小为准) |
可以通过 show parameters 来查看参数的值,如下例所示:
+-------+----------+----------------+----------+----------------------------+-----------+-------+---------------------------------------------------------------------------------------------------+---------+--------+---------+-------------------+
| zone | svr_type | svr_ip | svr_port | name | data_type | value | info | section | scope | source | edit_level |
+-------+----------+----------------+----------+----------------------------+-----------+-------+---------------------------------------------------------------------------------------------------+---------+--------+---------+-------------------+
+-------+----------+----------------+----------+----------------------------+-----------+-------+---------------------------------------------------------------------------------------------------+---------+--------+---------+-------------------+
2 rows in set (0.00 sec)
OceanBase(root@oceanbase)>show parameters like '%dtl%';
| zone | svr_type | svr_ip | svr_port | name | data_type | value | info | section | scope | source | edit_level |
+-------+----------+----------------+----------+-----------------+-----------+-------+---------------+----------+---------+---------+-------------------+
| zone1 | observer | 100.81.152.114 | 36500 | dtl_buffer_size | NULL | 64K | to be removed | OBSERVER | CLUSTER | DEFAULT | DYNAMIC_EFFECTIVE |
+-------+----------+----------------+----------+-----------------+-----------+-------+---------------+----------+---------+---------+-------------------+