70 lines
		
	
	
		
			4.9 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			70 lines
		
	
	
		
			4.9 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
| 并行查询的参数调优 
 | |
| ==============================
 | |
| 
 | |
| Oceanbase 数据库并行查询(PX)的参数决定了并行查询的速度,主要包括并行度和 EXCHANGE 相关参数 。
 | |
| 
 | |
| 并行度参数 
 | |
| --------------------------
 | |
| 
 | |
| 并行度相关参数主要决定每个 query 并发时的 worker 个数。
 | |
| 
 | |
| 
 | |
| |        **参数名称**         |                                          **描述**                                          |  **取值范围**   |           **默认值**            |                                 **配置建议**                                  |
 | |
| |-------------------------|------------------------------------------------------------------------------------------|-------------|------------------------------|---------------------------------------------------------------------------|
 | |
| | parallel_max_servers    | 控制每个服务器最大的并行执行线程个数,所有PX worker 加起来不能超过该值。                                                | \[0, 1800\] | 10(目前会根据 CPU 个数计算得到,以实际大小为准) | 该参数主要是控制 PX 场景下所有 PX worker 总数,建议值为可用 CPU个数的倍数关系。                         |
 | |
| | parallel_servers_target | 当 query 准备排队之前,控制检查 query 要求的并行度和已统计的 worker 总和是否超过该值。如果超过该值,则 query 需要排队,否则 query 继续执行。 | \[0, 1800\] | 10(目前会根据 CPU 个数计算得到,以实际大小为准) | 该参数主要是控制 PX 场景下,当 query 准备进行并行查询时,如果没有足够 worker 处理该 query,决定是否继续进行还是排队等待。 |
 | |
| 
 | |
| 
 | |
| 
 | |
| `parallel_max_servers` 参数用于控制最大的并发度,`parallel_servers_target` 参数用来决策 query 在并行查询时是否排队,两者需要协同工作。如果只使用 `parallel_max_servers` 设置最大并行度,当查询过多时,会导致所有 worker 都被调度起来,导致 CPU 等资源紧张,查询性能下降。在 CPU 等资源有限的情况下,使用 `parallel_servers_target` 控制 query 进行排队可以提高整个并发的吞吐量。
 | |
| 
 | |
| 可以通过 `SHOW VARIABLES` 来查看这些参数的值,如下例所示:
 | |
| 
 | |
| ```javascript
 | |
| obclient>SHOW VARIABLES LIKE '%paral%';
 | |
| 
 | |
| +-------------------------+-------+
 | |
| | Variable_name           | Value |
 | |
| +-------------------------+-------+
 | |
| | ob_max_parallel_degree  | 32    |
 | |
| | ob_stmt_parallel_degree | 1     |
 | |
| | parallel_max_servers    | 5     |
 | |
| | parallel_servers_target | 4     |
 | |
| +-------------------------+-------+
 | |
| 4 rows in set (0.00 sec)
 | |
| ```
 | |
| 
 | |
| 
 | |
| **注意**
 | |
| 
 | |
| 
 | |
| 
 | |
| `ob_stmt_parallel_degree` 参数不需要设置,对 PX 框架无效。
 | |
| 
 | |
| EXCHANGE(Shuffle)参数 
 | |
| ----------------------------------------
 | |
| 
 | |
| EXCHANGE(Shuffle)参数主要用来控制在每个 DFO 之间进行数据传输时的参数控制,也就是数据进行 shuffle 时的内存控制。Oceanbase 数据库将数据传输封装成了叫做 DTL(Data Transfer layer)的模块。
 | |
| 
 | |
| 
 | |
| |    **参数名称**     |                                            **描述**                                            |  **取值范围**   |           **默认值**            |                                   **配置建议**                                    |
 | |
| |-----------------|----------------------------------------------------------------------------------------------|-------------|------------------------------|-------------------------------------------------------------------------------|
 | |
| | dtl_buffer_size | 控制 EXCHANGE 算子之间(即transmit 和 receive 之间)发送数据时,每次发送数据的 buffer 的大小。即当数据达到了该值上限才进行发送,减少每行传输的代价。 | \[0, 1800\] | 10(目前会根据 CPU 个数计算得到,以实际大小为准) | PX 场景下,EXCHANGE 之间发送数据依赖于该参数大小,一般不需要调整该参数,如果是为了减少发送数据次数等可以尝试进行修改,一般不建议修改该值大小。 |
 | |
| 
 | |
| 
 | |
| 
 | |
| 可以通过 `SHOW PARAMETERS` 来查看参数的值,如下例所示:
 | |
| 
 | |
| ```javascript
 | |
| obclient>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 |
 | |
| +-------+----------+----------------+----------+-----------------+-----------+-------+---------------+----------+---------+---------+-------------------+
 | |
| 1 row in set (0.01 sec)
 | |
| ```
 | |
| 
 | |
| 
 | 
