Skip to content

OceanBase 一致性与可靠性参数

核心一致性参数

1. Paxos相关参数

paxos_replica_number

  • 描述:副本数量,决定Paxos算法的多数派数量
  • 默认值:3
  • 取值范围:1-9
  • 建议值:生产环境建议设置为3或5
  • 影响:副本数量越多,一致性越强,但写性能会下降
sql
-- 设置副本数量
ALTER SYSTEM SET paxos_replica_number = 3;

paxos_timeout

  • 描述:Paxos提案超时时间(单位:毫秒)
  • 默认值:10000
  • 取值范围:1000-60000
  • 建议值:网络稳定时可适当调小,网络不稳定时可适当调大
sql
-- 设置Paxos超时时间
ALTER SYSTEM SET paxos_timeout = 5000;

paxos_election_retry_interval

  • 描述:Paxos选举重试间隔(单位:毫秒)
  • 默认值:1000
  • 取值范围:500-5000
  • 建议值:根据网络环境调整
sql
-- 设置选举重试间隔
ALTER SYSTEM SET paxos_election_retry_interval = 800;

2. 一致性级别参数

consistency_level

  • 描述:默认一致性级别
  • 默认值:STRONG
  • 取值范围:STRONG, WEAK, EVENTUAL
  • 建议值:核心业务建议使用STRONG,非核心业务可考虑WEAK或EVENTUAL
sql
-- 设置默认一致性级别
ALTER TENANT tenant1 SET consistency_level = 'STRONG';

session_consistency

  • 描述:会话级一致性设置
  • 默认值:not set
  • 取值范围:STRONG, WEAK, EVENTUAL
  • 建议值:根据具体业务需求设置
sql
-- 在会话级别设置一致性
SET session_consistency = 'STRONG';

3. 日志相关参数

redo_transport_compress_level

  • 描述:Redo日志传输压缩级别
  • 默认值:0(不压缩)
  • 取值范围:0-9
  • 建议值:网络带宽有限时可适当开启压缩(如2-4)
sql
-- 设置Redo日志压缩级别
ALTER SYSTEM SET redo_transport_compress_level = 2;

redo_transport_use_compression

  • 描述:是否启用Redo日志传输压缩
  • 默认值:FALSE
  • 取值范围:TRUE, FALSE
  • 建议值:网络带宽有限时开启
sql
-- 启用Redo日志传输压缩
ALTER SYSTEM SET redo_transport_use_compression = TRUE;

可靠性相关参数

1. 故障检测参数

server_check_interval

  • 描述:服务器状态检查间隔(单位:毫秒)
  • 默认值:5000
  • 取值范围:1000-60000
  • 建议值:根据集群规模和网络环境调整
sql
-- 设置服务器检查间隔
ALTER SYSTEM SET server_check_interval = 3000;

server_down_time

  • 描述:服务器被判定为宕机的时间(单位:毫秒)
  • 默认值:30000
  • 取值范围:5000-120000
  • 建议值:根据业务需求和故障容忍度调整
sql
-- 设置服务器宕机判定时间
ALTER SYSTEM SET server_down_time = 20000;

2. 自动故障切换参数

enable_auto_failover

  • 描述:是否启用自动故障切换
  • 默认值:TRUE
  • 取值范围:TRUE, FALSE
  • 建议值:生产环境建议启用
sql
-- 启用自动故障切换
ALTER SYSTEM SET enable_auto_failover = TRUE;

auto_failover_delay_time

  • 描述:自动故障切换延迟时间(单位:毫秒)
  • 默认值:5000
  • 取值范围:0-60000
  • 建议值:根据业务需求调整
sql
-- 设置故障切换延迟时间
ALTER SYSTEM SET auto_failover_delay_time = 3000;

3. 数据保护参数

enable_data_protection

  • 描述:是否启用数据保护
  • 默认值:TRUE
  • 取值范围:TRUE, FALSE
  • 建议值:生产环境建议启用
sql
-- 启用数据保护
ALTER SYSTEM SET enable_data_protection = TRUE;

data_protection_level

  • 描述:数据保护级别
  • 默认值:MEDIUM
  • 取值范围:LOW, MEDIUM, HIGH
  • 建议值:核心业务建议使用HIGH
sql
-- 设置数据保护级别
ALTER SYSTEM SET data_protection_level = 'HIGH';

