Skip to main content

参数模板

背景

最近一段时间接触了一些 OceanBase 社区版的用户,发现大家的使用场景多种多样,但 OceanBase 的默认参数/配置项并不是适用所有场景,不同的使用场景往往有不同的参数设置最佳实践。例如 ob_query_timeout 默认是 10s,对于简单 OLTP 场景可能没问题,但对于 OLAP 类业务,尤其是耗时极长的复杂查询来说,可能并不合适。

为了能够对不同使用场景的集群和租户,提供更加合适的默认参数,OceanBase 近期提供了一个 “参数模板” 的功能,这两天试用了下,在这里简单做一个记录。

我自己测试过程中使用的 OBServer 社区版版本号是 4.3.2.1, OCP 社区版版本号是 4.3.1。推荐大家使用的 OCP 社区版版本号是 4.3.2 及以上版本,修复了一些已知问题,参数模板功能会更加完善。

检查参数模板的配置文件

在 OceanBase 的 OBServer 源码中,会维护若干种场景的配置项和参数默认值,并通过 RPM 包输出。用户在 OCP 中上传 OB 4.3 及以上版本的软件包时,OCP 后台会自动解析软件包中的配置文件,保存到集群/租户参数模板中。

image.png

解析配置文件并保存到特定的 meta 表中,可能需要一分钟左右,大家如果在 OCP 界面一直看不到参数模板的各种选项,可以确认 OCP 是否完成参数模板配置解析。步骤如下:

  1. 在 OCP 的 租户 - 租户管理 中复制 ocp_meta 租户的登录连接串

image.png

  1. 通过刚刚复制的连接串,登录相应的 OBServer 节点中的 ocp_meta 租户。
[xiaofeng.lby@obvos-dev-d3 /home/xiaofeng.lby]
$mysql -h1.2.3.4 -P2881 -u root@ocp_meta -p YourPassword

Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MySQL connection id is 3221740061
Server version: 5.7.25 OceanBase_CE 4.2.1.2
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
  1. 场景参数模板属于后台参数模板,虽然直接在参数模板页面看不到,但可以从 metadb 中确认是否存在。
MySQL [(none)]> use meta_database;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed

-- 查看集群级别的参数模板种类。这里只是示例,大家可以删除 limit 1 后执行。
MySQL [meta_database]> select * from meta_database.ob_cluster_parameter_template where `group` = 'scenario' limit 1 \G
*************************** 1. row ***************************
id: 1001
create_time: 2024-09-20 14:28:09
update_time: 2024-09-20 14:28:09
name: cluster parameter template for scenario HTAP, version 4.3.2.1-100000102024081217
creator_id: 200
modifier_id: 200
description: cluster parameter template for scenario HTAP, version 4.3.2.1-100000102024081217
built_in: 0
extra_data_json: {"fullVersion":"4.3.2.1-100000102024081217","scenario":"HTAP"}
group: scenario
1 row in set (0.04 sec)

-- 查看租户级别的参数模板种类。这里只是示例,大家可以删除 limit 1 后执行。
MySQL [meta_database]> select * from meta_database.ob_tenant_parameter_template where `group` = 'scenario' limit 1 \G
*************************** 1. row ***************************
id: 1001
create_time: 2024-09-20 14:28:09
update_time: 2024-09-20 14:28:09
name: tenant parameter template for scenario HTAP, version 4.3.2.1-100000102024081217
creator_id: 200
modifier_id: 200
description: tenant parameter template for scenario HTAP, version 4.3.2.1-100000102024081217
compatible_type: ALL
built_in: 0
extra_data_json: {"fullVersion":"4.3.2.1-100000102024081217","scenario":"HTAP"}
group: scenario
1 row in set (0.04 sec)

设置集群级的参数模板

用户在创建 4.3 及以上版本集群时,根据真实使用场景,可以选择以下几种场景参数模板。

image.png

步骤比较简单,在 OCP 中的 创建集群 页面,配置集群参数时,可以使用默认参数配置,也可以打开 参数配置 模块,并配置集群参数:

  • 可以逐个添加启动参数项并为其配置值。
  • 也可以单击 参数模板,然后选择一个参数模板,系统会将模板中的参数连同配置自动填充到此处。

