Skip to content

OceanBase 硬件优化 ​

硬件优化是 OceanBase 数据库性能优化的基础,通过合理配置服务器、存储和网络等硬件资源,可以提高 OceanBase 数据库的性能和可靠性。硬件优化包括服务器配置优化、存储优化和网络优化三个主要方面。

服务器配置优化 ​

服务器是 OceanBase 数据库运行的基础,合理配置服务器的 CPU、内存和 BIOS 设置,可以提高 OceanBase 数据库的性能和可靠性。

CPU 配置优化 ​

CPU 选择 ​

  • 多核 CPU:OceanBase 数据库是多核友好型的,建议选择多核 CPU,如 Intel Xeon 或 AMD EPYC 系列
  • 高主频:对于 OLTP 场景,建议选择高主频 CPU;对于 OLAP 场景,建议选择多核 CPU
  • 支持 AVX2 指令集:AVX2 指令集可以提高 OceanBase 数据库的压缩和加密性能

CPU 核数配置 ​

sql
-- 查看 CPU 核数
SELECT * FROM oceanbase.GV$OB_SERVER_CPU_STAT;

-- 配置 CPU 核数
ALTER SYSTEM SET cpu_count = 64;
ALTER SYSTEM SET cpu_quota_concurrency = 64;

CPU 绑核 ​

CPU 绑核可以提高 OceanBase 数据库的性能,减少 CPU 上下文切换的开销。

bash
# 配置 CPU 绑核
export OB_BIND_CPU=1

# 或在启动命令中指定
observer --bind-cpu 1-63

内存配置优化 ​

内存容量选择 ​

  • OLTP 场景:建议内存容量为 CPU 核数的 4-8 倍
  • OLAP 场景:建议内存容量为 CPU 核数的 8-16 倍
  • 混合场景:建议内存容量为 CPU 核数的 6-12 倍

内存分配配置 ​

sql
-- 查看内存分配
SELECT * FROM oceanbase.GV$OB_SERVER_MEMORY_STAT;

-- 配置内存限制
ALTER SYSTEM SET memory_limit_percentage = 80;
ALTER SYSTEM SET system_memory = '10G';
ALTER SYSTEM SET memory_chunk_cache_size = '2G';

内存页大小 ​

内存页大小对 OceanBase 数据库的性能有一定影响,建议将内存页大小设置为 2MB 或 4MB。

bash
# 查看当前内存页大小
grep Hugepagesize /proc/meminfo

# 配置大页内存
echo 'vm.nr_hugepages = 4096' >> /etc/sysctl.conf
sysctl -p

BIOS 设置优化 ​

关闭超线程 ​

超线程可以提高 CPU 的利用率,但会增加 CPU 缓存竞争,对于 OLTP 场景,建议关闭超线程。

bash
# 在 BIOS 中关闭超线程
# Intel: Hyper-Threading Technology -> Disabled
# AMD: SMT -> Disabled

启用 Turbo Boost ​

Turbo Boost 可以提高 CPU 的主频,对于 OLTP 场景,建议启用 Turbo Boost。

bash
# 在 BIOS 中启用 Turbo Boost
# Intel: Turbo Boost Technology -> Enabled
# AMD: Precision Boost -> Enabled

关闭 C-State ​

C-State 是 CPU 的节能状态,会增加 CPU 唤醒的延迟,对于数据库场景,建议关闭 C-State。

bash
# 在 BIOS 中关闭 C-State
# C-State Control -> Disabled

启用 NUMA ​

NUMA(Non-Uniform Memory Access)可以提高内存访问的性能,对于多核服务器,建议启用 NUMA。

bash
# 查看 NUMA 配置
numactl --hardware

# 启用 NUMA
# 在 BIOS 中启用 NUMA Support -> Enabled

存储优化 ​

存储是 OceanBase 数据库数据持久化的基础,合理配置存储的类型、RAID 级别和文件系统,可以提高 OceanBase 数据库的性能和可靠性。

存储类型选择 ​

本地 SSD ​

本地 SSD 具有低延迟、高 IOPS 和高吞吐量的特点,适合作为 OceanBase 数据库的主要存储设备。

  • NVMe SSD:延迟更低,IOPS 更高,适合对延迟敏感的场景
  • SATA SSD:成本更低,适合对成本敏感的场景

