数据库性能测试工具SysBench介绍

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

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

安装方法

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

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

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

    unzip sysbench-0.5.zipcd 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: 1k: 5273c: 902503501-67767851-807412765-640373553-541938462-40619231-573487999-109160704-120461662-146156906pad: 151642452-829603952-404629406-666642176-33138146

测试SQL

  1. 查询

    SELECT c FROM sbtest1 WHERE id=51SELECT c FROM sbtest1 WHERE id BETWEEN 43 AND 43+99SELECT c FROM sbtest1 WHERE id BETWEEN 60 AND 60+99 ORDER BY cSELECT SUM(K) FROM sbtest1 WHERE id BETWEEN 51 AND 51+99SELECT 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=497476UPDATE 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 的响应时间。