测试使用的 OBServer 社区版 4.3.2.1 目前提供了 5 种内置参数模板,官网上的具体说明如下:

模板说明
HTAP 默认参数模板适用于混合 OLAP 和 OLTP 工作负载。通常用于从活动运营数据、欺诈检测和个性化建议中获取即时见解。 该模板适用于 OceanBase V4.3.0 及以上版本。
OLAP 默认参数模板用于实时数据仓库分析场景。 该模板适用于 OceanBase V4.3.0 及以上版本。
COMPLEX_OLTP 默认参数模板适用于银行、保险系统等工作负载。他们通常具有复杂的联接、复杂的相关子查询、用 PL 编写的批处理作业,以及长事务和大事务。有时对短时间运行的查询使用并行执行。 该模板适用于 OceanBase V4.3.0 及以上版本。
KV 默认参数模板用于键值工作负载和类似 hbase 的宽列工作负载,这些工作负载通常具有非常高的吞吐量并且对延迟敏感。 该模板适用于 OceanBase V4.3.0 及以上版本。
2.2.77 默认参数模板OceanBase 集群 V2.2.77 版本推荐使用的参数设置,供生产环境使用。

设置租户级的参数模板

image.png

步骤同样比较简单,在 OCP 的 租户 - 新建租户 界面中,打开 参数配置 模块,并配置租户参数:

  • 可以逐个添加启动参数项并为其配置值。
  • 也可以单击 参数模板,选择一个参数模板,系统会将模板中的参数连同配置自动填充到此处。

遇到的问题及解决方法

在试用过程中,遇到了一个小 BUG:在通过 OLAP 参数模板来创建租户时,由于 OCP 记录的部分元数据信息有误,导致误判断了个别参数的类型,导致租户创建失败(创建集群,以及通过除 OLAP 以外的参数模板创建租户,均不会触发这个 BUG)。报错信息如下:

image.png

OCP 的同学表示这个是已知问题,在即将(2024.09.24 暂未发布)发布的 OCP 4.3.2 社区版中会被修复。当前可以先通过在选择 OLAP 参数模板后,临时删除这几个没显示取值类型的参数(即图中的 parallel_degree_policy、_io_read_batch_size、_io_read_redundant_limit_percentage)。

image.png

租户创建好之后,手动去 租户 - 参数管理 中对这三个参数进行设置即可。

image.png

image.png

不同模板参数的性能测试

典型用户生产环境介绍

君野大佬帮忙对几种不同的模板参数,在代表不同场景的 benchmark 中进行了测试。在展示测试结果之前,先简单介绍下 OceanBase 社区版当前的 5 种典型用户生产环境:

  • express_oltp:互联网应用,简单的 CRUD SQL,大量点查,高并发
  • complex_oltp:传统行业应用,有复杂查询,大量 PL 和批作业
  • olap:在线分析处理和数仓
    • 典型负载:导入 -> 转换 -> 查询 -> 报表
      • 轻量:
        • ELT 而不是 ETL;
        • 使用 SQL 做数据转换;使用物化视图做实时加速;使用 SQL 做实时查询
        • 周边依赖简单轻量(无或少外部依赖)
    • 性能指标:响应时间秒级到小时级
    • 数据规模:100 TB
    • 数据模型:star-schema 多表关联;宽表多维 ad-hoc 查询
    • 读写模式:读多写少;写入为批量写入、update 少;查询种数少、查询并发低;查询以大范围扫描为主
    • 代表 benchmark:TPC-DS, TPC-H, ClickBench, SSB
    • 应用场景:实时数仓;营销分析;汇聚分析;Ad-hoc 查询;
  • htap:TP增强混合负载
    • 实时轻量级报表
      • 典型负载:在线事务写入->批作业->实时报表
      • 代表 benchmark:TPC-C + TPC-H, hybench
      • 分析数据规模:10TB
      • 性能指标:分析型查询响应时间亚秒级
      • 数据模型:大多按照关系模型范式设计
      • 读写模式:读多写多、读写并发都高;数据实时写入,包括事务型小数据量高并发写入和批量大事务写入;读包括事务型短查询和分析型大查询;
      • 应用场景:BI 报表;替换 “分库分表 + 汇聚库” 双库;Ad-hoc 查询;实时风控
    • 准实时决策分析
      • 典型负载:高并发在线交易 + 大规模实时数据分析
      • 分析数据规模:100TB
      • 性能指标:分析型查询响应时间压秒级到小时级
      • 数据模型:大多按照关系模型范式设计
      • 读写模式:读多写多、读写并发都高;数据实时写入,包括事务型小数据量高并发写入和批量大事务写入;读包括事务型短查询和分析型大查询,可以在应用端分离开;分析型查询允许数据稍旧;
      • 代表benchmark:TPC-C + TPC-DS,TPC-C + ClickBench
      • 应用场景:BI 报表;替换 “分库分表 + 汇聚库” 双库;Ad-hoc 查询;
  • kv:OBKV 接口定义的 HBase 兼容和 Key-Value 表模型访问模式,单分区访问,无 SQL 层。