网络存储 ​

网络存储包括 SAN 和 NAS,适合作为 OceanBase 数据库的备份存储或归档存储。

  • SAN:适合作为 OceanBase 数据库的共享存储
  • NAS:适合作为 OceanBase 数据库的备份存储

对象存储 ​

对象存储具有高可用性、高扩展性和低成本的特点,适合作为 OceanBase 数据库的备份存储或归档存储。

  • OSS:阿里云对象存储服务
  • S3:亚马逊对象存储服务
  • GCS:谷歌云存储服务

RAID 级别选择 ​

RAID(Redundant Array of Independent Disks)是一种磁盘阵列技术,可以提高存储的性能和可靠性。

常用 RAID 级别 ​

  • RAID 0:条带化,提高存储性能,无冗余
  • RAID 1:镜像,提高存储可靠性,无性能提升
  • RAID 5:分布式奇偶校验,提高存储性能和可靠性,适合大容量存储
  • RAID 6:双分布式奇偶校验,提高存储可靠性,适合大容量存储
  • RAID 10:镜像+条带化,提高存储性能和可靠性,适合对性能和可靠性要求高的场景

推荐 RAID 级别 ​

  • OLTP 场景:建议使用 RAID 10
  • OLAP 场景:建议使用 RAID 5 或 RAID 6
  • 混合场景:建议使用 RAID 10

文件系统优化 ​

文件系统是操作系统用于管理存储设备的软件,合理配置文件系统,可以提高 OceanBase 数据库的性能。

文件系统选择 ​

  • EXT4:稳定可靠,适合大多数场景
  • XFS:适合大容量存储和高并发场景
  • Btrfs:支持快照和压缩,适合备份存储

文件系统挂载选项 ​

bash
# EXT4 文件系统挂载选项
/dev/sda1 /data ext4 defaults,noatime,nodiratime,nodelalloc,barrier=0,data=writeback 0 0

# XFS 文件系统挂载选项
/dev/sda1 /data xfs defaults,noatime,nodiratime,allocsize=16m,inode64 0 0

文件系统参数优化 ​

bash
# 优化 EXT4 文件系统
# 增大文件句柄数
cat >> /etc/sysctl.conf << EOF
fs.file-max = 1048576
fs.inotify.max_user_watches = 524288
EOF

# 生效配置
sysctl -p

存储参数优化 ​

存储路径配置 ​

sql
-- 配置数据目录
ALTER SYSTEM SET data_dir = '/data/ob/data';

-- 配置日志目录
ALTER SYSTEM SET redo_dir = '/data/ob/redo';

-- 配置归档目录
ALTER SYSTEM SET archive_dir = '/data/ob/archive';

存储IO 配置 ​

sql
-- 查看 IO 状态
SELECT * FROM oceanbase.GV$OB_SERVER_IO_STAT;

-- 配置 IO 队列深度
ALTER SYSTEM SET max_io_queue_depth = 128;

-- 配置 IO 线程数
ALTER SYSTEM SET max_io_workers = 64;

-- 配置 IO 带宽限制
ALTER SYSTEM SET io_bandwidth_limit = '10G';

网络优化 ​

网络是 OceanBase 数据库分布式架构的基础,合理配置网络的带宽、延迟和拓扑,可以提高 OceanBase 数据库的性能和可靠性。

网络带宽优化 ​

网络带宽选择 ​

  • 集群内网络:建议使用 10Gbps 或 25Gbps 以太网
  • 集群间网络:建议使用 10Gbps 或 25Gbps 以太网
  • 客户端访问网络:建议使用 1Gbps 或 10Gbps 以太网

网络带宽配置 ​

bash
# 查看网络带宽
ethtool eth0

# 配置网络带宽
# 在交换机中配置端口速率

网络聚合 ​

网络聚合(Link Aggregation)可以提高网络带宽和可靠性,建议将多个物理网卡聚合为一个逻辑网卡。

