Skip to content

OceanBase 性能参数

核心概念

性能参数是指影响OceanBase数据库性能的配置参数,通过调整这些参数可以优化数据库的性能表现。性能参数涵盖内存管理、存储引擎、网络通信、事务处理等多个方面,合理配置这些参数可以提高数据库的吞吐量、降低延迟、提高资源利用率。

内存管理参数

1. 全局内存参数

1.1 内存分配上限

  • 参数名memory_limit
  • 默认值:物理内存的80%
  • 说明:OceanBase实例可以使用的最大内存量
  • 调整建议:根据实际物理内存大小调整,建议保留20%的内存给操作系统
sql
-- 查看当前值
SHOW VARIABLES LIKE 'memory_limit';

-- 修改值
SET GLOBAL memory_limit = '32G';

1.2 内存使用阈值

  • 参数名memory_high_watermark
  • 默认值:80%
  • 说明:内存使用的高水位阈值,超过该阈值会触发内存回收
  • 调整建议:根据业务负载特点调整,建议设置为70%-90%
sql
SET GLOBAL memory_high_watermark = 85;

1.3 内存回收触发阈值

  • 参数名memory_limit_percentage
  • 默认值:90%
  • 说明:内存使用超过该阈值时,会强制回收内存
  • 调整建议:高于memory_high_watermark,低于100%
sql
SET GLOBAL memory_limit_percentage = 95;

2. 租户级内存参数

2.1 租户内存上限

  • 参数名tenant_memory_limit
  • 默认值:无
  • 说明:单个租户可以使用的最大内存量
  • 调整建议:根据租户的资源配额和业务需求调整
sql
ALTER TENANT <tenant_name> SET VARIABLES tenant_memory_limit = '16G';

2.2 租户内存使用阈值

  • 参数名tenant_memory_high_watermark
  • 默认值:80%
  • 说明:租户内存使用的高水位阈值
  • 调整建议:与全局参数类似,建议设置为70%-90%
sql
ALTER TENANT <tenant_name> SET VARIABLES tenant_memory_high_watermark = 85;

3. 缓存参数

3.1 Block缓存大小

  • 参数名block_cache_size
  • 默认值:内存总量的20%
  • 说明:用于缓存数据块的内存大小
  • 调整建议:读密集型业务可以适当增大,写密集型业务可以适当减小
sql
SET GLOBAL block_cache_size = '8G';

3.2 计划缓存大小

  • 参数名plan_cache_size
  • 默认值:1G
  • 说明:用于缓存执行计划的内存大小
  • 调整建议:根据SQL复杂度和并发量调整,复杂SQL较多时可以适当增大
sql
SET GLOBAL plan_cache_size = '2G';

3.3 租户计划缓存大小

  • 参数名tenant_plan_cache_size
  • 默认值:无
  • 说明:单个租户可以使用的计划缓存大小
  • 调整建议:根据租户的SQL复杂度和并发量调整
sql
ALTER TENANT <tenant_name> SET VARIABLES tenant_plan_cache_size = '512M';

存储引擎参数

1. 事务参数

1.1 事务超时时间

  • 参数名tx_timeout
  • 默认值:10s
  • 说明:事务的默认超时时间
  • 调整建议:根据业务事务的实际执行时间调整
sql
SET GLOBAL tx_timeout = 30000; -- 30秒

1.2 大事务阈值

  • 参数名large_tx_threshold
  • 默认值:10M
  • 说明:超过该大小的事务被视为大事务
  • 调整建议:根据业务需求调整,建议设置为5M-50M
sql
SET GLOBAL large_tx_threshold = 20971520; -- 20M

2. Merge参数

2.1 每日合并开始时间

  • 参数名merge_server_start_time
  • 默认值:02:00
  • 说明:每日合并的开始时间
  • 调整建议:设置在业务低峰期
sql
SET GLOBAL merge_server_start_time = '03:00';

2.2 合并超时时间

  • 参数名merge_timeout
  • 默认值:86400s(24小时)
  • 说明:合并操作的超时时间
  • 调整建议:根据数据量大小调整,建议设置为3600s-7200s
sql
SET GLOBAL merge_timeout = 7200; -- 2小时

3. 压缩参数

3.1 数据压缩级别

  • 参数名default_compress_level
  • 默认值:2
  • 说明:数据的默认压缩级别,范围0-9
  • 调整建议:压缩级别越高,压缩率越高,但CPU消耗越大