各场景模板参数的默认值

测试环境

测试版本

  • observer : 4.3.2 社区版
  • obproxy : 4.2.3 社区版
硬件环境
  • observer 3 台 32c256g,机型为 ecs.r7.8xlarge,日志盘使用系统盘,clog 和 data 盘单独挂载两块云盘,磁盘性能级别为 PL1。
  • obproxy 单独部署在一台 64c128g ecs.c7.16xlarge
操作系统

操作系统为 CentOS 7.9 64位

echo "vm.max_map_count=655360" >> /etc/sysctl.conf; sysctl -p (obd启动检查项)
sudo sysctl -w kernel.sched_migration_cost_ns=0 (对标公有云内核参数优化)
租户规格

28c180g,3F,primary_zone=RANDOM

## 命令中的 scenario 取值为 express_oltp、complex_oltp、olap、htap、kv
obd cluster tenant create perf --max-cpu=28 --memory-size=180G -n mysql_tenant -o ${scenario}
部署配置文件
oceanbase-ce:
version: 4.3.2.0
servers:
- name: server1
ip: 略
- name: server2
ip: 略
- name: server3
ip: 略
global:
scenario: ${scenario}
home_path: /root/observer
data_dir: /data/1/storage
redo_dir: /data/2/redo
devname: eth0
memory_limit: 240G
log_disk_size: 700G
datafile_disk_percentage: 93
root_password: 123456
mysql_port: 2881
rpc_port: 2882
server1:
zone: zone1
server2:
zone: zone2
server3:
zone: zone3
obproxy-ce:
version: 4.2.3.0
depends:
- oceanbase-ce
servers:
-
global:
listen_port: 2886 ## External port. The default value is 2883.
home_path: /root/obproxy
enable_cluster_checkout: false
skip_proxy_sys_private_check: true
enable_strict_kernel_release: false

调参说明

性能数据基于各租户类型默认调参 + 各 workload 基础调参

workload 基础调参

sysbench

ALTER system SET enable_sql_audit=false;
ALTER system SET enable_perf_event=false;
ALTER system SET syslog_level='PERF';
alter system set enable_record_trace_log=false;

tpcc

#proxy
ALTER proxyconfig SET proxy_mem_limited='4G';
ALTER proxyconfig set enable_compression_protocol=false;

#sys
ALTER system SET enable_sql_audit=false;
select sleep(5);
ALTER system SET enable_perf_event=false;
ALTER system SET syslog_level='PERF';
alter system set enable_record_trace_log=false;

tpch

#sys
ALTER SYSTEM flush plan cache GLOBAL;
ALTER system SET enable_sql_audit=false;
select sleep(5);
ALTER system SET enable_perf_event=false;
ALTER system SET syslog_level='PERF';
alter system set enable_record_trace_log=false;

#测试租户
SET GLOBAL ob_sql_work_area_percentage = 80;
SET GLOBAL ob_query_timeout = 36000000000;
SET GLOBAL ob_trx_timeout = 36000000000;
SET GLOBAL max_allowed_packet = 67108864;
## parallel_servers_target = max_cpu * server_num * 8
SET GLOBAL parallel_servers_target = 624;

