OceanBase性能关键参数配置最佳实践
OceanBase V4.2.5
⭐️查看配置参数的方法:
sql
show parameters like '%memstore_limit_percentage%';
select * from oceanbase.gv$ob_parameters where name='freeze_trigger_percentage';
⭐️查看系统变量的方法:
sql
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租户进行配置:
sql
--查看实际已使用的内存
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。修改时不支持缩小,只支持扩大。 | 动态生效 |
log_disk_size |
集群参数 | 日志与数据共用磁盘时,配置为磁盘总空间的30%;日志独占磁盘时,配置为磁盘总空间的90% | 用于设置Redo日志磁盘的大小,即本OBServer可以使用的日志盘总空间大小。默认为0,单位为MB。 | 动态生效 |
enable_syslog_wf |
集群参数 | True | 用于设置是否把WARN以上上级别的系统日志打印到一个单独的日志文件中。默认为True。 | 动态生效 |
max_syslog_file_count |
集群参数 | 80 | 用于设置在回收日志文件之前可以容纳的日志文件数量。每个日志文件最多可以占用256 MB磁盘空间。配置为0时,不会删除任何归档日志。默认为0。 | 动态生效 |
syslog_disk_size |
集群参数 | 0M | 用于设置系统日志的磁盘空间上限。当系统日志的总大小将要达到该上限时,最旧的日志文件将会被删除,包括已压缩的日志文件。默认为0M。 | 动态生效 |
登录到SYS租户进行配置:
sql
ALTER SYSTEM SET datafile_maxsize = '1024G';
ALTER SYSTEM SET datafile_next = '10G';
ALTER SYSTEM SET datafile_size='80G';
ALTER SYSTEM SET log_disk_size='40G';
ALTER SYSTEM SET max_syslog_file_count=20;
ALTER SYSTEM SET syslog_disk_size='50GB';
📖OceanBase V4.2.5 中,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秒。 |
登录到用户租户进行配置:
sql
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租户进行配置:
sql
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;
以上。