bash
# 配置网卡绑定
cat > /etc/sysconfig/network-scripts/ifcfg-bond0 << EOF
DEVICE=bond0
TYPE=Bond
BONDING_MASTER=yes
BOOTPROTO=none
IPADDR=192.168.1.100
PREFIX=24
GATEWAY=192.168.1.1
DNS1=8.8.8.8
ONBOOT=yes
BONDING_OPTS="mode=4 miimon=100 lacp_rate=1"
EOF

# 配置物理网卡
cat > /etc/sysconfig/network-scripts/ifcfg-eth0 << EOF
DEVICE=eth0
TYPE=Ethernet
BOOTPROTO=none
ONBOOT=yes
MASTER=bond0
SLAVE=yes
EOF

cat > /etc/sysconfig/network-scripts/ifcfg-eth1 << EOF
DEVICE=eth1
TYPE=Ethernet
BOOTPROTO=none
ONBOOT=yes
MASTER=bond0
SLAVE=yes
EOF

# 重启网络服务
systemctl restart network

网络延迟优化 ​

网络延迟测试 ​

bash
# 测试网络延迟
ping -c 100 -i 0.01 target_ip

# 测试网络带宽
iperf3 -c target_ip -i 1 -t 10

# 测试网络抖动
mtr target_ip

网络延迟优化 ​

  • 使用低延迟网络设备:选择低延迟的交换机和网卡
  • 优化网络拓扑:减少网络跳数,使用扁平化网络拓扑
  • 启用 Jumbo Frame:Jumbo Frame 可以减少网络包的数量,降低网络延迟
  • 关闭 Flow Control:Flow Control 会增加网络延迟,建议关闭
bash
# 启用 Jumbo Frame
# 在交换机中启用 Jumbo Frame(MTU 9000)
# 在服务器中启用 Jumbo Frame
ip link set dev eth0 mtu 9000

# 关闭 Flow Control
ethtool -A eth0 rx off tx off

网络拓扑优化 ​

集群内网络拓扑 ​

  • 机架感知:将 OceanBase 集群的节点分布在不同的机架上,提高集群的可用性
  • 区域感知:将 OceanBase 集群的节点分布在不同的区域或可用区,提高集群的可用性

网络隔离 ​

  • 管理网络:用于管理 OceanBase 集群,如 OCP 访问
  • 业务网络:用于客户端访问 OceanBase 集群
  • 内部网络:用于 OceanBase 集群内部通信,如 Paxos 协议通信
sql
-- 配置网络隔离
ALTER SYSTEM SET rpc_port = 2882;
ALTER SYSTEM SET sql_port = 2881;
ALTER SYSTEM SET mysql_port = 3306;

硬件监控 ​

硬件监控是确保 OceanBase 数据库硬件正常运行的重要手段,通过监控服务器、存储和网络的状态,可以及时发现并处理硬件故障。

服务器监控 ​

CPU 监控 ​

sql
-- 查看 CPU 使用率
SELECT * FROM oceanbase.GV$OB_SERVER_CPU_STAT;

-- 查看 CPU 负载
SELECT * FROM oceanbase.GV$OB_SERVER_LOAD;

内存监控 ​

sql
-- 查看内存使用率
SELECT * FROM oceanbase.GV$OB_SERVER_MEMORY_STAT;

-- 查看大页内存使用情况
SELECT * FROM oceanbase.GV$OB_HUGE_PAGES;

存储监控 ​

存储使用率监控 ​

sql
-- 查看存储使用率
SELECT * FROM oceanbase.GV$OB_DISK_STAT;

-- 查看文件系统使用率
SELECT * FROM oceanbase.GV$OB_FILESYSTEM;

存储性能监控 ​

sql
-- 查看 IO 性能
SELECT * FROM oceanbase.GV$OB_SERVER_IO_STAT;

-- 查看 IO 延迟
SELECT * FROM oceanbase.GV$OB_IO_LATENCY_STAT;

网络监控 ​

网络流量监控 ​

sql
-- 查看网络流量
SELECT * FROM oceanbase.GV$OB_NETWORK_STAT;

-- 查看网络连接数
SELECT * FROM oceanbase.GV$OB_CONNECTION_STAT;

网络延迟监控 ​

sql
-- 查看网络延迟
SELECT * FROM oceanbase.GV$OB_RPC_STAT;

硬件优化最佳实践 ​

性能测试 ​