tpcds

#sys
ALTER SYSTEM flush plan cache GLOBAL;
ALTER system SET enable_sql_audit=false;
select sleep(5);
ALTER system SET enable_perf_event=false;
ALTER system SET syslog_level='PERF';
alter system set enable_record_trace_log=false;

#测试租户
SET GLOBAL ob_sql_work_area_percentage = 80;
SET GLOBAL ob_query_timeout = 36000000000;
SET GLOBAL ob_trx_timeout = 36000000000;
SET GLOBAL max_allowed_packet = 67108864;
## parallel_servers_target = max_cpu * server_num * 8
SET GLOBAL parallel_servers_target = 624;

测试数据

sysbench

调参

ALTER system SET enable_sql_audit=false;
ALTER system SET enable_perf_event=false;
ALTER system SET syslog_level='PERF';
alter system set enable_record_trace_log=false;

测试命令

使用 obd 封装的原生 sysbench 压测流程,obd 使用的 ob-sysbench 依赖 libobclient,这里在环境中执行 export ENABLE_PROTOCOL_OB20=0,关闭 v2 协议,与原生 sysbench 保持一致

obd test sysbench rn --tenant=perf --script-name=xxx.lua --table-size=1000000 --threads=xx  --report-interval=1 --rand-type=uniform --time=30 --db-ps-mode=disable 

测试数据 (QPS/95%rt)

Point Select 性能

Threadsexpress_oltpcomplex_oltpolaphtapkv
32163457.60/0.22162747.70/0.22161428.80/0.23162948.95/0.20163204.29/0.20
64296206.41/0.25291823.36/0.26291583.48/0.26293622.63/0.25295541.97/0.25
128505203.80/0.30493859.95/0.31492135.78/0.31498132.19/0.31505266.56/0.30
256798005.94/0.45794547.97/0.47803165.10/0.49797304.31/0.45794627.82/0.45
5121039286.05/0.901023822.11/1.141022666.33/1.121032713.76/0.901016045.20/0.92
10241013992.61/2.391011295.14/2.39997362.00/2.571004848.34/2.48990136.68/2.52

Read Only 性能

Threadsexpress_oltpcomplex_oltpolaphtapkv
32134791.19/4.10136145.15/3.97137486.55/3.96137327.53/3.95137750.08/3.96
64244754.37/4.49244093.17/4.57244641.01/4.57244586.46/4.57247914.45/4.49
128416929.45/5.37420143.73/5.47419772.35/5.28420445.05/5.28421381.09/5.28
256613453.13/7.56611436.43/8.28603989.96/8.28610998.14/7.43607015.73/8.13
512725364.76/16.12738362.91/17.65736059.64/15.83720899.31/16.12693449.90/26.20
1024715777.22/41.10707831.35/42.61697077.19/44.17706809.11/42.61699619.03/44.83

Write Only 性能

Threadsexpress_oltpcomplex_oltpolaphtapkv
3250914.06/5.0052894.62/4.9150589.47/5.6752088.46/4.7454033.87/4.41
6490119.99/5.4793447.67/5.3790202.65/5.3790264.56/5.5794874.07/5.00
128164488.33/5.77166099.69/5.57159493.96/5.99159005.24/6.09162650.65/5.57
256242240.38/8.13241749.01/8.43232320.85/8.43230522.31/8.74238971.17/7.84
512304060.67/13.70306416.65/13.70299155.86/13.70289147.63/13.95301695.38/13.22
1024345068.37/23.52348929.05/26.20306096.92/29.72327905.15/27.17313276.26/30.81

Read Write 性能

Threadsexpress_oltpcomplex_oltpolaphtapkv
3290881.38/7.8488141.94/8.2888216.59/8.5889948.44/7.9890592.37/7.98
64159748.46/8.90160695.31/9.06157714.41/10.09157230.31/9.39161391.32/8.90
128273142.95/10.46275431.02/10.27272648.28/10.27269700.79/11.24275952.12/10.46
256391348.85/15.27402154.83/15.00382679.53/16.71383447.47/15.27405787.34/14.46
512465031.62/28.67462574.18/33.72466465.96/26.20461249.29/27.66464724.24/27.66
1024525924.96/52.89535977.26/48.34510540.58/58.92522066.61/51.02521969.84/51.94