事务一致性参数

1. 事务隔离级别

transaction_isolation

  • 描述:默认事务隔离级别
  • 默认值:READ COMMITTED
  • 取值范围:READ UNCOMMITTED, READ COMMITTED, REPEATABLE READ, SERIALIZABLE
  • 建议值:根据业务需求设置,大多数业务使用READ COMMITTED即可
sql
-- 设置默认事务隔离级别
ALTER TENANT tenant1 SET transaction_isolation = 'READ COMMITTED';

2. 事务超时参数

tx_timeout

  • 描述:事务超时时间(单位:微秒)
  • 默认值:10000000(10秒)
  • 取值范围:1000000-3600000000
  • 建议值:根据业务事务处理时间调整
sql
-- 设置事务超时时间
ALTER TENANT tenant1 SET tx_timeout = 30000000; -- 30秒

long_trans_threshold

  • 描述:长事务阈值(单位:微秒)
  • 默认值:10000000(10秒)
  • 取值范围:1000000-3600000000
  • 建议值:用于监控长事务,可根据业务需求调整
sql
-- 设置长事务阈值
ALTER SYSTEM SET long_trans_threshold = 20000000; -- 20秒

3. 死锁检测参数

enable_deadlock_detection

  • 描述:是否启用死锁检测
  • 默认值:TRUE
  • 取值范围:TRUE, FALSE
  • 建议值:生产环境建议启用
sql
-- 启用死锁检测
ALTER SYSTEM SET enable_deadlock_detection = TRUE;

deadlock_detection_interval

  • 描述:死锁检测间隔(单位:微秒)
  • 默认值:1000000(1秒)
  • 取值范围:100000-10000000
  • 建议值:根据业务并发情况调整
sql
-- 设置死锁检测间隔
ALTER SYSTEM SET deadlock_detection_interval = 500000; -- 0.5秒

网络一致性参数

1. 网络超时参数

net_timeout

  • 描述:网络超时时间(单位:毫秒)
  • 默认值:10000
  • 取值范围:1000-60000
  • 建议值:根据网络环境调整
sql
-- 设置网络超时时间
ALTER SYSTEM SET net_timeout = 5000;

net_retry_times

  • 描述:网络重试次数
  • 默认值:3
  • 取值范围:1-10
  • 建议值:根据网络稳定性调整
sql
-- 设置网络重试次数
ALTER SYSTEM SET net_retry_times = 5;

2. 复制相关参数

replication_retry_interval

  • 描述:复制重试间隔(单位:毫秒)
  • 默认值:1000
  • 取值范围:500-5000
  • 建议值:根据网络环境调整
sql
-- 设置复制重试间隔
ALTER SYSTEM SET replication_retry_interval = 800;

replication_timeout

  • 描述:复制超时时间(单位:毫秒)
  • 默认值:5000
  • 取值范围:1000-30000
  • 建议值:根据网络环境调整
sql
-- 设置复制超时时间
ALTER SYSTEM SET replication_timeout = 3000;

存储一致性参数

1. SSTable相关参数

minor_freeze_times

  • 描述:触发小合并的MemTable数量阈值
  • 默认值:3
  • 取值范围:1-10
  • 建议值:根据内存大小和写入量调整
sql
-- 设置小合并触发阈值
ALTER SYSTEM SET minor_freeze_times = 4;

major_freeze_duty_time

  • 描述:大合并执行时间窗口
  • 默认值:02:00
  • 建议值:业务低峰期
sql
-- 设置大合并执行时间
ALTER SYSTEM SET major_freeze_duty_time = '03:00';

2. 检查点相关参数

checkpoint_interval

  • 描述:检查点间隔(单位:毫秒)
  • 默认值:10000
  • 取值范围:5000-60000
  • 建议值:根据写入量和恢复需求调整
sql
-- 设置检查点间隔
ALTER SYSTEM SET checkpoint_interval = 15000;

checkpoint_flush_timeout

  • 描述:检查点刷新超时时间(单位:毫秒)
  • 默认值:60000
  • 取值范围:30000-300000
  • 建议值:根据存储性能调整
sql
-- 设置检查点刷新超时时间
ALTER SYSTEM SET checkpoint_flush_timeout = 120000;

一致性与可靠性参数调优最佳实践

