OceanBase 数据库并行查询(PX)的参数决定了并行查询的速度,主要包括并行度和 EXCHANGE 等相关参数 。
并行度参数
并行度相关参数主要决定每个查询并发时的 Worker 个数。详细信息如下表所示。
| 参数名称 | 描述 | 取值范围 | 默认值 | 配置建议 |
|---|---|---|---|---|
| parallel_servers_target | 当准备排队之前,控制检查查询要求的并行度和已统计的 Worker 总和是否超过该值。如果超过该值,则查询需要排队,否则查询继续执行。 | [0, 1800] | 10(目前会根据 CPU 个数计算得到,以实际大小为准) | 该参数主要是控制 PX 场景下,当准备进行并行查询时,如果没有足够 Worker 处理该查询,决定是否继续进行还是排队等待。 |
| _force_parallel_query_dop | 该参数在会话中指定查询 SQL 的默认并行度,在没有指定 PARALLEL Hint 情况下,查询SQL 的并行度受此变量控制。 | [1, +∞] | 1 | 根据实际需要。例如同一个会话中要运行一批并行查询SQL 又不想手动给每条 SQL 加上 Hint 时,建议使用此参数。 |
| _force_parallel_dml_dop | 该参数在会话中指定 DML SQL 的默认并行度,在没有指定 PARALLEL Hint 情况下,DML SQL 的并行度受此变量控制。 | [1,+∞] | 1 | 根据实际需要。例如同一个会话中要运行一批并行DML SQL 又不想手动给每条 SQL 加上 Hint 时,建议使用此参数。 |
可以通过 SHOW VARIABLES 来查看这些参数的值。
EXCHANGE(Shuffle)参数
EXCHANGE(Shuffle)参数主要用来控制在每个 DFO 之间进行数据传输时的参数控制,也就是数据进行 Shuffle 时的内存控制。OceanBase 数据库将数据传输封装成了叫做 DTL(Data Transfer layer)的模块。
| 参数名称 | 描述 | 取值范围 | 默认值 | 配置建议 |
|---|---|---|---|---|
| dtl_buffer_size | 控制 EXCHANG 算子之间(即Transmit 和 Receive 之间)发送数据时,每次发送数据的 Buffer 的大小。即当数据达到了该值上限才进行发送,减少每行传输的代价。 | [0, 1800] | 10(目前会根据 CPU 个数计算得到,以实际大小为准) | PX 场景下,EXCHANGE 之间发送数据依赖于该参数大小,一般不需要调整该参数,如果是为了减少发送数据次数等可以尝试进行修改,一般不建议修改该值大小。 |
可以通过 SHOW PARAMETERS 来查看参数的值,如下例所示:
obclient>SHOW PARAMETERS LIKE '%dtl%';
+-------+----------+----------------+----------+-----------------+-----------+-------+---------------+----------+---------+---------+-------------------+
| zone | svr_type | svr_ip | svr_port | name | data_type | value | info | section | scope | source | edit_level |
+-------+----------+----------------+----------+-----------------+-----------+-------+---------------+----------+---------+---------+-------------------+
| zone1 | observer | xxx.xxx.xxx.xxx | 36500 | dtl_buffer_size | NULL | 64K | to be removed | OBSERVER | CLUSTER | DEFAULT | DYNAMIC_EFFECTIVE |
+-------+----------+----------------+----------+-----------------+-----------+-------+---------------+----------+---------+---------+-------------------+
1 row in set
其他并行相关参数
| 参数名称 | 描述 | 取值范围 | 默认值 | 配置建议 |
|---|---|---|---|---|
| _enable_px_batch_rescan | 控制在 NLJ 生成分布式 PX RESCAN 计划执行时是否使用BATCH RESCAN, 可以获得更好的性能. | * True * False | True | 默认开启会获得更好的性能,但会消耗更多的内存。 |
| _bloom_filter_enabled | 控制在 HASH JOIN 场景下是否开启 BLOOM FILTER。 | * True * False | True | 在并行度大于 1 的情况下默认开启,如果 HASH JOIN 的连接条件过滤性不佳,打开 BLOOM FILTER 会有额外的开销,在此场景可以考虑关闭此功能。 |
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




