# dbbench-suite **Repository Path**: DBLab-CN/dbbench-suite ## Basic Information - **Project Name**: dbbench-suite - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-10-16 - **Last Updated**: 2026-10-17 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # DBBench Suite - 数据库性能测试基准套件 一套开箱即用的性能测试工具,覆盖 **数据库层(sysbench)**,一条命令完成压测并生成对比报告。 ## 为什么做这个? 大部分团队做性能测试的痛点: - 知道要测,但不知道测什么场景、怎么设计参数 - 每次选型都要重新写脚本,重复劳动 - 测完了数据不会整理,领导问"A和B差多少"答不上来 DBBench Suite 解决这些问题:标准化脚本 + 自动出报告 + 一键对比。 ## 功能特性 ✅ **数据库性能测试(sysbench)** - 支持 MySQL / MariaDB / PostgreSQL - 只读点查、读写混合、纯写等 7 种场景 - 自动并发梯度测试(1→4→8→16→32→64→128) - 自动输出 TPS / QPS / 平均延迟 / P95延迟 ✅ **自动对比报告** - 两次测试结果自动对比 - 自动计算提升/下降百分比 - 输出 Markdown 格式对比表格 ✅ **配置简单** - 所有参数集中在一个配置文件 - 改个连接信息就能跑 - 不用记复杂的 sysbench 参数 ## 快速开始 ### 1. 安装依赖 ```bash # CentOS / Rocky / RHEL yum install -y sysbench bc # Ubuntu / Debian apt install -y sysbench bc ``` ### 2. 下载套件 ```bash git clone https://gitee.com/MapLover/DBdocs.git cd DBdocs/dbbench-suite ``` ### 3. 配置数据库连接 ```bash cp config.conf config.local.conf vim config.local.conf ``` 修改以下关键配置: - `DB_TYPE`:mysql 或 pgsql - `DB_HOST` / `DB_PORT` / `DB_USER` / `DB_PASSWORD` / `DB_NAME` ### 4. 一键跑完整测试 ```bash chmod +x *.sh scenarios/*.sh lib/*.sh # 数据库性能测试(一键跑完准备→压测→清理) ./dbbench.sh all ``` ## 使用示例 ### 示例1:对比 MySQL 5.7 vs MySQL 8.0 ```bash # 第一轮:测 MySQL 5.7 # 编辑 config.local.conf 指向 5.7,设置 TEST_LABEL="MySQL5.7" ./dbbench.sh all # 第二轮:测 MySQL 8.0 # 编辑 config.local.conf 指向 8.0,设置 TEST_LABEL="MySQL8.0" ./dbbench.sh all # 自动对比 ./dbbench.sh compare \ reports/benchmark_MySQL5.7_xxx.csv \ reports/benchmark_MySQL8.0_xxx.csv \ "MySQL5.7 vs MySQL8.0" ``` ### 示例2:验证参数调优效果 ```bash # 改配置前跑一遍(基线) ./dbbench.sh run # 改数据库参数,重启 # 改配置后再跑一遍 ./dbbench.sh run # 对比前后差异 ./dbbench.sh compare baseline.csv after_tuning.csv "参数调优前后对比" ``` ## 配置说明 | 参数 | 默认值 | 说明 | |------|--------|------| | TABLES | 20 | 测试表数量 | | TABLE_SIZE | 1000000 | 单表行数(百万级) | | TEST_TIME | 120 | 每个场景测试时长(秒) | | THREADS_GRADIENT | 1,4,8,16,32,64,128 | 并发梯度 | | RUN_READ_WRITE | true | 是否跑读写混合场景 | | RUN_READ_ONLY | true | 是否跑只读场景 | | RUN_WRITE_ONLY | true | 是否跑纯写场景 | | TEST_LABEL | default | 测试标签,用于区分不同被测对象 | ## 输出报告 测试完成后,在 `reports/` 目录下生成: ``` reports/ ├── benchmark_MySQL8.0_20261016_120000.csv # 汇总报告 ├── raw_MySQL8.0_20261016_120000/ # 原始日志 │ ├── 读写混合_t1.log │ ├── 读写混合_t4.log │ └── ... └── compare_20261016_120000.txt # 对比报告 ``` ### CSV 报告格式(sysbench) | 测试场景 | 并发数 | TPS | QPS | 平均延迟(ms) | P95延迟(ms) | ... | |----------|--------|-----|-----|-------------|------------|-----| | 读写混合 | 1 | 153.06 | 3061.21 | 6.53 | 8.90 | ... | | 读写混合 | 4 | 562.04 | 11240.88 | 6.62 | 10.84 | ... | ## 测试场景说明 ### 数据库层(sysbench) | 场景 | 说明 | 适合测试什么 | |------|------|-------------| | 只读点查 | 大量主键查询 | 读性能、CPU缓存、内存带宽 | | 读写混合 | 标准OLTP场景(10读1写) | 最接近真实业务,通用性能基线 | | 纯写 | 大量写入操作 | 磁盘写入、WAL/redo日志、刷脏 | | 纯插入 | 单表插入 | 写入吞吐、索引开销 | | 纯删除 | 单表删除 | 删除性能、空间回收 | | 索引列更新 | 更新索引字段 | B+树维护、索引分裂 | ## 目录结构 ``` dbbench-suite/ ├── dbbench.sh # 主入口脚本 ├── compare.sh # 结果对比工具 ├── config.conf # 默认配置模板 ├── config.local.conf # 你的实际配置(自己创建,不入库) ├── lib/ │ └── common.sh # 公共函数 ├── reports/ # 测试报告输出目录 └── README.md # 本文件 ``` ## 常见问题 **Q: 测试前需要手动建库吗?** A: 需要先手动创建数据库(比如 sbtest),sysbench 不会帮你建库。 ```sql CREATE DATABASE sbtest; CREATE USER 'sbtest'@'%' IDENTIFIED BY 'your_password'; GRANT ALL PRIVILEGES ON sbtest.* TO 'sbtest'@'%'; FLUSH PRIVILEGES; ``` **Q: MySQL 和 PostgreSQL 的结果能直接对比吗?** A: 可以对比趋势,但绝对值差异很大。PG 默认配置偏保守,调优后差距会缩小。建议同硬件、同配置下做对比。 **Q: 测试的时候需要做什么?** A: 什么都不用做,脚本全自动。建议测试期间不要在数据库上跑其他任务。 **Q: 为什么我的结果和别人的差很多?** A: 性能受硬件、OS参数、数据库配置、数据规模影响极大。要对比的话,必须控制变量。 ## 许可证 木兰宽松许可证 v2.0 ## 作者 MapLover