tpcc

调参

#proxy
ALTER proxyconfig SET proxy_mem_limited='4G';
ALTER proxyconfig set enable_compression_protocol=false;

#sys
ALTER system SET enable_sql_audit=false;
select sleep(5);
ALTER system SET enable_perf_event=false;
ALTER system SET syslog_level='PERF';
alter system set enable_record_trace_log=false;

测试命令

使用 obd 封装的 tpcc 压测流程,详细流程见官网:https://www.oceanbase.com/docs/common-oceanbase-database-0000000001954654

obd test tpcc rn --tenant=perf --tmp-dir=/data/2/tpcc  --warehouses=1000 --load-workers=40 --terminals=800 --run-mins=5 -v -O 2

测试数据

express_oltpcomplex_oltpolaphtapkv
tpmC (NewOrders)292204.95302608.69264422.69294316.6286362.9
tpmTOTAL648918.9672866.36587580.74654271.82636369.93
Transaction Count32463243366013293916632725143183132

tpch

调参

#sys
ALTER SYSTEM flush plan cache GLOBAL;
ALTER system SET enable_sql_audit=false;
select sleep(5);
ALTER system SET enable_perf_event=false;
ALTER system SET syslog_level='PERF';
alter system set enable_record_trace_log=false;

#测试租户
SET GLOBAL ob_sql_work_area_percentage = 80;
SET GLOBAL ob_query_timeout = 36000000000;
SET GLOBAL ob_trx_timeout = 36000000000;
SET GLOBAL max_allowed_packet = 67108864;
## parallel_servers_target = max_cpu * server_num * 8
SET GLOBAL parallel_servers_target = 624;

测试命令

使用 obd 封装的 tpch 压测流程,详细流程见官网:https://www.oceanbase.com/docs/common-oceanbase-database-0000000001953497

obd test tpch rn --user=root --test-server=server1 --tmp-dir=/data/2/ob   --tenant=perf --remote-tbl-dir=/home/admin -s 100

测试数据(均使用列存表)

express_oltpcomplex_oltpolaphtapkv
Q132.33s9.86s1.83s3.03s1.90s
Q21.42s0.52s0.22s0.26s0.22s
Q37.79s2.58s0.52s0.91s0.54s
Q49.55s3.01s0.27s0.66s0.27s
Q515.77s4.59s0.73s1.29s0.70s
Q60.25s0.11s0.06s0.06s0.05s
Q79.76s3.65s1.19s1.76s1.18s
Q85.72s1.85s0.39s0.61s0.38s
Q925.26s8.93s1.88s3.28s1.88s
Q103.96s1.74s0.46s0.75s0.46s
Q112.01s0.61s0.14s0.21s0.13s
Q126.00s1.89s0.33s0.66s0.39s
Q138.40s3.43s1.64s1.94s1.64s
Q140.99s0.45s0.19s0.25s0.19s
Q151.29s0.64s0.31s0.34s0.31s
Q162.69s1.07s0.53s0.61s0.51s
Q173.85s1.15s0.21s0.31s0.20s
Q1817.53s5.51s1.33s1.96s1.27s
Q191.49s0.60s0.24s0.31s0.23s
Q206.02s2.38s1.33s1.33s1.30s
Q2126.01s9.11s2.70s3.60s2.74s
Q226.01s2.23s0.79s1.00s0.78s
Total194.10s65.91s17.26s25.13s17.28s

tpcds

调参

#sys
ALTER SYSTEM flush plan cache GLOBAL;
ALTER system SET enable_sql_audit=false;
select sleep(5);
ALTER system SET enable_perf_event=false;
ALTER system SET syslog_level='PERF';
alter system set enable_record_trace_log=false;

#测试租户
SET GLOBAL ob_sql_work_area_percentage = 80;
SET GLOBAL ob_query_timeout = 36000000000;
SET GLOBAL ob_trx_timeout = 36000000000;
SET GLOBAL max_allowed_packet = 67108864;
## parallel_servers_target = max_cpu * server_num * 8
SET GLOBAL parallel_servers_target = 624;