在部署 OceanBase 数据库之前,建议进行硬件性能测试,确保硬件符合 OceanBase 数据库的性能要求。

CPU 性能测试 ​

bash
# 使用 sysbench 测试 CPU 性能
sysbench cpu --cpu-max-prime=20000 run

内存性能测试 ​

bash
# 使用 sysbench 测试内存性能
sysbench memory --memory-block-size=1K --memory-total-size=100G run

存储性能测试 ​

bash
# 使用 fio 测试存储性能
fio --name=randwrite --ioengine=libaio --rw=randwrite --bs=4k --numjobs=16 --size=10G --runtime=60 --group_reporting --direct=1 --iodepth=32

# 使用 fio 测试存储顺序写入性能
fio --name=write --ioengine=libaio --rw=write --bs=128k --numjobs=8 --size=10G --runtime=60 --group_reporting --direct=1 --iodepth=16

网络性能测试 ​

bash
# 使用 iperf3 测试网络带宽
iperf3 -c target_ip -i 1 -t 10

# 使用 ping 测试网络延迟
ping -c 100 -i 0.01 target_ip

硬件升级 ​

随着业务的增长,OceanBase 数据库的硬件可能需要升级,建议按照以下步骤进行硬件升级:

  1. 评估硬件瓶颈:使用监控工具识别硬件瓶颈
  2. 制定升级计划:根据瓶颈制定详细的升级计划
  3. 测试升级效果:在测试环境中测试升级效果
  4. 执行升级:在生产环境中执行升级
  5. 验证升级效果:验证升级后的性能和可靠性

硬件故障处理 ​

硬件故障是不可避免的,建议制定硬件故障处理流程,确保在硬件故障发生时能够及时处理。

  1. 故障检测:通过监控工具检测硬件故障
  2. 故障隔离:隔离故障硬件,避免影响其他硬件
  3. 故障修复:修复或更换故障硬件
  4. 故障恢复:恢复 OceanBase 数据库的服务
  5. 故障分析:分析故障原因,避免类似故障再次发生

硬件优化案例 ​

案例一:CPU 瓶颈优化 ​

场景:OceanBase 数据库的 CPU 使用率持续超过 80%,影响业务性能

诊断步骤:

  1. 查看 CPU 使用率:SELECT * FROM oceanbase.GV$OB_SERVER_CPU_STAT;
  2. 查看 CPU 负载:SELECT * FROM oceanbase.GV$OB_SERVER_LOAD;
  3. 分析慢查询:SELECT * FROM oceanbase.GV$OB_SLOW_QUERY;
  4. 查看会话状态:SELECT * FROM oceanbase.GV$OB_SESSIONS;

解决方案:

  1. 升级 CPU:将 32 核 CPU 升级为 64 核 CPU
  2. 优化 SQL 查询:优化慢查询,减少 CPU 消耗
  3. 调整资源配置:调整租户的 CPU 配额
  4. 启用 CPU 绑核:提高 CPU 利用率

结果:CPU 使用率降低到 40% 左右,业务性能提高 50%

案例二:存储性能优化 ​

场景:OceanBase 数据库的存储 IO 延迟持续超过 10ms,影响业务性能

诊断步骤:

  1. 查看 IO 性能:SELECT * FROM oceanbase.GV$OB_SERVER_IO_STAT;
  2. 查看 IO 延迟:SELECT * FROM oceanbase.GV$OB_IO_LATENCY_STAT;
  3. 查看存储使用率:SELECT * FROM oceanbase.GV$OB_DISK_STAT;
  4. 使用 fio 测试存储性能:fio --name=randwrite --ioengine=libaio --rw=randwrite --bs=4k --numjobs=16 --size=10G --runtime=60 --group_reporting --direct=1 --iodepth=32

解决方案:

  1. 升级存储:将 SATA SSD 升级为 NVMe SSD
  2. 调整 RAID 级别:将 RAID 5 调整为 RAID 10
  3. 优化文件系统:调整文件系统的挂载选项
  4. 调整 IO 配置:调整 OceanBase 数据库的 IO 队列深度和线程数

结果:存储 IO 延迟降低到 1ms 左右,业务性能提高 100%

常见问题(FAQ) ​

Q1: OceanBase 数据库对 CPU 有什么要求? ​

