OceanBase 并行查詢的參數(shù)調(diào)優(yōu)

2021-06-30 10:04 更新

Oceanbase 數(shù)據(jù)庫(kù)并行查詢(PX)的參數(shù)決定了并行查詢的速度,主要包括并行度和 EXCHANGE 相關(guān)參數(shù) 。

并行度參數(shù)

并行度相關(guān)參數(shù)主要決定每個(gè) query 并發(fā)時(shí)的 worker 個(gè)數(shù)。

參數(shù)名稱

描述

取值范圍

默認(rèn)值

配置建議

parallel_max_servers

控制每個(gè)服務(wù)器最大的并行執(zhí)行線程個(gè)數(shù),所有PX worker 加起來(lái)不能超過(guò)該值。

[0, 1800]

10(目前會(huì)根據(jù) CPU 個(gè)數(shù)計(jì)算得到,以實(shí)際大小為準(zhǔn))

該參數(shù)主要是控制 PX 場(chǎng)景下所有 PX worker 總數(shù),建議值為可用 CPU個(gè)數(shù)的倍數(shù)關(guān)系。

parallel_servers_target

當(dāng) query 準(zhǔn)備排隊(duì)之前,控制檢查 query 要求的并行度和已統(tǒng)計(jì)的 worker 總和是否超過(guò)該值。如果超過(guò)該值,則 query 需要排隊(duì),否則 query 繼續(xù)執(zhí)行。

[0, 1800]

10(目前會(huì)根據(jù) CPU 個(gè)數(shù)計(jì)算得到,以實(shí)際大小為準(zhǔn))

該參數(shù)主要是控制 PX 場(chǎng)景下,當(dāng) query 準(zhǔn)備進(jìn)行并行查詢時(shí),如果沒(méi)有足夠 worker 處理該 query,決定是否繼續(xù)進(jìn)行還是排隊(duì)等待。

parallel_max_servers 參數(shù)用于控制最大的并發(fā)度,parallel_servers_target 參數(shù)用來(lái)決策 query 在并行查詢時(shí)是否排隊(duì),兩者需要協(xié)同工作。如果只使用 parallel_max_servers 設(shè)置最大并行度,當(dāng)查詢過(guò)多時(shí),會(huì)導(dǎo)致所有 worker 都被調(diào)度起來(lái),導(dǎo)致 CPU 等資源緊張,查詢性能下降。在 CPU 等資源有限的情況下,使用 parallel_servers_target 控制 query 進(jìn)行排隊(duì)可以提高整個(gè)并發(fā)的吞吐量。

可以通過(guò) SHOW VARIABLES 來(lái)查看這些參數(shù)的值,如下例所示:

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 參數(shù)不需要設(shè)置,對(duì) PX 框架無(wú)效。

EXCHANGE(Shuffle)參數(shù)

EXCHANGE(Shuffle)參數(shù)主要用來(lái)控制在每個(gè) DFO 之間進(jìn)行數(shù)據(jù)傳輸時(shí)的參數(shù)控制,也就是數(shù)據(jù)進(jìn)行 shuffle 時(shí)的內(nèi)存控制。Oceanbase 數(shù)據(jù)庫(kù)將數(shù)據(jù)傳輸封裝成了叫做 DTL(Data Transfer layer)的模塊。

參數(shù)名稱

描述

取值范圍

默認(rèn)值

配置建議

dtl_buffer_size

控制 EXCHANGE 算子之間(即transmit 和 receive 之間)發(fā)送數(shù)據(jù)時(shí),每次發(fā)送數(shù)據(jù)的 buffer 的大小。即當(dāng)數(shù)據(jù)達(dá)到了該值上限才進(jìn)行發(fā)送,減少每行傳輸?shù)拇鷥r(jià)。

[0, 1800]

10(目前會(huì)根據(jù) CPU 個(gè)數(shù)計(jì)算得到,以實(shí)際大小為準(zhǔn))

PX 場(chǎng)景下,EXCHANGE 之間發(fā)送數(shù)據(jù)依賴于該參數(shù)大小,一般不需要調(diào)整該參數(shù),如果是為了減少發(fā)送數(shù)據(jù)次數(shù)等可以嘗試進(jìn)行修改,一般不建議修改該值大小。

可以通過(guò) SHOW PARAMETERS 來(lái)查看參數(shù)的值,如下例所示:

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)
以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)