OceanBase V4.2.5
⭐️查看配置参数的方法:
show parameters like '%memstore_limit_percentage%';
select * from oceanbase.gv$ob_parameters where name='freeze_trigger_percentage';
⭐️查看系统变量的方法:
show variables like '%ob_query_timeout%';
内存调优推荐配置
参数 | 参数类型 | 推荐值 | 参数说明 | 修改后生效方式 |
---|---|---|---|---|
memory_limit | 集群参数 | 实际物理内存的80%大小 | 用于设置OBServer可用的总内存大小。默认为0,单位为MB。修改memory_limit 的值时必须大于OBServer节点实际已使用的内存才会生效。 | 动态生效 |
memory_limit_percentage | 集群参数 | 80 | 用于设置 OBServer 总可用内存大小占总内存大小的百分比。默认为80。如果memory_limit 的值不为0时,系统会忽略memory_limit_percentage 的设置而优先使用memory_limit 配置的值。 | 动态生效 |
memstore_limit_percentage | 集群参数 | 0 | 用于设置租户使用MemStore的内存占其总可用内存的百分比。默认为0,表示自适应调整。 | 动态生效 |
freeze_trigger_percentage | 租户参数 | 15 | 用于设置触发冻结的租户使用MemStore内存的阈值百分比。默认为20。 | 动态生效 |
writing_throttling_trigger_percentage | 租户参数 | 80 | 用于设置写入速度的阈值。默认为60。 | 动态生效 |
compaction_high_thread_score | 租户参数 | 12 | 用于设置高优先级Compaction的工作线程数。高优先级是指对Mini SSTable进行Compaction操作。默认为0,表示使用6个工作线程。 | 动态生效 |
登录到SYS租户进行配置:
--查看实际已使用的内存
SELECT value/1024/1024/1024 used_gb FROM v$sysstat WHERE name LIKE '%observer memory%' AND con_id = 1 AND stat_id=140008 AND name='observer memory used size';
--memory_limit的优先级高于memory_limit_percentage
ALTER SYSTEM SET memory_limit='200G';
ALTER SYSTEM SET memory_limit_percentage='80';
ALTER SYSTEM SET memstore_limit_percentage = 60;
--配置租户级参数时需要指定租户
ALTER SYSTEM SET freeze_trigger_percentage = 15 tenant = tpcc;
ALTER SYSTEM SET compaction_high_thread_score = 12 tenant = tpcc;
ALTER SYSTEM SET writing_throttling_trigger_percentage = 80 tenant = tpcc;
数据文件推荐配置
参数 | 参数类型 | 推荐值 | 参数说明 | 修改后生效方式 |
---|---|---|---|---|
data_disk_usage_limit_percentage | 集群参数 | 90 | 用于设置数据文件最大可以写入的百分比,超过这个阈值后,禁止数据迁入。默认为90。 | 动态生效 |
datafile_maxsize | 集群参数 | 视磁盘空间上限而定 | 无共享(Shared-Nothing)模式下设置磁盘文件自动扩容的空间上限。共享存储(Shared-Storage)模式下无意义,修改不会生效。默认为0,单位为MB。 | 动态生效 |
datafile_next | 集群参数 | 不建议配置的太小,避免频繁触发自动增长 | 无共享(Shared-Nothing)模式下设置磁盘文件自动扩容的增长步长。共享存储(Shared-Storage)模式下无意义,修改不会生效。默认为0,单位为MB。 | 动态生效 |
datafile_size | 集群参数 | 视应用数据量而定,后续可配置文件自动增长。数据与日志共用磁盘时,配置为磁盘总空间的60%;数据独占磁盘时,配置为磁盘总空间的90% | 无共享(Shared-Nothing)模式下设置数据文件大小。共享存储(Shared-Storage)模式下设置本地缓存空间大小。默认为0M。修改时不支持缩小,只支持扩大。 | 动态生效 |
登录到SYS租户进行配置:
ALTER SYSTEM SET datafile_maxsize = '1024G';
ALTER SYSTEM SET datafile_next = '10G';
ALTER SYSTEM SET datafile_size='80G';
日志文件推荐配置
参数 | 参数类型 | 推荐值 | 参数说明 | 修改后生效方式 |
---|---|---|---|---|
log_disk_size | 集群参数 | 日志与数据共用磁盘时,配置为磁盘总空间的30%;日志独占磁盘时,配置为磁盘总空间的90% | 用于设置Redo日志磁盘的大小,即本OBServer可以使用的日志盘总空间大小。默认为0,单位为MB。 | 动态生效 |
syslog_disk_size | 集群参数 | 0M | 用于设置系统日志的磁盘空间上限。当系统日志的总大小将要达到该上限时,最旧的日志文件将会被删除,包括已压缩的日志文件。默认为0M。 | 动态生效 |
enable_syslog_recycle | 集群参数 | True | 用于设置是否打开记录OBServer节点启动前的旧日志的开关,默认为False。与max_syslog_file_count 配合使用,决定回收逻辑是否考虑旧的日志文件。 | 动态生效 |
enable_syslog_wf | 集群参数 | True | 用于设置是否把WARN以上上级别的系统日志打印到一个单独的日志文件中。默认为True。 | 动态生效 |
max_syslog_file_count | 集群参数 | 100~200 | 用于设置在回收日志文件之前可以容纳的日志文件数量。每个日志文件最多可以占用256 MB磁盘空间。配置为0时,不会删除任何归档日志。默认为0。当且仅当该配置项大于0且该值大于等于syslog_file_uncompressed_count 值,同时enable_syslog_recycle 为True 时才生效。 | 动态生效 |
syslog_file_uncompressed_count | 集群参数 | 0 | 设置系统日志不压缩的文件数量。只在syslog_compress_func 不为none 时生效,每一种系统日志文件单独计算数量,不包括没有时间戳的日志文件。 | 动态生效 |
syslog_compress_func | 集群级 | none | 设置系统日志的压缩算法,默认值为none ,表示关闭压缩功能。可选的压缩算法有zstd_1.0 和zstd_1.3.8 算法,设置可用的算法表示开启压缩功能。 | 动态生效 |
⚠️ log_disk_size
与syslog_disk_size
的区别:
log_disk_size
对应事务日志盘的大小,日志路径一般为/data/log1/obcluster/clog
。syslog_disk_size
对应OceanBase运行日志,日志路径一般为/home/admin/oceanbase/log
。主要包括以下五种日志:election.log
observer.log
rootservice.log
trace.log
alert.log
登录到SYS租户进行配置:
ALTER SYSTEM SET log_disk_size='600G';
ALTER SYSTEM SET syslog_disk_size='0M';
ALTER SYSTEM SET enable_syslog_wf = True;
ALTER SYSTEM SET enable_syslog_recycle = True;
ALTER SYSTEM SET syslog_file_uncompressed_count = 0;
ALTER SYSTEM SET syslog_compress_func = 'none';
ALTER SYSTEM SET max_syslog_file_count=100;
📖 配置项syslog_compress_func
与配置项syslog_file_uncompressed_count
、syslog_disk_size
、max_syslog_file_count
之间的关系:
-
syslog_compress_func =none
:syslog_file_uncompressed_count
的取值无效;syslog_disk_size
和max_syslog_file_count
共同控制日志文件上限,同时满足数量和大小限制。
-
syslog_compress_func !=none
:max_syslog_file_count
的取值无效;- 日志个数超过
syslog_file_uncompressed_count
取值的部分进行压缩,整体接近syslog_disk_size
取值时开始删除最旧的日志。
📖 配置项max_syslog_file_count
与syslog_disk_size
的关系如下:
max_syslog_file_count=0
且syslog_disk_size=0
:不回收日志,直到磁盘写满。max_syslog_file_count=0
且syslog_disk_size>0
:当日志总大小接近syslog_disk_size
时,开始删除最旧的日志文件。max_syslog_file_count>0
且syslog_disk_size=0
:当某种日志文件的数量超过max_syslog_file_count
时,开始删除最旧的日志文件max_syslog_file_count>0
且syslog_disk_size>0
:当某种日志文件的数量超过max_syslog_file_count
时,或者当日志总大小接近syslog_disk_size
时,开始删除最旧的压缩文件。
超时时间推荐配置
OceanBase数据库超时时间通过系统变量进行控制,主要包含以下参数:
系统变量 | 参数类型 | 推荐值 | 参数说明 |
---|---|---|---|
ob_query_timeout | Global/Session级别 | OLTP业务可以设置得小一点,OLAP业务可以设置的大一些 | 用于设置SQL最大执行时间。默认值为10000000,单位为微秒。 |
ob_trx_timeout | Global/Session级别 | 86400000000 | 用于设置事务超时时间。默认值为86400000000,单位为微秒。 |
ob_trx_idle_timeout | Global/Session级别 | 86400000000 | 用于设置事务空闲超时时间,即事务中两条语句之间的执行间隔超过该值时超时。默认值为86400000000,单位为微秒。 |
ob_trx_lock_timeout | Global/Session级别 | OLTP业务可以设置得小一点,OLAP业务可以设置的大一些 | 用于设置事务的等锁超时时长。单位为微秒。默认值为-1,表示不生效。 |
wait_timeout | Global/Session级别 | 28800 | 用于设置服务器关闭非交互连接之前等待活动的秒数。默认为28800秒。 |
interactive_timeout | Global/Session级别 | 28800 | 用于设置服务器关闭交互式连接前等待活动的秒数。默认为28800秒。 |
登录到用户租户进行配置:
SET GLOBAL ob_query_timeout = 20000000; --OLTP参考值
SET GLOBAL ob_query_timeout = 43200000000; --OLAP参考值
SET GLOBAL ob_trx_timeout =86400000000;
SET GLOBAL ob_trx_idle_timeout =86400000000;
SET GLOBAL ob_trx_lock_timeout = 3000; --OLTP参考值
SET GLOBAL ob_trx_lock_timeout = 120000000; --OLAP参考值
SET GLOBAL wait_timeout = 28800; --默认连续8小时处于非活跃状态即断开连接
SET GLOBAL interactive_timeout = 28800;
单机部署推荐配置
OceanBase数据库单机版推荐进行如下配置,以达到最佳性能:
参数/系统变量 | 参数类型 | 推荐值 | 参数说明 | 修改后生效方式 |
---|---|---|---|---|
syslog_level | 集群级配置项 | WARN | 仅保留需要DBA关注的或者干预的非预期场景的日志 | 动态生效 |
enable_syslog_recycle | 集群级配置项 | 1 | 开启系统日志回收 | 动态生效 |
max_syslog_file_count | 集群级配置项 | 80 | 保留80个日志文件,总共占用20G日志空间。需要按照服务器空间情况进行配置。 | 动态生效 |
enable_record_trace_log | 集群级配置项 | false | 用于设置是否记录追踪日志 | 动态生效 |
ignore_replay_checksum_error | 集群级配置项 | true | 关闭回放checksum校验,主在开日志的时候也有开销,需额外校验checksum值。 | 动态生效 |
_lcl_op_interval | 集群级配置项 | '0ms' | 关闭死锁检测 | 动态生效 |
_enable_defensive_check | 集群级配置项 | false | 禁用4377校验 | 动态生效 |
登录到SYS租户进行配置:
ALTER SYSTEM SET syslog_level = 'WARN';
ALTER SYSTEM SET enable_syslog_recycle = 1;
ALTER SYSTEM SET max_syslog_file_count = 80;
ALTER SYSTEM SET enable_record_trace_log = false;
ALTER SYSTEM SET ignore_replay_checksum_error = true;
ALTER SYSTEM SET _lcl_op_interval = '0ms';
ALTER SYSTEM SET _enable_defensive_check = false;
OLTP场景 vs OLAP场景
⭐️ OLTP场景:
--关闭SQL审计功能
ALTER system SET enable_sql_audit=false;
--关闭性能事件的信息收集功能
ALTER system SET enable_perf_event=false;
--设置系统日志级别为ERROR,减少日志
ALTER system SET syslog_level='ERROR';
--关闭记录追踪日志
ALTER system SET enable_record_trace_log=false;
--提高obproxy运行时内存上限
ALTER proxyconfig SET proxy_mem_limited='4G';
--关闭proxy的压缩协议功能
ALTER proxyconfig set enable_compression_protocol=false;
⭐️ OLAP场景:
--设置SQL工作区内存占整个租户内存百分比
SET GLOBAL ob_sql_work_area_percentage=80;
--设置SQL最大执行时间
SET GLOBAL ob_query_timeout=36000000000000;
--设置事务超时时间
SET GLOBAL ob_trx_timeout=36000000000000;
--设置最大网络包的大小
SET GLOBAL max_allowed_packet = 67108864;
--租户在每个节点上可申请的并行执行线程数量
SET GLOBAL parallel_servers_target=624;
以上。