A1: OceanBase 数据库对 CPU 的要求:

  • 多核 CPU:建议选择 32 核以上的 CPU
  • 支持 AVX2 指令集:可以提高压缩和加密性能
  • 高主频:对于 OLTP 场景,建议选择主频 3.0GHz 以上的 CPU

Q2: OceanBase 数据库对内存有什么要求? ​

A2: OceanBase 数据库对内存的要求:

  • 内存容量:建议内存容量为 CPU 核数的 4-8 倍
  • 大页内存:建议启用大页内存,提高内存访问性能
  • NUMA 支持:建议启用 NUMA,提高内存访问性能

Q3: OceanBase 数据库对存储有什么要求? ​

A3: OceanBase 数据库对存储的要求:

  • 本地 SSD:建议使用 NVMe SSD 或 SATA SSD
  • RAID 级别:对于 OLTP 场景,建议使用 RAID 10
  • IOPS:建议存储的 IOPS 大于 100,000
  • 延迟:建议存储的延迟小于 1ms

Q4: OceanBase 数据库对网络有什么要求? ​

A4: OceanBase 数据库对网络的要求:

  • 带宽:集群内网络建议使用 10Gbps 或 25Gbps 以太网
  • 延迟:集群内网络的延迟建议小于 0.5ms
  • 抖动:网络抖动建议小于 0.1ms

Q5: 如何选择合适的硬件配置? ​

A5: 选择合适的硬件配置的方法:

  • 根据业务类型选择:OLTP 场景选择高主频 CPU,OLAP 场景选择多核 CPU
  • 根据业务规模选择:业务规模大的场景选择更高配置的硬件
  • 根据预算选择:在预算范围内选择最优的硬件配置
  • 参考 OceanBase 官方推荐配置:根据 OceanBase 官方推荐的硬件配置选择

Q6: 如何测试硬件性能? ​

A6: 测试硬件性能的方法:

  • 使用 sysbench 测试 CPU 和内存性能
  • 使用 fio 测试存储性能
  • 使用 iperf3 测试网络性能
  • 使用 OceanBase 官方提供的性能测试工具

Q7: 如何监控硬件状态? ​

A7: 监控硬件状态的方法:

  • 使用 OceanBase 内置的监控视图
  • 使用 OCP 控制台监控硬件状态
  • 使用第三方监控工具,如 Prometheus + Grafana
  • 使用服务器厂商提供的监控工具

Q8: 如何处理硬件故障? ​

A8: 处理硬件故障的方法:

  • 制定硬件故障处理流程
  • 使用监控工具及时发现硬件故障
  • 隔离故障硬件,避免影响其他硬件
  • 修复或更换故障硬件
  • 恢复 OceanBase 数据库的服务

Q9: 如何升级硬件? ​

A9: 升级硬件的方法:

  • 评估硬件瓶颈
  • 制定升级计划
  • 在测试环境中测试升级效果
  • 在生产环境中执行升级
  • 验证升级后的性能和可靠性

Q10: 如何优化硬件资源利用率? ​

A10: 优化硬件资源利用率的方法:

  • 合理配置硬件资源
  • 优化 OceanBase 数据库的配置
  • 优化 SQL 查询
  • 调整租户的资源配额
  • 启用硬件加速功能

硬件推荐配置 ​

开发测试环境 ​

组件配置
CPU8 核以上,主频 2.0GHz 以上
内存32GB 以上
存储SATA SSD,容量 100GB 以上
网络1Gbps 以太网

生产环境 ​

OLTP 场景 ​

组件配置
CPU32 核以上,主频 3.0GHz 以上
内存128GB 以上
存储NVMe SSD,容量 1TB 以上,RAID 10
网络10Gbps 或 25Gbps 以太网

OLAP 场景 ​

组件配置
CPU64 核以上,多核 CPU
内存256GB 以上
存储NVMe SSD 或 SATA SSD,容量 2TB 以上,RAID 5 或 RAID 6
网络10Gbps 或 25Gbps 以太网

混合场景 ​

组件配置
CPU48 核以上,主频 2.5GHz 以上
内存192GB 以上
存储NVMe SSD,容量 1.5TB 以上,RAID 10
网络10Gbps 或 25Gbps 以太网