sql
SET GLOBAL default_compress_level = 3;

3.2 压缩算法

  • 参数名default_compressor
  • 默认值:lz4_1.0
  • 说明:数据的默认压缩算法
  • 可选值:lz4_1.0, zstd_1.3.8, snappy_1.1.3
  • 调整建议:lz4性能最好,zstd压缩率最高
sql
SET GLOBAL default_compressor = 'zstd_1.3.8';

网络通信参数

1. RPC参数

1.1 RPC超时时间

  • 参数名rpc_timeout
  • 默认值:10s
  • 说明:RPC请求的超时时间
  • 调整建议:根据网络环境和业务需求调整
sql
SET GLOBAL rpc_timeout = 5000; -- 5秒

1.2 RPC并发数

  • 参数名rpc_concurrency_limit
  • 默认值:8
  • 说明:每个线程的RPC并发请求数限制
  • 调整建议:根据CPU核心数和网络带宽调整
sql
SET GLOBAL rpc_concurrency_limit = 16;

2. 连接参数

2.1 最大连接数

  • 参数名max_connections
  • 默认值:10000
  • 说明:数据库允许的最大连接数
  • 调整建议:根据业务并发量调整
sql
SET GLOBAL max_connections = 20000;

2.2 连接超时时间

  • 参数名connect_timeout
  • 默认值:10s
  • 说明:客户端连接的超时时间
  • 调整建议:根据网络环境调整
sql
SET GLOBAL connect_timeout = 5;

3. 副本同步参数

3.1 日志同步超时时间

  • 参数名log_sync_timeout
  • 默认值:10s
  • 说明:日志同步的超时时间
  • 调整建议:根据网络延迟调整
sql
SET GLOBAL log_sync_timeout = 3;

3.2 日志同步重试次数

  • 参数名log_sync_retry_times
  • 默认值:3
  • 说明:日志同步失败后的重试次数
  • 调整建议:根据网络稳定性调整
sql
SET GLOBAL log_sync_retry_times = 5;

SQL执行参数

1. 查询优化参数

1.1 优化器模式

  • 参数名optimizer_mode
  • 默认值:ALL_ROWS
  • 说明:优化器的工作模式
  • 可选值:ALL_ROWS(优先考虑吞吐量),FIRST_ROWS(优先考虑响应时间)
  • 调整建议:根据业务需求调整,OLTP系统可以考虑FIRST_ROWS
sql
SET GLOBAL optimizer_mode = 'FIRST_ROWS';

1.2 统计信息自动收集

  • 参数名auto_stats_collection
  • 默认值:true
  • 说明:是否自动收集统计信息
  • 调整建议:建议开启,确保优化器有准确的统计信息
sql
SET GLOBAL auto_stats_collection = true;

2. 执行控制参数

2.1 SQL执行超时时间

  • 参数名sql_exec_timeout
  • 默认值:30s
  • 说明:SQL语句执行的超时时间
  • 调整建议:根据业务SQL的复杂度和执行时间调整
sql
SET GLOBAL sql_exec_timeout = 60; -- 60秒

2.2 并行执行线程数

  • 参数名parallel_max_servers
  • 默认值:64
  • 说明:并行执行的最大线程数
  • 调整建议:根据CPU核心数调整
sql
SET GLOBAL parallel_max_servers = 128;

3. 慢SQL参数

3.1 慢SQL阈值

  • 参数名slow_query_time
  • 默认值:1s
  • 说明:超过该时间的SQL被视为慢SQL
  • 调整建议:根据业务需求调整,OLTP系统建议设置为100ms-500ms
sql
SET GLOBAL slow_query_time = 0.5; -- 500ms

3.2 慢SQL日志

  • 参数名slow_query_log
  • 默认值:true
  • 说明:是否开启慢SQL日志
  • 调整建议:建议开启,用于性能分析和优化
sql
SET GLOBAL slow_query_log = true;

资源调度参数

1. CPU调度参数

1.1 CPU使用率上限

  • 参数名cpu_quota_concurrency
  • 默认值:0(无限制)
  • 说明:单个租户可以使用的CPU核心数
  • 调整建议:根据租户的资源配额调整
sql
ALTER TENANT <tenant_name> SET VARIABLES cpu_quota_concurrency = 8;