1. 根据业务需求调整一致性级别

  • 核心业务使用强一致性(STRONG)
  • 非核心业务可考虑使用弱一致性(WEAK或EVENTUAL)
  • 读写分离场景可使用最终一致性

2. 副本数量配置

  • 生产环境建议使用3或5副本
  • 副本分布在不同的可用区或机房
  • 考虑一致性和性能的平衡

3. 网络参数调优

  • 根据实际网络环境调整超时时间和重试次数
  • 网络稳定时可适当减小超时时间
  • 网络不稳定时可适当增大超时时间和重试次数

4. 事务参数调优

  • 根据业务事务特性调整事务超时时间
  • 启用死锁检测以避免系统挂起
  • 选择合适的事务隔离级别

5. 存储参数调优

  • 合理设置合并触发条件,避免频繁合并影响性能
  • 在业务低峰期执行大合并
  • 调整检查点间隔,平衡性能和恢复时间

一致性与可靠性监控

1. 一致性监控

sql
-- 查看Paxos状态
SELECT * FROM oceanbase.GV$OB_PAXOS_STATUS;

-- 查看副本同步状态
SELECT * FROM oceanbase.GV$OB_REPLICA_SYNC_STATUS;

-- 查看事务一致性状态
SELECT * FROM oceanbase.GV$OB_TRANSACTION_CONSISTENCY;

2. 可靠性监控

sql
-- 查看服务器状态
SELECT * FROM oceanbase.GV$OB_SERVER_STATUS;

-- 查看副本状态
SELECT * FROM oceanbase.GV$OB_REPLICA_STATUS;

-- 查看故障检测状态
SELECT * FROM oceanbase.GV$OB_FAILURE_DETECTION;

3. 告警配置

  • 配置Paxos异常告警
  • 配置副本同步延迟告警
  • 配置服务器状态异常告警
  • 配置事务超时告警

常见问题及解决方案

1. 一致性与性能的平衡

问题描述

  • 强一致性保证会降低系统写性能
  • 副本数量越多,一致性越强,但写性能越差

解决方案

  • 根据业务需求选择合适的一致性级别
  • 合理配置副本数量
  • 考虑使用读写分离架构

2. 网络异常导致的一致性问题

问题描述

  • 网络延迟或分区可能导致Paxos选举超时
  • 副本同步延迟可能导致数据不一致

解决方案

  • 调整网络超时参数
  • 增加网络重试次数
  • 优化网络架构
  • 启用Redo日志压缩以减少网络带宽消耗

3. 事务死锁问题

问题描述

  • 并发事务可能导致死锁
  • 死锁会影响系统性能和可用性

解决方案

  • 启用死锁检测
  • 优化事务逻辑,减少锁持有时间
  • 调整死锁检测间隔
  • 合理设计索引,避免全表锁

4. 存储合并影响性能

问题描述

  • SSTable合并可能导致I/O负载增加
  • 影响系统性能

解决方案

  • 在业务低峰期执行大合并
  • 调整合并触发条件
  • 优化存储性能

常见问题(FAQ)

Q1: OceanBase的默认一致性级别是什么?

A1: OceanBase默认提供强一致性保证,默认一致性级别为STRONG。

Q2: 如何选择合适的副本数量?

A2: 生产环境建议使用3或5副本,副本数量越多,一致性越强,但写性能会下降。副本应分布在不同的可用区或机房以提高容错能力。

Q3: 如何平衡一致性与性能?

A3: 根据业务需求选择合适的一致性级别,核心业务使用强一致性,非核心业务可考虑弱一致性;合理配置副本数量;优化网络和存储参数。

Q4: 如何监控OceanBase的一致性状态?

A4: 使用内置视图如GV$OB_PAXOS_STATUS、GV$OB_REPLICA_SYNC_STATUS和GV$OB_TRANSACTION_CONSISTENCY监控一致性状态;配置相关告警。

Q5: 网络异常会影响OceanBase的一致性吗?

A5: 网络异常可能导致Paxos选举超时或副本同步延迟,但OceanBase的Paxos协议设计能够容忍网络异常,确保最终数据一致性。

Q6: 如何优化事务性能同时保证一致性?

A6: 选择合适的事务隔离级别;调整事务超时时间;启用死锁检测;优化事务逻辑,减少锁持有时间;合理设计索引。