首批通过分布式安全可靠测评,为关键业务系统打造
性能调优
更新时间:2023-09-12 15:56:12
OBLOADER 的性能可从命令行选项、虚拟机参数和数据库内核等三个方面进行调优。
命令行选项调优
宽表或者列值较长,将
--batch选项的参数值调小;反之则调大。索引会影响数据导入的性能。除主键和唯一键以外,普通索引延迟到数据导入结束后再创建。
机器的负载和网络都较低时,视情况可调整
--thread选项的参数值。说明
调优时可关注 OBLOADER 运行的机器、ODP 服务节点以及 OceanBase 集群中的各个节点的资源使用率。
虚拟机参数调优
请将导入脚本中的虚拟机参数修改为可用物理内存的 60%。默认值:-Xms4G -Xmx4G。
vim bin/obloader
JAVA_OPTS="$JAVA_OPTS -server -Xms4G -Xmx4G -XX:MetaspaceSize=128M -XX:MaxMetaspaceSize=128M -Xss352K"
数据库内核调优
导入数据的性能会严重受到租户的增量内存写入速度的影响。
增量内存不足时,数据库会触发合并或者转储。合并比较消耗性能,尽量不要触发。可开启内存的转储,并将转储的次数设置为 100 以上。
增量内存使用率达到租户限速阈值时,导入性能同时会下降。
增量内存使用率已满时,数据很容易导入失败。建议租户限速的阈值高于 90 。转储相关参数的设置跟租户内存的大小、写入速度都有关系,需根据实际情况进行调优。内核相关的调优参数如下所示。
| 参数 | 默认值 | 说明 |
|---|---|---|
| set global ob_sql_work_area_percentage=20; | 5 | SQL 执行过程中的内存占用百分比。 取值范围:[0, 100]。 |
| set global max_allowed_packet=1073741824; | 130023424 | 服务端可接收的最大的网络数据包大小。 |
| alter system set freeze_trigger_percentage=30; | 70 | 用于设置触发全局冻结的租户使用内存阈值。 major_freeze_trigger_percent=major_freeze 触发阈值 / memstore 容量 其中 memstore 容量是通过配置项 memstore_lmt_percent 计算所得。 计算公式:memstore_lmt_percent=memstore_limit/min_memory。 取值范围:[1, 99]。 |
| alter system set minor_freeze_times=500; | 5 | 用于设置多少次小合并触发一次全局合并。值为 0 时,表示关闭小合并。 内存超过预设限制会触发 minor freeze 或 major freeze,该参数指在连续两次触发 major freeze 之间触发 minor freeze 的次数。0 表示禁止自动触发 minor freeze。 取值范围:[0, 65536)。 |
| alter system set minor_compact_trigger=16; | - | 用于控制分层转储触发向下一层下压的阈值。 当该层的 Mini SSTable 总数达到设定的阈值时,所有 SSTable 都会被下压到下一层,组成新的 Minor SSTable。 |
| alter system set merge_thread_count=32; | 0 | 用于设置每日合并工作的线程数。 该配置项的值为 0 时,合并的工作进程数的计算方式为 min{10,cpu_cnt*0.3},其中 cpu_cnt 为系统 CPU 的数量。 修改动态参数后,无需重启,即刻生效。取值范围:[0, 256]。 注意OceanBase 4.0.0 及之后的版本已弃用该参数。 |
| alter system set minor_merge_concurrency=48; | 0 | 用于设置小合并时的并发线程数。 取值范围:[0, 64]。 |
| alter system set writing_throttling_trigger_percentage=100; | 100 | 设定服务端内存限流阈值(建议禁止打开服务端限流)。
注意OceanBase 2.2.30 及之后的版本才支持该系统参数,要求工具拥有防导爆能力。 |