1.2 CPU调度策略

  • 参数名scheduler_policy
  • 默认值:FIFO
  • 说明:CPU调度策略
  • 可选值:FIFO, SJF(短作业优先)
  • 调整建议:OLTP系统可以考虑使用SJF
sql
SET GLOBAL scheduler_policy = 'SJF';

2. IO调度参数

2.1 IO使用率上限

  • 参数名io_limits
  • 默认值:0(无限制)
  • 说明:单个租户可以使用的IOPS上限
  • 调整建议:根据存储设备的性能和租户的资源配额调整
sql
ALTER TENANT <tenant_name> SET VARIABLES io_limits = 10000;

2.2 IO优先级

  • 参数名io_priority
  • 默认值:MEDIUM
  • 说明:租户的IO优先级
  • 可选值:LOW, MEDIUM, HIGH
  • 调整建议:根据租户的重要性调整
sql
ALTER TENANT <tenant_name> SET VARIABLES io_priority = 'HIGH';

参数调优最佳实践

1. 调优原则

  • 循序渐进:每次只调整少量参数,观察效果后再进行下一步
  • 基于数据:根据监控数据和性能测试结果进行调整
  • 考虑整体:单个参数的调整可能影响其他参数,需要综合考虑
  • 回归测试:调整后进行回归测试,确保性能和稳定性

2. 不同场景的调优重点

2.1 OLTP场景

  • 重点优化内存管理参数,确保足够的缓存
  • 调整事务参数,降低事务延迟
  • 优化SQL执行参数,提高查询响应速度
  • 适当提高IO优先级

2.2 OLAP场景

  • 重点优化存储引擎参数,提高查询吞吐量
  • 调整并行执行参数,充分利用CPU资源
  • 优化统计信息收集,提高查询计划质量
  • 适当提高内存分配,支持大查询

2.3 混合场景

  • 合理分配资源,兼顾OLTP和OLAP需求
  • 使用资源隔离,避免相互影响
  • 根据业务高峰期调整参数
  • 定期进行性能测试,优化配置

3. 监控与调整

  • 建立完善的监控体系,实时监控性能指标
  • 定期分析性能数据,识别瓶颈
  • 根据业务变化及时调整参数
  • 记录参数调整历史,便于回滚和分析

常见问题(FAQ)

Q1: 如何确定哪些参数需要调整?

A1: 确定需要调整的参数的方法:

  • 监控数据库的性能指标,如CPU使用率、内存使用率、IOPS、响应时间等
  • 分析慢SQL日志,找出性能瓶颈
  • 进行性能测试,模拟真实业务负载
  • 参考OceanBase官方推荐的参数配置

Q2: 参数调整后需要重启数据库吗?

A2: 大多数参数可以在线调整,不需要重启数据库。但部分参数需要重启才能生效,如内存分配上限等。建议在调整参数前查看参数的说明,确认是否需要重启。

Q3: 如何备份和恢复参数配置?

A3: 备份和恢复参数配置的方法:

  • 使用SHOW VARIABLES命令导出当前参数配置
  • 将参数配置保存到文件中,作为备份
  • 需要恢复时,使用SET GLOBALALTER TENANT命令重新设置参数

Q4: 如何监控参数调整的效果?

A4: 监控参数调整效果的方法:

  • 对比调整前后的性能指标变化
  • 分析慢SQL日志,看慢SQL数量是否减少
  • 进行性能测试,比较调整前后的吞吐量和响应时间
  • 监控系统资源使用率,看是否得到优化

Q5: 哪些参数对性能影响最大?

A5: 对性能影响较大的参数包括:

  • 内存管理参数,如memory_limit、block_cache_size等
  • 存储引擎参数,如default_compressor、merge_server_start_time等
  • SQL执行参数,如optimizer_mode、sql_exec_timeout等
  • 网络通信参数,如rpc_timeout、log_sync_timeout等

Q6: 如何处理参数调整导致的性能问题?

A6: 处理参数调整导致的性能问题的方法:

  • 立即回滚到之前的参数配置
  • 分析性能问题的原因,找出导致问题的参数
  • 重新调整参数,循序渐进,观察效果
  • 如有必要,重启数据库以恢复到稳定状态

Q7: 在哪里可以找到OceanBase的推荐参数配置?

A7: 可以在以下地方找到OceanBase的推荐参数配置:

  • OceanBase官方文档
  • OceanBase官方社区
  • OceanBase技术支持
  • 相关的性能优化白皮书和最佳实践文档