OceanBase教程FG086-OceanBase压力测试性能基准
本文档风哥主要介绍OceanBase数据库压力测试性能基准,包括OceanBase基准测试概念、OceanBase测试类型、OceanBase性能指标、OceanBase测试规划、OceanBase Sysbench测试、OceanBase TPCC测试、OceanBase自定义测试等内容,风哥教程参考OceanBase官方文档性能测试、基准测试等内容编写,适合DBA人员在学习和测试中使用,如果要应用于生产环境则需要自行确认。
Part01-基础概念与理论知识
1.1 OceanBase基准测试概念
基准测试是通过标准化的测试方法评估数据库性能的过程,用于建立性能基线、验证优化效果、指导容量规划。更多视频教程www.fgedu.net.cn
- 性能评估:了解系统性能上限
- 容量规划:指导硬件配置
- 优化验证:验证优化效果
- 对比选型:与其他数据库对比
- 问题发现:发现性能瓶颈
1.2 OceanBase测试类型
1. OLTP测试
– 特点:高并发、短事务
– 工具:Sysbench、TPCC
– 指标:TPS、QPS、延迟
2. OLAP测试
– 特点:复杂查询、大数据量
– 工具:TPC-H、TPC-DS
– 指标:查询时间、吞吐量
3. HTAP测试
– 特点:混合负载
– 工具:自定义场景
– 指标:综合性能
4. 压力测试
– 负载测试:逐步增加负载
– 稳定性测试:长时间运行
– 峰值测试:最大负载
– 破坏性测试:超过极限
1.3 OceanBase性能指标
1. 吞吐量指标
– TPS:每秒事务数
– QPS:每秒查询数
– 吞吐量:每秒处理数据量
2. 响应时间指标
– 平均响应时间
– 95分位响应时间
– 99分位响应时间
– 最大响应时间
3. 资源指标
– CPU使用率
– 内存使用率
– I/O吞吐量
– 网络带宽
4. 并发指标
– 并发连接数
– 活跃会话数
– 等待队列长度
5. 指标示例
┌─────────────────┬─────────────────────┐
│ 指标 │ 参考值 │
├─────────────────┼─────────────────────┤
│ TPS │ 10000+ │
│ 平均延迟 │ < 10ms │
│ 99分位延迟 │ < 100ms │
│ CPU使用率 │ < 80% │
└─────────────────┴─────────────────────┘
Part02-生产环境规划与建议
2.1 OceanBase测试规划
1. 测试目标
– 确定测试目的
– 定义成功标准
– 确定测试范围
2. 测试场景
– 业务场景分析
– 关键操作识别
– 并发模型设计
3. 测试数据
– 数据量估算
– 数据分布设计
– 数据准备脚本
4. 测试计划
┌─────────────────┬─────────────────────┐
│ 阶段 │ 内容 │
├─────────────────┼─────────────────────┤
│ 准备阶段 │ 环境搭建、数据准备 │
│ 基准测试 │ 建立性能基线 │
│ 压力测试 │ 逐步增加负载 │
│ 稳定性测试 │ 长时间运行 │
│ 分析优化 │ 瓶颈分析、优化验证 │
└─────────────────┴─────────────────────┘
2.2 OceanBase环境准备
1. 硬件环境
– CPU:与生产一致
– 内存:与生产一致
– 存储:与生产一致,风哥提示:。
– 网络:与生产一致
2. 软件环境
– 操作系统版本
– OceanBase版本
– 内核参数配置
– 系统优化
3. 集群配置
– 节点数量
– 副本数
– 资源单元配置
– 租户配置
4. 监控配置
– OCP部署
– 监控项配置
– 告警规则
– 日志收集
2.3 OceanBase测试数据
1. 数据量规划
– 小数据量:100万行
– 中数据量:1000万行
– 大数据量:1亿行+,学习交流加群风哥微信: itpux-com。
– 超大数据量:10亿行+
2. 数据生成
#!/bin/bash
# generate_data.sh
# from:www.itpux.com.qq113257174.wx:itpux-com
# 生成测试数据
obclient -e ”
CREATE TABLE fgedu_benchmark (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
user_id BIGINT NOT NULL,
order_id BIGINT NOT NULL,
amount DECIMAL(18,2) NOT NULL,
status INT DEFAULT 0,
create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
INDEX idx_user_id (user_id),
INDEX idx_create_time (create_time)
);
— 插入测试数据
INSERT INTO fgedu_benchmark (user_id, order_id, amount, status)
SELECT
FLOOR(RAND() * 1000000),
FLOOR(RAND() * 10000000),
ROUND(RAND() * 1000, 2),
FLOOR(RAND() * 5)
FROM
(SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5) t1,
(SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5) t2,
(SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5) t3,
(SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5) t4,
(SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5) t5,
(SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5) t6;
”
3. 数据验证
obclient> SELECT COUNT(*) FROM fgedu_benchmark;
+———-+
| COUNT(*) |,学习交流加群风哥QQ113257174。
+———-+
| 15625 |
+———-+
Part03-生产环境项目实施方案
3.1 OceanBase Sysbench测试
1. 安装Sysbench
$ yum install -y sysbench
2. 准备测试
$ sysbench /usr/share/sysbench/oltp_read_write.lua \
–mysql-host=192.168.1.100 \
–mysql-port=3306 \
–mysql-user=fgedu@fgedu_tenant \
–mysql-password=fgedu123 \
–mysql-db=fgedudb \
–tables=10 \
–table-size=100000 \
–threads=64 \
prepare
3. 执行测试
$ sysbench /usr/share/sysbench/oltp_read_write.lua \
–mysql-host=192.168.1.100 \
–mysql-port=3306 \
–mysql-user=fgedu@fgedu_tenant \
–mysql-password=fgedu123 \
–mysql-db=fgedudb \
–tables=10 \
–table-size=100000 \,更多视频教程www.fgedu.net.cn。
–threads=64 \
–time=300 \
–report-interval=10 \
run
4. 测试结果
SQL statistics:
queries performed:
read: 1540280
write: 440080
other: 220040
total: 2200400
transactions: 110020 (366.70 per sec.)
queries: 2200400 (7334.00 per sec.)
ignored errors: 0 (0.00 per sec.)
reconnects: 0 (0.00 per sec.)
General statistics:
total time: 300.0014s
total number of events: 110020
Latency (ms):
min: 5.21
avg: 174.52
max: 1234.56
95th percentile: 456.78
sum: 19199999.99
Threads fairness:
events (avg/stddev): 1719.0625/45.23
execution time (avg/stddev): 299.9999/0.01
5. 清理数据
$ sysbench /usr/share/sysbench/oltp_read_write.lua \
–mysql-host=192.168.1.100 \
–mysql-port=3306 \
–mysql-user=fgedu@fgedu_tenant \
–mysql-password=fgedu123 \
–mysql-db=fgedudb \
cleanup,更多学习教程公众号风哥教程itpux_com。
3.2 OceanBase TPCC测试
1. 下载TPCC工具
$ git clone https://github.com/Percona-Lab/tpcc-mysql.git
$ cd tpcc-mysql/src
$ make
2. 创建测试表
$ mysql -h192.168.1.100 -P3306 -ufgedu@fgedu_tenant -p \
-Dfgedudb < create_table.sql
3. 加载数据
$ ./tpcc_load -h192.168.1.100 -P3306 \
-ufgedu@fgedu_tenant -pfgedu123 \
-dfgedudb -w 10
4. 执行测试
$ ./tpcc_start -h192.168.1.100 -P3306 \
-ufgedu@fgedu_tenant -pfgedu123 \
-dfgedudb -w 10 -c 32 -r 10 -l 300
5. 测试结果
***************************************
*** ###easy### TPC-C Load Generator ***
***************************************,from DB视频:www.itpux.com。
option h with value '192.168.1.100'
option P with value '3306'
option d with value 'fgedudb'
option u with value 'fgedu@fgedu_tenant'
option p with value 'fgedu123'
option w with value '10'
option c with value '32'
option r with value '10'
option l with value '300'
...
[Current] NEW_ORDER: 12500, PAYMENT: 12000, ORDER_STATUS: 1000, DELIVERY: 1000, STOCK_LEVEL: 1000
[Current] NEW_ORDER: 12600, PAYMENT: 12100, ORDER_STATUS: 1010, DELIVERY: 1010, STOCK_LEVEL: 1010
...
[0] sc:126000 lt:0 rt:0 fl:0
[1] sc:120000 lt:0 rt:0 fl:0
[2] sc:12000 lt:0 rt:0 fl:0
[3] sc:12000 lt:0 rt:0 fl:0
[4] sc:12000 lt:0 rt:0 fl:0
in 300 sec.
[0] sc:126000 lt:0 rt:0 fl:0
[1] sc:120000 lt:0 rt:0 fl:0
[2] sc:12000 lt:0 rt:0 fl:0
[3] sc:12000 lt:0 rt:0 fl:0
[4] sc:12000 lt:0 rt:0 fl:0
[transaction percentage]
Payment: 43.48% (>=43.0%) [OK]
Order-Status: 4.35% (>= 4.0%) [OK]
Delivery: 4.35% (>= 4.0%) [OK]
Stock-Level: 4.35% (>= 4.0%) [OK]
[response time (at least 90% passed)]
New-Order: 100.00% [OK]
Payment: 100.00% [OK]
Order-Status: 100.00% [OK]
Delivery: 100.00% [OK]
Stock-Level: 100.00% [OK]
25200.000 TpmC
3.3 OceanBase自定义测试
1. 测试脚本
#!/bin/bash
# custom_benchmark.sh
# from:www.itpux.com.qq113257174.wx:itpux-com
# 配置
HOST=”192.168.1.100″
PORT=”3306″
USER=”fgedu@fgedu_tenant”
PASS=”fgedu123″
DB=”fgedudb”
THREADS=”64″
DURATION=”300″
# 测试函数
run_test() {
local test_name=$1
local sql=$2
echo “Running test: $test_name”
# 执行测试
for i in $(seq 1 $THREADS); do
(
for j in $(seq 1 1000); do
mysql -h$HOST -P$PORT -u$USER -p$PASS -D$DB -e “$sql” > /dev/null 2>&1
done
) &
done
wait
echo “Test completed: $test_name”
}
# 测试场景
run_test “Point Select” “SELECT * FROM fgedu_order WHERE order_id = FLOOR(RAND() * 1000000)”
run_test “Range Select” “SELECT * FROM fgedu_order WHERE create_time > DATE_SUB(NOW(), INTERVAL 1 DAY) LIMIT 100”
run_test “Insert” “INSERT INTO fgedu_order (user_id, amount) VALUES (FLOOR(RAND() * 1000000), ROUND(RAND() * 1000, 2))”
run_test “Update” “UPDATE fgedu_order SET status = 1 WHERE order_id = FLOOR(RAND() * 1000000)”
echo “All tests completed”
2. 结果分析
#!/bin/bash
# analyze_results.sh
# 收集性能数据
obclient -e ”
SELECT
‘TPS’ as metric,
COUNT(*) / 300 as value
FROM oceanbase.__all_virtual_sql_audit
WHERE request_time > DATE_SUB(NOW(), INTERVAL 5 MINUTE)
UNION ALL
SELECT
‘Avg Latency(ms)’ as metric,
AVG(elapsed_time) / 1000 as value
FROM oceanbase.__all_virtual_sql_audit
WHERE request_time > DATE_SUB(NOW(), INTERVAL 5 MINUTE)
UNION ALL
SELECT
‘P99 Latency(ms)’ as metric,
percentile_cont(0.99) WITHIN GROUP (ORDER BY elapsed_time) / 1000 as value
FROM oceanbase.__all_virtual_sql_audit
WHERE request_time > DATE_SUB(NOW(), INTERVAL 5 MINUTE);
”
Part04-生产案例与实战讲解
4.1 OceanBase OLTP基准案例
– 金融交易系统
– 高并发短事务
– 低延迟要求
# 测试配置
1. 硬件配置
– CPU:64核
– 内存:256G
– 存储:SSD
– 网络:万兆
2. 集群配置
– 3节点
– 3副本
– 64线程
3. 测试结果
┌─────────────────┬─────────────────────┐
│ 指标 │ 结果 │
├─────────────────┼─────────────────────┤
│ TPS │ 50,000 │
│ QPS │ 750,000 │
│ 平均延迟 │ 1.2ms │
│ P99延迟 │ 5ms │
│ CPU使用率 │ 75% │
└─────────────────┴─────────────────────┘
4. 优化建议
– 增加连接池
– 优化SQL
– 调整并发度
– 扩容节点
4.2 OceanBase OLAP基准案例
– 数据分析平台
– 复杂查询
– 大数据量
# 测试配置
1. 数据规模
– 表数量:10
– 总数据量:1TB
– 最大表:100亿行
2. 查询类型
– 聚合查询
– 多表关联
– 窗口函数
– 子查询
3. 测试结果
┌─────────────────┬─────────────────────┐
│ 查询类型 │ 执行时间 │
├─────────────────┼─────────────────────┤
│ 简单聚合 │ 2s │
│ 复杂关联 │ 15s │
│ 窗口函数 │ 8s │
│ 全表扫描 │ 45s │
└─────────────────┴─────────────────────┘
4. 优化建议
– 创建物化视图
– 优化索引
– 并行查询
– 分区裁剪
4.3 OceanBase HTAP基准案例
– 混合负载
– OLTP + OLAP
– 资源隔离
# 测试配置
1. 负载比例
– OLTP:70%
– OLAP:30%
2. 资源分配
– OLTP租户:40%资源
– OLAP租户:60%资源
3. 测试结果
┌─────────────────┬─────────────────────┐
│ 指标 │ 结果 │
├─────────────────┼─────────────────────┤
│ OLTP TPS │ 35,000 │
│ OLAP QPS │ 100 │
│ OLTP延迟 │ 2ms │
│ OLAP延迟 │ 10s │
│ 资源争抢 │ 无 │
└─────────────────┴─────────────────────┘
4. 优化建议
– 租户隔离
– 副本隔离
– Cgroup限制
– 动态调整
Part05-风哥经验总结与分享
5.1 OceanBase测试最佳实践
1. 测试前准备
– 环境检查
– 数据准备
– 监控配置
– 基线记录
2. 测试中注意
– 预热阶段
– 稳定采样
– 多轮测试
– 记录日志
3. 测试后分析
– 数据整理
– 瓶颈分析
– 优化建议
– 报告输出
4. 常见错误
– 未预热直接测试
– 测试时间过短
– 监控数据缺失
– 环境不一致
5.2 OceanBase结果分析
1. 性能瓶颈识别
– CPU瓶颈:CPU使用率>90%
– I/O瓶颈:I/O等待高
– 内存瓶颈:内存不足
– 网络瓶颈:网络延迟高
2. 分析脚本
#!/bin/bash
# analyze_bottleneck.sh
# from:www.itpux.com.qq113257174.wx:itpux-com
# 获取CPU使用率
CPU_USAGE=$(top -bn1 | grep “Cpu(s)” | awk ‘{print $2}’ | cut -d’%’ -f1)
echo “CPU Usage: $CPU_USAGE%”
# 获取I/O等待
IO_WAIT=$(iostat -x 1 1 | tail -1 | awk ‘{print $10}’)
echo “IO Wait: $IO_WAIT%”
# 获取内存使用
MEM_USAGE=$(free | grep Mem | awk ‘{printf “%.2f”, $3/$2 * 100.0}’)
echo “Memory Usage: $MEM_USAGE%”
# 获取慢查询
obclient -e ”
SELECT
sql_id,
LEFT(sql_text, 100) as sql_text,
elapsed_time / 1000000 as elapsed_sec,
execute_time / 1000000 as exec_sec
FROM oceanbase.__all_virtual_sql_audit
WHERE elapsed_time > 10000000
ORDER BY elapsed_time DESC
LIMIT 10;
”
3. 优化方向
┌─────────────────┬─────────────────────┐
│ 瓶颈类型 │ 优化方向 │
├─────────────────┼─────────────────────┤
│ CPU瓶颈 │ SQL优化、扩容 │
│ I/O瓶颈 │ 索引优化、SSD │
│ 内存瓶颈 │ 参数调整、扩容 │
│ 网络瓶颈 │ 网络优化、本地化 │
└─────────────────┴─────────────────────┘
5.3 OceanBase优化指导
1. 参数优化
– 内存参数
– 并发参数
– I/O参数
– 缓存参数
2. SQL优化
– 索引优化
– 执行计划
– 批量操作
– 并行查询
3. 架构优化
– 分区设计
– 读写分离
– 负载均衡
– 缓存层
4. 持续优化
– 定期基准测试
– 趋势分析
– 容量规划
– 性能调优
本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html
