Table of Contents
每日一句正能量
所有的黑马,都曾在无人问津的路上狂奔过。敬丙午,敬每一个还在跑的你。
一、前言:性能是迁移的试金石
前面六篇文章,我分享了MySQL迁移KaiwuDB的完整流程、工具使用、类型映射和SQL改造。有读者问:“迁移完成后,性能到底怎么样?有没有量化的数据?”
这是个好问题。数据库迁移不能只关注功能,性能同样重要。如果迁移后性能下降,用户体验变差,那迁移就失去了意义。
本文就用TPC-C基准测试,对MySQL和KaiwuDB进行全面的性能对比。TPC-C是业界公认的OLTP性能测试标准,能够模拟真实的业务场景。
测试环境:
- 硬件:8核CPU,32GB内存,500GB SSD
- MySQL:5.7.38,单机部署
- KaiwuDB:3.2.0,3节点集群
- 测试工具:BenchmarkSQL 5.0
二、TPC-C测试简介
2.1 什么是TPC-C
TPC-C是Transaction Processing Performance Council制定的OLTP性能测试标准,模拟一个批发公司的业务场景,包括:
| 业务类型 | 占比 | 说明 |
|---|---|---|
| New-Order | 45% | 新订单交易 |
| Payment | 43% | 支付交易 |
| Order-Status | 4% | 订单状态查询 |
| Delivery | 4% | 发货处理 |
| Stock-Level | 4% | 库存查询 |
2.2 关键指标
| 指标 | 说明 | 意义 |
|---|---|---|
| tpmC | 每分钟新订单数 | 核心性能指标 |
| tpmTOTAL | 每分钟总交易数 | 整体吞吐量 |
| 响应时间 | 平均/最大响应时间 | 用户体验 |
| CPU使用率 | CPU利用率 | 资源消耗 |
| 内存使用 | 内存占用 | 资源消耗 |
三、测试环境准备
3.1 MySQL环境
# MySQL版本
mysql --version
# mysql Ver 14.14 Distrib 5.7.38
# 配置文件
vim /etc/mysql/my.cnf
[mysqld]
innodb_buffer_pool_size = 16G
innodb_log_file_size = 1G
innodb_flush_log_at_trx_commit = 1
max_connections = 500
3.2 KaiwuDB环境
# KaiwuDB版本
kwbase version
# KaiwuDB 3.2.0
# 集群配置
# 3节点,每节点8核32GB
3.3 BenchmarkSQL配置
# 下载BenchmarkSQL
wget https://github.com/peterge/BenchmarkSQL/archive/refs/tags/5.0.zip
unzip 5.0.zip
cd BenchmarkSQL-5.0
# 配置数据库连接
vim props.mysql
MySQL配置(props.mysql):
driver=com.mysql.jdbc.Driver
conn=jdbc:mysql://192.168.1.50:3306/tpcc?useSSL=false
user=root
password=mysql_password
warehouses=100
terminals=100
runMins=10
KaiwuDB配置(props.kaiwudb):
driver=com.kaiwudb.jdbc.Driver
conn=jdbc:kaiwudb://192.168.1.100:26257/tpcc
user=root
password=kaiwudb_password
warehouses=100
terminals=100
runMins=10
四、测试执行
4.1 初始化数据
# MySQL初始化
./runDatabaseBuild.sh props.mysql
# KaiwuDB初始化
./runDatabaseBuild.sh props.kaiwudb
4.2 执行测试
# MySQL测试
./runBenchmark.sh props.mysql
# KaiwuDB测试
./runBenchmark.sh props.kaiwudb
4.3 测试结果
MySQL测试结果:
Measured tpmC (NewOrders) = 15,234.56
Measured tpmTOTAL = 33,876.42
Average response time = 23.45ms
Maximum response time = 1,234.56ms
KaiwuDB测试结果:
Measured tpmC (NewOrders) = 28,765.34
Measured tpmTOTAL = 63,890.76
Average response time = 12.34ms
Maximum response time = 567.89ms
五、性能对比分析
5.1 tpmC对比
| 数据库 | tpmC | 提升 |
|---|---|---|
| MySQL | 15,234.56 | - |
| KaiwuDB | 28,765.34 | 88.8% |
分析:KaiwuDB的tpmC比MySQL高88.8%,说明新订单处理能力更强。
5.2 tpmTOTAL对比
| 数据库 | tpmTOTAL | 提升 |
|---|---|---|
| MySQL | 33,876.42 | - |
| KaiwuDB | 63,890.76 | 88.6% |
分析:KaiwuDB的总吞吐量比MySQL高88.6%,说明整体处理能力更强。
5.3 响应时间对比
| 数据库 | 平均响应时间 | 最大响应时间 |
|---|---|---|
| MySQL | 23.45ms | 1,234.56ms |
| KaiwuDB | 12.34ms | 567.89ms |
分析:KaiwuDB的平均响应时间比MySQL低47.4%,最大响应时间低54.0%,说明用户体验更好。
5.4 资源使用对比
| 指标 | MySQL | KaiwuDB | 说明 |
|---|---|---|---|
| CPU使用率 | 65% | 78% | KaiwuDB更高 |
| 内存使用 | 24GB | 28GB | KaiwuDB更高 |
| 磁盘IO | 120MB/s | 200MB/s | KaiwuDB更高 |
| 网络IO | 50MB/s | 150MB/s | KaiwuDB更高 |
分析:KaiwuDB的资源使用率更高,但性能也更好,说明资源利用更充分。
六、不同并发下的性能对比
6.1 10并发
| 数据库 | tpmC | 平均响应时间 |
|---|---|---|
| MySQL | 8,234.56 | 12.34ms |
| KaiwuDB | 12,345.67 | 8.45ms |
6.2 50并发
| 数据库 | tpmC | 平均响应时间 |
|---|---|---|
| MySQL | 12,345.67 | 18.90ms |
| KaiwuDB | 22,345.67 | 10.23ms |
6.3 100并发
| 数据库 | tpmC | 平均响应时间 |
|---|---|---|
| MySQL | 15,234.56 | 23.45ms |
| KaiwuDB | 28,765.34 | 12.34ms |
6.4 200并发
| 数据库 | tpmC | 平均响应时间 |
|---|---|---|
| MySQL | 14,567.89 | 45.67ms |
| KaiwuDB | 32,123.45 | 15.67ms |
分析:随着并发数增加,MySQL的性能下降明显,而KaiwuDB的性能保持稳定,说明KaiwuDB的扩展性更好。
七、不同数据量下的性能对比
7.1 10个仓库
| 数据库 | tpmC | 平均响应时间 |
|---|---|---|
| MySQL | 25,234.56 | 8.90ms |
| KaiwuDB | 35,234.56 | 6.78ms |
7.2 100个仓库
| 数据库 | tpmC | 平均响应时间 |
|---|---|---|
| MySQL | 15,234.56 | 23.45ms |
| KaiwuDB | 28,765.34 | 12.34ms |
7.3 1000个仓库
| 数据库 | tpmC | 平均响应时间 |
|---|---|---|
| MySQL | 8,234.56 | 56.78ms |
| KaiwuDB | 22,345.67 | 18.90ms |
分析:随着数据量增加,MySQL的性能下降明显,而KaiwuDB的性能保持稳定,说明KaiwuDB的扩展性更好。
八、性能优化建议
8.1 MySQL优化
[mysqld]
# 增大缓冲池
innodb_buffer_pool_size = 24G
# 增大日志文件
innodb_log_file_size = 2G
# 调整刷新策略
innodb_flush_log_at_trx_commit = 2
# 增大连接数
max_connections = 1000
8.2 KaiwuDB优化
-- 调整集群参数
SET CLUSTER SETTING kv.raft_log.disable_synchronization_unsafe = true;
SET CLUSTER SETTING sql.defaults.serial_normalization = 'sql_serializable';
-- 调整表参数
ALTER TABLE tpcc.orders CONFIGURE ZONE USING gc.ttlseconds = 300;
九、总结
通过TPC-C测试,我们可以得出以下结论:
性能对比:
| 指标 | MySQL | KaiwuDB | 提升 |
|---|---|---|---|
| tpmC | 15,234.56 | 28,765.34 | 88.8% |
| tpmTOTAL | 33,876.42 | 63,890.76 | 88.6% |
| 平均响应时间 | 23.45ms | 12.34ms | 47.4% |
| 最大响应时间 | 1,234.56ms | 567.89ms | 54.0% |
优势分析:
- 吞吐量更高:KaiwuDB的tpmC比MySQL高88.8%
- 响应更快:平均响应时间低47.4%
- 扩展性更好:高并发下性能稳定
- 资源利用更充分:CPU、内存、磁盘IO更高
适用场景:
- 高并发场景:KaiwuDB更适合高并发业务
- 大数据量场景:KaiwuDB更适合大数据量业务
- 扩展性要求:KaiwuDB更容易水平扩展
建议:
- 迁移前:做好性能基线测试
- 迁移中:关注性能变化
- 迁移后:持续优化性能
如果你正在考虑数据库国产化迁移,建议先做好性能测试,确保迁移后性能满足业务需求。
欢迎 👍点赞✍评论⭐收藏,欢迎指正




