基准测试
用户在做性能测试时,可以参考以下推荐配置和测试方法自己做,也可以发工单让百度智能云工程师协助做。
测试环境
下面环境,由客户根据需要选择。如果是跟其他云厂商做性能对比,注意保持多个环境一致。
类型 | 说明 |
---|---|
客户端配置 | 推荐BCC配置4核8G,镜像CentOS 7.5 64位 |
客户端个数 | 如单个客户端是瓶颈,建议采用多个客户端并行压测求取数据总和 |
并发连接数 | 推荐20个并发,测试多组求平均值 |
云数据库 RDS 实例配置 | 客户可根据需要选择当前售卖主流配置规格,配置越大性能越好 |
网络环境 | 需保证客户端与云数据库 RDS 实例在同一可用区,测试结果不受网络因素影响 |
测试工具
SysBench简介
SysBench 是一款跨平台且支持多线程的模块化基准测试工具,可以用来做 CPU/内存/磁盘IO/线程/mutex 和数据库的基准测试。目前支持的数据库有 MySQL/Oracle/PostgreSQL。
SysBench 0.5 是基于 LuaJIT 的可脚本化的多线程基准测试工具,它常用于数据库的基准测试,也可以在不安装数据库的前提下,快速获取数据库主机的性能。以下操作都将以支持MySQL数据库为例进行。
安装方法
- 数据库基准测试使用的 SysBench 版本为 0.5,点此下载。
-
SysBench 的一些安装依赖(root账号安装)。
yum -y install gcc gcc-c++ autoconf automake make libtool bzr mysql-devel
-
执行如下命令安装 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 。
测试数据
-
库表结构
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
-
数据格式
id: 1 k: 5273 c: 902503501-67767851-807412765-640373553-541938462-40619231-573487999-109160704-120461662-146156906 pad: 151642452-829603952-404629406-666642176-33138146
测试SQL
-
查询
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
-
插入
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')
-
更新
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
-
删除
DELETE FROM sbtest1 WHERE id=485435
测试命令
-
准备数据
/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
-
基准压测
/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
-
清理环境
/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 的响应时间。