OBServer调优
通过调整OBServer参数,可以提升OceanBase的性能。
调优方法
本章节针对OBServer的CPU、IO、内存和网络传输相关参数提供了调优建议。
配置项 |
描述 |
建议 |
---|---|---|
workers_per_cpu_quota |
表示租户在每个CPU上能分配的最大工作线程数。 |
该参数是指系统分配给程序可使用的最大线程数量,而不是程序同时运行的最大线程数。一般情况下,这个参数不需要进行调整。 |
net_thread_count |
用于设置网络IO线程数。 |
通过top -H命令可以查看MySQL IO线程的利用率。如果发现某个线程的利用率超过90%,则该线程可能成为瓶颈,建议增加该参数以提高性能。如果所有线程的利用率都低于50%,则建议减小该参数,以减少线程切换的开销。 须知:
修改该参数后,需要重启OceanBase集群才能生效。 |
autoinc_cache_refresh_interval |
用于设置自动刷新后台线程的工作间隔时间。单位为s。 |
后台线程进行自动刷新会引起性能波动,建议将该参数值调大,以减少后台线程自动刷新的频率。 |
enable_early_lock_release |
用于控制在事务中锁定的行是否可以在事务提交之前被释放。 该参数为bool类型,值为true时表示开启,值为false时表示关闭。 |
建议在热点行场景下开启该功能,即将该参数设置为true。 |
enable_monotonic_weak_read |
用于控制是否启用弱一致性读取。 该参数为bool类型,值为true时表示开启,值为false时表示关闭。 |
建议在性能场景下关闭该功能,即将该参数设置为false。 |
weak_read_version_refresh_interval |
用于设置弱一致性读版本号的刷新周期,该参数影响弱一致性读数据的延时。单位为ms。 |
当该值为0时,将停止刷新弱一致性读版本号,不再提供单调读功能。建议在性能场景下关闭该功能以提高性能,即将该参数设置为0。 |
enable_sql_audit |
用于启用SQL审计功能。 该参数为bool类型,值为true时表示开启,值为false时表示关闭。 |
在生产环境中必须启用该功能,即将该参数设置为true;但在性能测试场景中可以根据需要进行关闭,即将该参数设置为false。 |
enable_perf_event |
用于设置是否开启性能事件的信息收集功能。 该参数为bool类型,值为true时表示开启,值为false时表示关闭。 |
在生产环境中必须启用该功能,即将该参数设置为true;但在性能测试场景中可以根据需要进行关闭,即将该参数设置为false。 |
enable_record_trace_log |
用于控制是否启用记录跟踪日志。 该参数为bool类型,值为true时表示开启,值为false时表示关闭。 |
在启用Perf Event和SQL Audit功能的生产环境中,可以关闭记录跟踪日志功能,即将该参数设置为false。 |
配置项 |
描述 |
建议 |
---|---|---|
syslog_io_bandwidth_limit |
用于限制syslog-ng在写入日志文件时的带宽。默认值为30MB。 |
建议设置为10MB。 |
clog_sync_time_warn_threshold |
当Clog同步的时间超过该阈值时,会记录一条警告信息。 |
建议将该参数调大。但是需要注意,调大该参数可能会对解决Clog同步慢问题的调查造成影响。 |
trace_log_slow_query_watermark |
在执行查询时,如果查询的执行时间超过该参数设置的阈值,则会被记录在慢查询日志中。 |
建议将该参数调大,以避免打印慢查询的跟踪日志。 |
max_syslog_file_count |
observer.log的最大数量,超过这个数量的日志文件将被自动删除。 |
建议根据磁盘容量调整该参数值。 |
enable_sql_operator_dump |
用于设置是否允许SQL处理过程的中间结果写入磁盘以释放内存。 该参数为bool类型,值为true时表示开启,值为false时表示关闭。 |
在OLAP场景下测试时,建议设置为true,以避免由于内存过大而产生报错。 |
builtin_db_data_verify_cycle |
用于设置数据坏块自检周期。单位为天。 当设置为0时表示关闭自检。 |
性能场景下,建议设置为0。 |
disk_io_thread_count |
用于设置磁盘IO线程数。 须知:
该参数值必须是偶数。 |
根据IO线程数的压力适当调整该参数值的大小。 |
enable_async_syslog |
用于开启或关闭异步syslog日志记录。 该参数为bool类型,值为true时表示开启,值为false时表示关闭。 |
性能场景下,建议开启异步syslog日志记录,即将该参数设置为true。 |
fuse_row_cache_priority |
用于设置融合行缓存在缓存系统中的优先级。 融合行缓存即在OceanBase数据库多级存储架构下,如果一行的多个列存在于memstore、mini sstable、minor sstable和sstable,那么在查询该行时,需要将多个列做融合,此时可以用fuse row cache来缓存该行,避免在下次查询时继续做融合操作。 |
建议调整为大于1的值,以避免行缓存过早被淘汰替换。 |
syslog_level |
用于设置系统日志的级别。 |
性能场景下,建议将syslog_level设置为PERF。 |
merge_thread_count |
用于设置合并调度线程的数量。 默认值为10。 |
根据系统的具体负载和日志处理需求,建议酌情调大merge_thread_count的值。 |
配置项 |
描述 |
建议 |
---|---|---|
memory_limit_percentage |
指允许OceanBase数据库可用的内存量占系统总内存的比例。 |
建议提高该比例,以增加OceanBase数据库可用的内存量。 |
memstore_limit_percentage |
用于设置租户使用MemStore的内存占其总可用内存的百分比。 |
建议尽量增大MemStore的空间。如果该值设置过大可能会存在由于转储速度跟不上写入速度导致内存超限的风险。 |
freeze_trigger_percentage |
用于设置触发全局冻结的租户使用内存阈值。 |
对于写入压力比较大的系统,建议可以调整该参数值为30~50之间,以实现尽快触发转储,以防止内存不足。触发转储会带来额外的CPU和IO开销,且频繁触发转储后,mini sstable的个数会增加,增加了查询路径,从而对性能产生一定影响。该参数从OceanBase数据库V4.0版本开始改为租户级配置项。 |
use_large_pages |
用于启用或禁用大页内存。 须知:
需要在OS端开启内存大页功能,此功能才会生效。 |
建议设置为true,开启大页内存,以提高内存页表的查询效率。 |
配置项 |
描述 |
建议 |
---|---|---|
__easy_memory_limit |
用于控制发往单个OBServer的rpc packet的最大内存量。默认值为4GB。 |
如果查询的数据量较大,建议将该配置项调大。 |
ob_proxy_readonly_transaction_routing_policy |
用于控制Proxy对于事务的路由是否受只读语句的影响。 该参数为bool类型,值为true时表示开启,值为false时表示关闭。 |
建议将该参数设置为false,表示Proxy对于事务的路由以第一条实际开启事务的语句为准。 |
查看及修改OBServer的相关参数
- 使用OBClient连接OceanBase。
obclient -h127.0.0.1 -P2883 -uroot@sysbench_tenant -Doceanbase -A
以下参数请根据实际情况修改:
- 127.0.0.1和2883为OceanBase服务器的IP地址和端口号。
- root为数据库用户,sysbench_tenant为数据库租户。
- oceanbase为OceanBase数据库的名称。
- 查看OBServer参数。例如查看workers_per_cpu_quota:
SHOW PARAMETERS LIKE 'workers_per_cpu_quota';
- 设置OBServer参数。例如将workers_per_cpu_quota的值设置为20:
alter system set workers_per_cpu_quota = 20;