外观
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; -- 20M2. 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; -- 500ms3.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 GLOBAL或ALTER 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技术支持
- 相关的性能优化白皮书和最佳实践文档