测试命令

数据量为 100G,测试流程详见:https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000000931730

测试数据(均使用列存表)

Queryexpress_oltpcomplex_oltpolaphtapkv
Q10.620.330.210.210.20
Q210.193.290.991.260.99
Q30.200.130.110.110.11
Q436.4217.8911.2911.9011.39
Q53.951.790.981.111.00
Q60.550.310.220.230.32
Q70.810.380.190.210.29
Q80.550.320.240.240.22
Q92.150.950.470.510.48
Q101.810.850.520.540.50
Q1122.0910.947.097.357.13
Q120.470.290.220.240.23
Q130.530.270.180.190.19
Q1481.1926.907.8610.408.01
Q150.710.430.380.390.39
Q165.181.740.570.730.57
Q171.260.640.390.440.41
Q180.710.390.260.280.37
Q190.300.200.150.160.16
Q200.390.260.190.210.20
Q210.990.390.160.200.17
Q224.932.141.121.261.14
Q2392.3734.4213.2716.4113.41
Q243.471.550.840.930.85
Q251.140.590.410.430.40
Q260.490.260.160.190.16
Q271.140.540.310.330.31
Q281.370.950.830.840.86
Q293.941.340.460.560.45
Q300.400.270.220.220.22
Q312.371.080.600.670.59
Q320.120.110.100.100.10
Q331.210.870.630.660.62
Q342.220.770.220.290.20
Q353.571.510.760.850.72
Q361.980.850.290.400.29
Q370.520.320.230.240.23
Q387.002.991.501.701.52
Q392.981.310.720.810.71
Q400.290.180.150.150.14
Q410.040.040.040.030.04
Q420.180.120.100.100.10
Q433.891.430.470.600.47
Q440.500.450.440.460.45
Q450.470.370.350.360.35
Q460.970.460.280.300.27
Q475.122.110.991.110.98
Q480.540.290.170.180.16
Q491.250.960.840.850.82
Q508.072.360.440.650.44
Q5122.357.022.813.042.83
Q520.170.130.100.100.10
Q531.560.520.170.200.16
Q542.240.970.540.570.52
Q550.140.110.100.100.10
Q560.670.610.600.590.57
Q572.881.290.660.740.67
Q581.150.850.690.690.68
Q5918.736.562.102.642.04
Q601.160.850.670.690.66
Q610.410.330.290.290.29
Q623.001.150.370.470.36
Q631.570.520.160.200.16
Q646.743.011.451.711.42
Q654.181.660.730.860.70
Q661.000.610.380.400.37
Q6721.5613.4910.4310.2810.44
Q680.370.260.220.230.22
Q691.230.660.480.500.47
Q705.392.261.151.281.16
Q711.200.670.420.450.40
Q7222.3914.6810.4011.0910.44
Q730.630.320.170.200.17
Q7414.226.833.683.933.59
Q756.722.801.421.551.39
Q760.390.380.390.380.38
Q771.390.880.730.720.70
Q7814.465.912.573.002.56
Q792.661.170.480.560.48
Q802.941.500.971.000.95
Q810.630.290.160.180.16
Q820.780.450.320.330.37
Q831.140.750.580.590.58
Q840.580.280.180.180.18
Q850.710.450.360.360.36
Q861.140.560.340.390.35
Q877.293.041.591.721.57
Q881.830.780.290.360.29
Q891.780.720.230.320.24
Q900.440.220.140.150.14
Q910.140.110.100.100.10
Q920.110.100.100.100.10
Q937.682.240.470.640.47
Q942.741.080.490.560.49
Q9539.7518.006.978.236.72
Q962.430.780.200.260.20
Q977.342.641.011.221.04
Q980.640.420.310.330.31
Q996.002.160.680.800.65
Total570.64s242.76s119.88s134.26s119.98s

总结

通过参数模板创建租户后,在代表相应场景的 benchmark 测试中性能提升效果很明显。参数模板这个功能,后续必定会在 OceanBase 的用户中逐渐普及开来,推荐大家一试~

Loading...