基准测试

用户在做性能测试时,可以参考以下推荐配置和测试方法自己做,也可以发工单让百度智能云工程师协助做。

测试环境

下面环境,由客户根据需要选择。如果是跟其他云厂商做性能对比,注意保持多个环境一致。

类型 说明
客户端配置 推荐BCC配置4核8G,镜像CentOS 7.5 64位
客户端个数 如单个客户端是瓶颈,建议采用多个客户端并行压测求取数据总和
并发连接数 推荐20个并发,测试多组求平均值
云数据库 RDS 实例配置 客户可根据需要选择当前售卖主流配置规格,配置越大性能越好
网络环境 需保证客户端与云数据库 RDS 实例在同一可用区,测试结果不受网络因素影响

测试工具

SysBench简介

SysBench 是一款跨平台且支持多线程的模块化基准测试工具,可以用来做 CPU/内存/磁盘IO/线程/mutex 和数据库的基准测试。目前支持的数据库有 MySQL/Oracle/PostgreSQL。

SysBench 0.5 是基于 LuaJIT 的可脚本化的多线程基准测试工具,它常用于数据库的基准测试,也可以在不安装数据库的前提下,快速获取数据库主机的性能。以下操作都将以支持MySQL数据库为例进行。

安装方法

  1. 数据库基准测试使用的 SysBench 版本为 0.5,点此下载
  2. SysBench 的一些安装依赖(root账号安装)。

    yum -y install gcc gcc-c++ autoconf automake make libtool bzr mysql-devel

  3. 执行如下命令安装 SysBench,以下假设安装在目录 /home/mysql/sysbench-0.5 。

    unzip sysbench-0.5.zip
    cd sysbench-0.5
    ./autogen.sh
    ./configure --prefix=/home/mysql/sysbench-0.5/
    make && make install
    

    注意:要求本机必须装有MySQL客户端

测试方法

测试场景

本文档基于 SysBench 0.5 的 oltp.lua 脚本进行混合压测,各种类型的 SQL 占比:select:update_key:update_non_key:delete:insert = 14:1:1:1:1 。

测试数据

  1. 库表结构

    CREATE TABLE `sbtest` (
    `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
    `k` int(10) unsigned NOT NULL DEFAULT '0',
    `c` char(120) NOT NULL DEFAULT '',
    `pad` char(60) NOT NULL DEFAULT '',
    PRIMARY KEY (`id`),
    KEY `k` (`k`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8
    
  2. 数据格式

    id: 1
    k: 5273
    c: 902503501-67767851-807412765-640373553-541938462-40619231-573487999-109160704-120461662-146156906
    pad: 151642452-829603952-404629406-666642176-33138146
    

测试SQL

  1. 查询

    SELECT c FROM sbtest1 WHERE id=51
    SELECT c FROM sbtest1 WHERE id BETWEEN 43 AND 43+99
    SELECT c FROM sbtest1 WHERE id BETWEEN 60 AND 60+99 ORDER BY c
    SELECT SUM(K) FROM sbtest1 WHERE id BETWEEN 51 AND 51+99
    SELECT DISTINCT c FROM sbtest1 WHERE id BETWEEN 54 AND 54+99 ORDER BY c
    
  2. 插入

    INSERT INTO sbtest1 (id, k, c, pad) VALUES (0, 499366, '98960633772-54743256208-23159763969-65787956584-31825798401-86270736030-94250135789-27425861392-37055945206-78163709800', '54784722736-74321090296-30487485394-35643091700-34261489188')
    
  3. 更新

    UPDATE sbtest1 SET k=k+1 WHERE id=497476
    UPDATE sbtest1 SET c='48790759921-68407130797-95399114726-08732206562-54416332000-64051686468-52626165210-54833068892-10841816541-80972096087' WHERE id=495283
    
  4. 删除

    DELETE FROM sbtest1 WHERE id=485435
    

测试命令

  1. 准备数据

    /home/mysql/sysbench-0.5/bin/sysbench --mysql-host=xxxx --mysql-user=xxxx --mysql-password=xxxx --mysql-port=3306 --num-threads=20 --max-time=3600 --max-requests=999999999 --db-driver=mysql --mysql-table-engine=innodb --oltp-table-size=10000000 --oltp-tables-count=64 --test=/home/mysql/sysbench-0.5/share/sysbench/oltp.lua prepare
    
  2. 基准压测

    /home/mysql/sysbench-0.5/bin/sysbench --mysql-host=xxxx --mysql-user=xxxx --mysql-password=xxxx --mysql-port=3306 --num-threads=20 --max-time=3600 --max-requests=999999999 --db-driver=mysql --mysql-table-engine=innodb --oltp-table-size=10000000 --oltp-tables-count=64 --test=/home/mysql/sysbench-0.5/share/sysbench/oltp.lua run
    
  3. 清理环境

    /home/mysql/sysbench-0.5/bin/sysbench --mysql-host=xxxx --mysql-user=xxxx --mysql-password=xxxx --mysql-port=3306 --num-threads=20 --max-time=3600 --max-requests=999999999 --db-driver=mysql --mysql-table-engine=innodb --oltp-table-size=10000000 --oltp-tables-count=64 --test=/home/mysql/sysbench-0.5/share/sysbench/oltp.lua cleanup
    

SysBench 主要参数说明:

参数 说明
--mysql-host=xxxx 测试数据库的地址
--mysql-port=xxxx 测试数据库的端口
--mysql-user=xxxx 测试数据库的测试账号
--mysql-password=xxxx 测试数据库的测试账号对应的密码
--mysql-db=xxxx 测试数据库名字
--num-threads 发起的并发连接数
--mysql-table-engine=Innodb/MyISAM 测试表存储引擎
--db-driver=mysql 表示要测试的是MySQL数据库
--max-time 最大执行时长
--max-requests 总请求数。可以和max_time二选一
--test=$sysbench_path/oltp.lua 表示要调用oltp.lua脚本进行oltp测试
--oltp_tables_count 表示要生成多少个测试表
--oltp-table-size 表示每个表要填充多少数据量

性能指标

TPS

Transactions Per Second,每秒执行的事务数,以 commit 成功次数为准。

QPS

Queries Per Second,每秒执行的 SQL 数(含insert、select、update、delete)。

平均响应时间

Response time avg,即执行每组操作,平均每个 SQL 的响应时间。