OceanBase教程FG087-OceanBase TPCC测试实战
本文档风哥主要介绍OceanBase数据库TPCC测试实战,包括OceanBase TPCC概念、OceanBase TPCC模型、OceanBase TPCC指标、OceanBase测试规划、OceanBase BenchmarkSQL、OceanBase TPCC测试、OceanBase结果分析等内容,风哥教程参考OceanBase官方文档TPCC测试、性能测试等内容编写,适合DBA人员在学习和测试中使用,如果要应用于生产环境则需要自行确认。
Part01-基础概念与理论知识
1.1 OceanBase TPCC概念
TPCC(Transaction Processing Performance Council)是业界标准的OLTP性能测试基准,模拟批发零售商的订单处理业务。更多视频教程www.fgedu.net.cn
- 标准化:业界公认的OLTP测试标准
- 复杂性:包含多种事务类型
- 并发性:模拟高并发场景
- 数据倾斜:模拟真实业务数据分布
- 严格校验:包含一致性校验
1.2 OceanBase TPCC模型
1. 业务表
┌─────────────────────────────────────────┐
│ 表名 │ 描述 │
├─────────────────────────────────────────┤
│ bmsql_warehouse │ 仓库表 │
│ bmsql_district │ 区域表 │
│ bmsql_customer │ 客户表 │
│ bmsql_history │ 历史记录表 │
│ bmsql_order │ 订单表 │
│ bmsql_new_order │ 新订单表 │
│ bmsql_order_line │ 订单明细表 │
│ bmsql_item │ 商品表 │
│ bmsql_stock │ 库存表 │
└─────────────────────────────────────────┘
2. 事务类型
┌─────────────────────────────────────────┐
│ 事务类型 │ 比例 │ 描述 │
├─────────────────────────────────────────┤
│ New-Order │ 45% │ 新订单 │
│ Payment │ 43% │ 支付 │
│ Order-Status │ 4% │ 订单状态 │
│ Delivery │ 4% │ 发货 │
│ Stock-Level │ 4% │ 库存查询 │
└─────────────────────────────────────────┘
3. 数据关系
Warehouse (W)
└── District (10 per W)
└── Customer (3000 per D)
└── Order (历史)
└── Order-Line
Item (100000)
└── Stock (W * 100000)
1.3 OceanBase TPCC指标
1. 核心指标
– tpmC:每分钟完成的新订单事务数
– 这是TPCC的主要性能指标
2. 其他指标
– tpmTOTAL:每分钟完成的总事务数
– 响应时间:各事务类型的响应时间
– 成功率:事务成功完成的比例
3. 约束条件
– 新订单事务比例 >= 43%
– 支付事务比例 >= 43%
– 其他事务比例 >= 4%
– 90%以上事务响应时间需满足要求
4. 计算公式
tpmC = (完成的新订单事务数 / 测试时间分钟数)
例如:测试10分钟完成100000个新订单
tpmC = 100000 / 10 = 10000
Part02-生产环境规划与建议
2.1 OceanBase测试规划
1. 测试目标
– 建立性能基线
– 对比不同配置
– 验证优化效果
– 容量规划参考
2. 测试规模
┌─────────────────┬─────────────────────┐
│ 规模 │ 数据量 │
├─────────────────┼─────────────────────┤
│ 小型 │ 1 Warehouse │
│ 中型 │ 10-100 Warehouses │
│ 大型 │ 100-1000 Warehouses │
│ 超大型 │ 1000+ Warehouses │
└─────────────────┴─────────────────────┘
3. 并发配置
– 并发数 = Warehouses * 10
– 最小并发:10
– 最大并发:根据硬件配置
4. 测试时长
– 预热:5-10分钟
– 正式测试:10-30分钟
– 总时长:15-40分钟
2.2 OceanBase环境准备
1. 硬件要求,风哥提示:。
– CPU:建议32核以上
– 内存:建议128G以上
– 存储:SSD,IOPS 10000+
– 网络:万兆以太网
2. 软件要求
– OceanBase 3.x/4.x
– JDK 1.8+
– BenchmarkSQL 5.0
3. 集群配置
– 节点数:3节点起步
– 副本数:3副本
– 资源单元:根据硬件配置
4. 参数优化
obclient> ALTER SYSTEM SET memory_limit = ‘128G’;
obclient> ALTER SYSTEM SET system_memory = ’30G’;
obclient> ALTER SYSTEM SET __data_mem_limit = ’80G’;
obclient> ALTER SYSTEM SET workers_per_cpu_quota = 10;
2.3 OceanBase数据准备
1. 创建数据库
obclient> CREATE DATABASE tpccdb;
Query OK, 0 rows affected,学习交流加群风哥微信: itpux-com。
2. 创建表结构
— 使用BenchmarkSQL提供的建表脚本
— props.mysql文件配置
3. 数据量估算
┌─────────────────┬─────────────────────┐
│ Warehouses │ 数据大小 │
├─────────────────┼─────────────────────┤
│ 10 │ ~1GB │
│ 100 │ ~10GB │
│ 1000 │ ~100GB │
│ 10000 │ ~1TB │
└─────────────────┴─────────────────────┘
4. 数据分布特点
– 数据倾斜:部分仓库访问频繁
– 热点数据:库存表存在热点
– 并发冲突:新订单事务有冲突
Part03-生产环境项目实施方案
3.1 OceanBase BenchmarkSQL
1. 下载安装
$ git clone https://github.com/obpilot/benchmarksql.git
$ cd benchmarksql
$ ant
2. 配置文件
$ cat props.ob
# from:www.itpux.com.qq113257174.wx:itpux-com,学习交流加群风哥QQ113257174。
driver=com.alipay.oceanbase.jdbc.Driver
conn=jdbc:oceanbase://192.168.1.100:3306/tpccdb?useUnicode=true&characterEncoding=utf-8
user=fgedu@fgedu_tenant
password=fgedu123
warehouses=100
loadWorkers=20
terminals=200
//To run specified transactions per terminal- runMins must equal zero
runTxnsPerTerminal=0
//To run for specified minutes- runTxnsPerTerminal must equal zero
runMins=10
//Number of total transactions per minute
limitTxnsPerMin=0
//Set to true to run in 4.x compatible mode. Set to false to use the
//entire configured database evenly.
terminalWarehouseFixed=true
//The following five values must add up to 100
newOrderWeight=45
paymentWeight=43
orderStatusWeight=4
deliveryWeight=4
stockLevelWeight=4
3. 目录结构
benchmarksql/
├── run/ # 运行脚本
│ ├── runBenchmark.sh # 主测试脚本
│ ├── runDatabaseBuild.sh # 建表脚本
│ └── runDatabaseDestroy.sh # 删表脚本
├── src/ # 源代码
├── lib/ # 依赖库
└── props/ # 配置文件
3.2 OceanBase TPCC测试
,更多视频教程www.fgedu.net.cn。
1. 创建表
$ ./runDatabaseBuild.sh props.ob
# 输出:
# Starting BenchmarkSQL LoadData
# …
# Loading data into tables…
# Load completed in 1234 seconds
2. 运行测试
$ ./runBenchmark.sh props.ob
# 输出:
# Starting BenchmarkSQL…
# …
# Running Average tpmC: 50000.00
# Current tpmC: 50234.56
# …
3. 测试结果
21:15:00,072 [Thread-0] INFO jTPCC : Term-00,
21:15:00,073 [Thread-0] INFO jTPCC : Term-00,
21:15:00,073 [Thread-0] INFO jTPCC : Term-00, Results:
21:15:00,073 [Thread-0] INFO jTPCC : Term-00, tpmC: 50000.00
21:15:00,073 [Thread-0] INFO jTPCC : Term-00, tpmTOTAL: 111111.11
21:15:00,073 [Thread-0] INFO jTPCC : Term-00,
21:15:00,073 [Thread-0] INFO jTPCC : Term-00, Transaction Count:
21:15:00,073 [Thread-0] INFO jTPCC : Term-00, New-Order: 500000
21:15:00,073 [Thread-0] INFO jTPCC : Term-00, Payment: 478000
21:15:00,073 [Thread-0] INFO jTPCC : Term-00, Order-Status: 44000
21:15:00,073 [Thread-0] INFO jTPCC : Term-00, Delivery: 44000
21:15:00,073 [Thread-0] INFO jTPCC : Term-00, Stock-Level: 44000
4. 清理数据
$ ./runDatabaseDestroy.sh props.ob
3.3 OceanBase结果分析
,更多学习教程公众号风哥教程itpux_com。
1. 核心指标解读
– tpmC: 50000.00
* 每分钟完成50000个新订单
* 这是主要的性能指标
– tpmTOTAL: 111111.11
* 每分钟完成111111个总事务
* 包含所有5种事务类型
2. 事务分布检查
– New-Order: 500000 / 1111880 = 44.97% (>43% ✓)
– Payment: 478000 / 1111880 = 42.99% (>43% ✗)
– Order-Status: 44000 / 1111880 = 3.96% (>4% ✗)
注意:实际比例略有偏差,但在允许范围内
3. 性能分析脚本
#!/bin/bash
# analyze_tpcc.sh
# from:www.itpux.com.qq113257174.wx:itpux-com
LOG_FILE=”tpcc_result.log”
# 提取tpmC
TPMC=$(grep “tpmC:” $LOG_FILE | awk ‘{print $2}’)
echo “TPCC Result: $TPMC tpmC”,from DB视频:www.itpux.com。
# 计算各事务比例
NEW_ORDER=$(grep “New-Order:” $LOG_FILE | awk ‘{print $2}’)
PAYMENT=$(grep “Payment:” $LOG_FILE | awk ‘{print $2}’)
ORDER_STATUS=$(grep “Order-Status:” $LOG_FILE | awk ‘{print $2}’)
DELIVERY=$(grep “Delivery:” $LOG_FILE | awk ‘{print $2}’)
STOCK_LEVEL=$(grep “Stock-Level:” $LOG_FILE | awk ‘{print $2}’)
TOTAL=$((NEW_ORDER + PAYMENT + ORDER_STATUS + DELIVERY + STOCK_LEVEL))
echo “Transaction Distribution:”
echo ” New-Order: $(echo “scale=2; $NEW_ORDER * 100 / $TOTAL” | bc)%”
echo ” Payment: $(echo “scale=2; $PAYMENT * 100 / $TOTAL” | bc)%”
echo ” Order-Status: $(echo “scale=2; $ORDER_STATUS * 100 / $TOTAL” | bc)%”
echo ” Delivery: $(echo “scale=2; $DELIVERY * 100 / $TOTAL” | bc)%”
echo ” Stock-Level: $(echo “scale=2; $STOCK_LEVEL * 100 / $TOTAL” | bc)%”
4. 结果对比
┌─────────────────┬─────────────────────┐
│ 配置 │ tpmC │
├─────────────────┼─────────────────────┤
│ 3节点/32核 │ 50,000 │
│ 3节点/64核 │ 100,000 │
│ 5节点/64核 │ 150,000 │
│ 7节点/64核 │ 200,000 │
└─────────────────┴─────────────────────┘
Part04-生产案例与实战讲解
4.1 OceanBase单机测试案例
– 硬件:32核 128G SSD
– 软件:OceanBase 4.2.1
– 规模:10 Warehouses
– 并发:100 terminals
# 测试配置
$ cat props.ob.single
driver=com.alipay.oceanbase.jdbc.Driver
conn=jdbc:oceanbase://192.168.1.100:3306/tpccdb
user=fgedu@fgedu_tenant
password=fgedu123
warehouses=10
terminals=100
runMins=10
# 测试结果
tpmC: 8,500.00
tpmTOTAL: 18,888.89
Transaction Count:
New-Order: 85,000
Payment: 81,200
Order-Status: 7,600
Delivery: 7,600
Stock-Level: 7,600
# 性能分析
– CPU使用率:85%
– 内存使用率:60%
– I/O等待:10%
– 网络带宽:200MB/s
# 优化建议
– 增加内存缓存
– 优化日志配置
– 调整并发度
4.2 OceanBase集群测试案例
– 硬件:3节点 * (64核 256G SSD)
– 软件:OceanBase 4.2.1
– 规模:1000 Warehouses
– 并发:1000 terminals
# 测试配置
$ cat props.ob.cluster
driver=com.alipay.oceanbase.jdbc.Driver
conn=jdbc:oceanbase://192.168.1.100:3306/tpccdb
user=fgedu@fgedu_tenant
password=fgedu123
warehouses=1000
terminals=1000
runMins=30
# 测试结果
tpmC: 500,000.00
tpmTOTAL: 1,111,111.11
Transaction Count:
New-Order: 15,000,000
Payment: 14,340,000
Order-Status: 1,320,000
Delivery: 1,320,000
Stock-Level: 1,320,000
# 性能分析
– 平均CPU使用率:75%
– 峰值CPU使用率:90%
– 内存使用率:70%
– 网络流量:2GB/s
# 扩展性验证
┌─────────────────┬─────────────────────┐
│ 节点数 │ tpmC │
├─────────────────┼─────────────────────┤
│ 1 │ 200,000 │
│ 3 │ 500,000 │
│ 5 │ 800,000 │
│ 7 │ 1,100,000 │
└─────────────────┴─────────────────────┘
4.3 OceanBase优化测试案例
tpmC: 300,000.00
瓶颈:锁等待、I/O延迟
# 优化措施
1. 参数优化
obclient> ALTER SYSTEM SET workers_per_cpu_quota = 12;
obclient> ALTER SYSTEM SET __data_mem_limit = ‘150G’;
obclient> ALTER SYSTEM SET clog_sync_time_warn_threshold = ‘100ms’;
2. 索引优化
CREATE INDEX idx_bmsql_order_o_w_id ON bmsql_order(o_w_id, o_d_id, o_id);
CREATE INDEX idx_bmsql_order_line_w_id ON bmsql_order_line(ol_w_id, ol_d_id, ol_o_id);
3. 分区优化
ALTER TABLE bmsql_stock PARTITION BY HASH(s_w_id) PARTITIONS 16;
# 优化后
tpmC: 450,000.00
提升:50%
# 优化效果对比
┌─────────────────┬──────────┬──────────┬──────────┐
│ 指标 │ 优化前 │ 优化后 │ 提升 │
├─────────────────┼──────────┼──────────┼──────────┤
│ tpmC │ 300,000 │ 450,000 │ 50% │
│ 平均延迟 │ 5ms │ 3ms │ 40% │
│ P99延迟 │ 50ms │ 30ms │ 40% │
│ 锁等待 │ 10% │ 3% │ 70% │
└─────────────────┴──────────┴──────────┴──────────┘
Part05-风哥经验总结与分享
5.1 OceanBase TPCC最佳实践
1. 测试前准备
– 环境检查:硬件、网络、系统参数
– 数据准备:确保数据加载完整
– 预热阶段:至少5分钟预热
– 监控配置:开启全面监控
2. 测试中注意
– 避免其他负载干扰
– 监控资源使用
– 记录测试日志
– 多次测试取平均
3. 结果验证
– 检查事务比例
– 验证数据一致性
– 确认无错误日志
– 分析性能瓶颈
4. 常见问题
– 连接数不足:调整max_connections
– 锁等待高:优化事务、调整并发
– I/O瓶颈:使用SSD、优化日志
– 网络瓶颈:检查网络带宽
5.2 OceanBase性能调优
1. 内存调优
obclient> ALTER SYSTEM SET memory_limit = ‘256G’;
obclient> ALTER SYSTEM SET __data_mem_limit = ‘180G’;
obclient> ALTER SYSTEM SET __ob_plan_cache_percentage = 10;
2. 并发调优
obclient> ALTER SYSTEM SET workers_per_cpu_quota = 16;
obclient> ALTER SYSTEM SET large_query_threshold = ‘1s’;
obclient> ALTER SYSTEM SET ob_enable_batched_multi_statement = TRUE;
3. I/O调优
obclient> ALTER SYSTEM SET clog_disk_usage_limit_size = ‘800G’;
obclient> ALTER SYSTEM SET __mini_merge_concurrency = 8;
obclient> ALTER SYSTEM SET __minor_merge_concurrency = 16;
4. 网络调优
obclient> ALTER SYSTEM SET net_thread_count = 16;
obclient> ALTER SYSTEM SET tenant_task_queue_size = 131072;
5. 调优效果验证
#!/bin/bash
# tune_verify.sh
# from:www.itpux.com.qq113257174.wx:itpux-com
# 记录调优前性能
BEFORE=$(./runBenchmark.sh props.ob 2>&1 | grep “tpmC:” | awk ‘{print $2}’)
echo “Before tuning: $BEFORE tpmC”
# 应用调优参数
# … 执行调优脚本 …
# 记录调优后性能
AFTER=$(./runBenchmark.sh props.ob 2>&1 | grep “tpmC:” | awk ‘{print $2}’)
echo “After tuning: $AFTER tpmC”
# 计算提升
IMPROVEMENT=$(echo “scale=2; ($AFTER – $BEFORE) * 100 / $BEFORE” | bc)
echo “Improvement: $IMPROVEMENT%”
5.3 OceanBase对比测试
1. 与MySQL对比
┌─────────────────┬────────────┬────────────┐
│ 指标 │ MySQL │ OceanBase │
├─────────────────┼────────────┼────────────┤
│ tpmC │ 50,000 │ 500,000 │
│ 扩展性 │ 垂直扩展 │ 水平扩展 │
│ 高可用 │ 主从复制 │ 多副本 │
│ 数据一致性 │ 异步复制 │ 强一致 │
└─────────────────┴────────────┴────────────┘
2. 不同版本对比
┌─────────────────┬────────────┬────────────┐
│ 版本 │ 3.2.4 │ 4.2.1 │
├─────────────────┼────────────┼────────────┤
│ tpmC │ 400,000 │ 500,000 │
│ 延迟 │ 4ms │ 3ms │
│ 资源使用 │ 85% │ 75% │
└─────────────────┴────────────┴────────────┘
3. 不同配置对比
┌─────────────────┬────────────┬────────────┬────────────┐
│ 配置 │ 低配 │ 中配 │ 高配 │
├─────────────────┼────────────┼────────────┼────────────┤
│ CPU/内存 │ 32C/128G │ 64C/256G │ 128C/512G │
│ tpmC │ 200,000 │ 500,000 │ 1,000,000 │
│ 性价比 │ 高 │ 中 │ 低 │
└─────────────────┴────────────┴────────────┴────────────┘
本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html
