本节主要从硬件配置、通用参数、MemStore 相关参数、Clog、事务及 RPC 相关参数、SQL 层及其他参数以及OBProxy 相关参数等方面提供最佳性能参数的配置参考。
硬件配置说明
作为原生的分布式关系数据库,OceanBase 数据库具有极强的可扩展性,服务器的硬件配置越高,数据库服务的性能也会越好。
本文以下表中的服务器配置为例,提供最佳性能配置参考。
服务器配置项 | 描述 |
---|---|
服务器数量 | 3 台 |
芯片 | Intel |
CPU | 96 C |
内存 | 512 G |
磁盘 | 2TB NVME SSD 存储 |
网卡 | 万兆网卡 |
操作系统 | Linux kernel 3.1 及以上 |
文件系统 | 建议使用 EXT4 或 XFS |
通用参数(集群级参数)
在通用参数中,您可以通过调整以下集群级参数来使性能达到最佳。
net_thread_count
配置说明
调整 Libeasy 网络的线程数,默认值为 12
。适当的调低该配置项能降低线程切换的开销,提升性能。
配置值
建议配置为 CPU 核数的 1/6,最少 4 个。
配置示例
obclient> ALTER SYSTEM SET net_thread_count = 4;
登录后复制
syslog_io_bandwidth_limit
配置说明
通过调整该参数的值,可以减小 observer.log
文件带来的 IO 消耗,但是调小该参数可能会导致丢失一些调试日志信息。
配置值
建议配置为 10M
。
配置示例
obclient> ALTER SYSTEM SET syslog_io_bandwidth_limit = '10M';
登录后复制
clog_sync_time_warn_threshold
配置说明
Clog 日志同步慢时会触发 Debug 日志的输出。通过从默认值 100ms
调整为 2000ms
,可以减少日志中输出的信息。
配置值
建议配置为 2000ms
。
配置示例
obclient> ALTER SYSTEM SET clog_sync_time_warn_threshold='2000ms';
登录后复制
syslog_level
配置说明
调整日志的打印级别,降低打印日志的开销,对性能会一定的好处,但是调整该参数可能会导致丢失一些调试日志信息。
配置值
建议配置为 INFO
。
配置示例
obclient> ALTER SYSTEM SET syslog_level=`INFO`;
登录后复制
通用参数(租户级参数)
cpu_quota_concurrency
配置说明
控制并发任务的个数,默认值为 4
。如果 CPU 使用过于繁忙,可以尝试调为 2
;如果并发很大,可以考虑再调大。适当的调低该配置项能降低线程切换的开销,提升性能。
配置值
建议配置为 4
。
配置示例
obclient> ALTER SYSTEM SET cpu_quota_concurrency = 4;
登录后复制
memory_limit_percentage
配置说明
调整 OceanBase 数据库占系统总内存的比例,提高 OceanBase 数据库可用的内存量。
配置值
建议配置为 80
。
配置示例
obclient> ALTER SYSTEM SET memory_limit_percentage = 80;
登录后复制
memstore_limit_percentage
配置说明
调整 MEMStore 占租户的内存比,需要尽量增大 MEMStore 的空间,但是可能对读操作会有影响。
配置值
建议配置为 50
。
配置示例
obclient> ALTER SYSTEM SET memstore_limit_percentage = 50;
登录后复制
MemStore 相关参数(租户级参数)
freeze_trigger_percentage
配置说明
调整启动冻结或转储的时机,让转储(Minor Compaction)尽早启动,使 MEMStore 内存尽早释放。
配置值
建议配置为 70
。
配置示例
obclient> ALTER SYSTEM SET freeze_trigger_percentage = 70;
登录后复制
writing_throttling_trigger_percentage
配置说明
调整写入速度的阈值,在 MEMStore 的内存使用率达到 80% 时便开启写入限速。
配置值
建议配置为 80
。
配置示例
obclient> ALTER SYSTEM SET writing_throttling_trigger_percentage = 80;
登录后复制
writing_throttling_maximum_duration
配置说明
触发写入限速后,调整限速的速率,控制剩余内存最多支持 1 小时的写入。
配置值
建议配置为 1h
。
配置示例
obclient> ALTER SYSTEM SET writing_throttling_maximum_duration = '1h';
登录后复制
Clog、事务及 RPC 相关参数(集群级参数)
_ob_trans_rpc_timeout
配置说明
增大事务处理的 RRC 超时时间(默认 3s 就会报错),减少 transaction need rollback
发生的概率。
说明
由于
_xx_xx
格式的参数为隐藏参数,无法通过SHOW PARAMETERS
语句来查询,您可以通过以下 SQL 语句查看该参数。
obclient> SELECT * FROM oceanbase.__all_virtual_sys_parameter_stat WHERE name='_ob_trans_rpc_timeout';
登录后复制
配置值
建议配置为 25s
。
配置示例
obclient> ALTER SYSTEM SET _ob_trans_rpc_timeout = '25s';
登录后复制
memory_chunk_cache_size
配置说明
该参数用于设置内存分配器缓存的内存块容量。降低 OceanBase 数据库内部 2 MB 内存块被操作系统回收的概率,增大 2 MB 内存块在 OceanBase 数据库内部的复用率,减少 RPC 因内存操作慢而导致超时的风险。
配置值
建议配置为 0M
。
配置示例
obclient> ALTER SYSTEM SET memory_chunk_cache_size = '0M';
登录后复制
trx_2pc_retry_interval
配置说明
该参数值过大会导致 Coordinator 和参与者之间的重试间隔过大,从而导致 Commit 时间过长,进一步影响查询效果。如果参数值过小,又可能导致 Schedular 频繁的重试。
配置值
建议配置为 500ms
。
配置示例
obclient> ALTER SYSTEM SET trx_2pc_retry_interval = '500ms';
登录后复制
high_priority_net_thread_count
配置说明
用于设置单独给 Election 等使用的网络线程,需要重启 OBServer 才能生效。设置后,通过检查日志中的 HIGH PRIO RPC EASY STAT
关键字,可以看到这些线程处理请求的总数。
配置值
建议配置为 2
。
配置示例
obclient> ALTER SYSTEM SET high_priority_net_thread_count = 2;
登录后复制
__easy_memory_limit
配置说明
通过调大 Libeasy 可使用的最大内存来调大发往单个 OBServer 的 RPC Packet 的排队上限。
说明
由于
__xx_xx
格式的参数为隐藏参数,无法通过SHOW PARAMETERS
语句来查询,您可以通过以下 SQL 语句查看该参数。
obclient> SELECT * FROM oceanbase.__all_virtual_sys_parameter_stat WHERE name='__easy_memory_limit';
登录后复制
配置值
建议配置为 20G
。
配置示例
obclient>ALTER SYSTEM SET __easy_memory_limit = '20G' ;
登录后复制
__easy_memory_reserved_percentage
配置说明
与 __easy_memory_limit
配合使用,可以降低 Easy 占用太多内存的风险。
说明
由于
__xx_xx
格式的参数为隐藏参数,无法通过SHOW PARAMETERS
语句来查询,您可以通过以下 SQL 语句查看该参数。
obclient> SELECT * FROM oceanbase.__all_virtual_sys_parameter_stat WHERE name='__easy_memory_reserved_percentage';
登录后复制
配置值
建议配置为 10
。
配置示例
obclient> ALTER SYSTEM SET __easy_memory_reserved_percentage = 10 ;
登录后复制
SQL 层及其他参数(集群级参数)
enable_sql_operator_dump
配置说明
允许 SQL 层操作(例如,Hash Join)Dump 中间结果,避免因超出内存大小限制而报错。
配置值
建议配置为 True
。
配置示例
obclient> ALTER SYSTEM SET enable_sql_operator_dump = true;
登录后复制
large_query_threshold
配置说明
调整大查询的阈值。
配置值
建议配置为 100s
。
配置示例
obclient> ALTER SYSTEM SET large_query_threshold = '100s';
登录后复制
trace_log_slow_query_watermark
配置说明
调整日志中记录 Slow Query 的阈值。Slow Query 在批处理中普遍耗时较长,调大该值可以降低 Slow Query 的记录数量。
配置值
建议配置为 10s
。
配置示例
obclient> ALTER SYSTEM SET trace_log_slow_query_watermark = '10s';
登录后复制
enable_sql_audit
配置说明
设置是否开启 SQL 执行信息的采集。关闭该配置项可以降低 CPU 资源消耗。
配置值
建议配置为 True
。
配置示例
obclient> ALTER SYSTEM SET enable_sql_audit=True;
登录后复制
autoinc_cache_refresh_interval
配置说明
调大自增列刷新的频率,可以减少性能损耗。
配置值
建议配置为 86400s
。
配置示例
obclient> ALTER SYSTEM SET autoinc_cache_refresh_interval='86400s';
登录后复制
enable_perf_event
配置说明
设置是否开启性能监控信息采集。关闭该配置项可以降低 CPU 资源消耗,提升性能,但是会丢失监控信息。
配置值
建议配置为 True
。
配置示例
obclient> ALTER SYSTEM SET enable_perf_event=True;
登录后复制
SQL 层及其他参数(租户级参数)
ob_enable_batched_multi_statement
配置说明
设置是否启用批处理功能的成组执行优化。
配置值
建议配置为 True
。
配置示例
obclient>ALTER SYSTEM SET ob_enable_batched_multi_statement = True;
登录后复制
SQL 层及其他参数(系统变量)
ob_sql_work_area_percentage
配置说明
调大租户的 SQL 层可使用的内存空间占比。
配置值
建议配置为 30
。
配置示例
obclient> SET GLOBAL ob_sql_work_area_percentage = 30;
登录后复制
ob_query_timeout
配置说明
增大查询的超时时长。
配置值
建议配置为3600000000
,表示 3600 秒。
配置示例
obclient> SET GLOBAL ob_query_timeout = 3600000000;
登录后复制
ob_trx_idle_timeout
配置说明
增大事务空闲超时时长。
配置值
建议配置为 300000000
,表示 300 秒。
配置示例
obclient> SET GLOBAL ob_trx_idle_timeout = 300000000;
登录后复制
ob_trx_timeout
配置说明
增大事务超时时长。
配置值
建议配置为2400000000
,表示 2400 秒。
配置示例
obclient> SET GLOBAL ob_trx_timeout = 2400000000;
登录后复制
parallel_servers_target
配置说明
提高 PX 的并行度的上限。
配置值
建议配置为 900
。
配置示例
obclient> SET GLOBAL parallel_servers_target = 900;
登录后复制
max_allowed_packet
配置说明
调整最大网络包大小。
说明
该变量不能通过
ALTER SESSION SET xxx = yyy;
语句的方式使其仅在当前 Session 生效,只能通过SET GLOBAL xxx = yyy
语句这种全局生效的修改方式。 使用时一般客户端与 Server 端均需要调整。
配置值
建议配置为 41943040
。
配置示例
obclient> SET GLOBAL max_allowed_packet = 41943040;
登录后复制
OBProxy 相关参数
enable_compression_protocol
配置说明
关闭压缩,减少 OBProxy 对 CPU 的占用。需要重启 OBProxy 机器才能生效。
配置值
建议配置为 False
。
配置示例
obclient> ALTER PROXYCONFIG SET enable_compression_protocol = False;
登录后复制
automatic_match_work_thread
配置说明
开启自动计算线程个数。需要重启 OBProxy 机器才能生效。
配置值
建议配置为 True
。
配置示例
obclient> ALTER PROXYCONFIG SET automatic_match_work_thread = True;
登录后复制
monitor_log_level
配置说明
设置监控日志的打印级别。
配置值
建议配置为 ERROR
。
配置示例
obclient> ALTER PROXYCONFIG SET monitor_log_level = 'ERROR';
登录后复制
xflush_log_level
配置说明
设置 xflush 日志的日志打印级别。
配置值
建议配置为 ERROR
。
配置示例
obclient> ALTER PROXYCONFIG SET xflush_log_level="ERROR";
登录后复制
syslog_level
配置说明
设置系统日志的日志打印级别。
配置值
建议配置为 ERROR
。
配置示例
obclient> ALTER PROXYCONFIG SET sys_log_level="ERROR";