一、基准测试

参考《高性能 MySQL》第二章。

二、Sysbench

sysbench 是开源的跨平台多线程基准测试工具,主要用于测试各种不同系统参数下的 CPU/内存/线程/IO/数据库等方面的性能,数据库目前支持 MySQL/Oracle/PostgreSQL。具体的参数设置,应根据实际环境来进行必要调整。

与之前版本相比,sysbench 最新的 0.5 版本,可以使用脚本来决定测试语句,比之前在代码里写死测试更加方便用户修改和使用,不需要去修改源程序,只需要修改相应的 lua 脚本,即可定制不同的测试用例,在数据库负载测试中,这样可以对 SQL 语句进行更有针对性的测试。

1、下载安装

Linu 自带版本大多为 0.4.12,最新版本可以从 Launchpad 下载安装步骤如下:

./autogen.sh

./configure

make && sudo make install

sysbench 依赖 mysql-dev 包的支持,如果 mysql 没有安装在默认位置,执行./configure 时需要配置–with-mysql-includes 和 –with-mysql-lib。具体参看源码包中 README 文档。

安装完成后可以查看版本信息。

sysbench --version

2、使用说明

简要说明 sysbench 的使用方法,侧重对数据库的测试。具体用法参考 sysbench –help。

2.1 命令格式:

Sysbench [general-options]… –test= [test-options]… command

通用选项(general-options):

–num-threads=N 指定要使用的线程

–report-interval=N 每隔 N 秒打印统计信息

–rand-XXX 随机分布相关配置

内建测试项目(test-option):

fileio – File I/O test

cpu – CPU performance test

memory – Memory functions speed test

threads – Threads subsystem performance test

mutex – Mutex performance test

oltp,从 0.5 开始不再设置单独的选项,可以直接通过 Lua 脚本文件进行测试,兼容之前 oltp 的所有选项。

以上所有的项目都可以通过 sysbench-0.5\sysbench\tests\ 下的测试脚本进行测试。

2.2 测试项目选项(test-option)

各种内建测试项目的选项可以通过命令 sysbench –test=help 查看。

2.3 命令(command):

sysbench 做压力测试的时候分 3 个阶段:prepare(准备测试数据); run(运行压力测试); cleanup(清理测试数据)。

3、内建测试说明

3.1 CPU

sysbench 采用寻找最大素数的方式来测试 CPU 的性能。

sysbench --test=cpu --cpu-max-prime=1000 run

3.2 Fileio

Sysbench 的 I/O 测试和 InnoDB 的 I/O 模式非常类似。

sysbench --test=fileio –file_num=40 –-file-total-size=80G --file-test-mode=rndrw prepare

sysbench --test=fileio –file_num=40 –-file-total-size=80G --file-test-mode=rndrw run

sysbench --test=fileio –file_num=40 –-file-total-size=80G --file-test-mode=rndrw cleanup

3.3 Memory

待完善

3.4 Threads

待完善

3.5 Mutex

待完善

3.6 OLTP

Sysbench 0.5 中的 oltp.lua 提供了一个比之前版本中的 oltp 模式更为真实的场景来进行数据库的基准测试。和之前 oltp 模式中的单个表场景相比,0.5 通过 Lua 脚本可以对多个表进行工作测试。oltp.lua 可以理解原先 oltp 模式中的大多数选项。

所有的测试脚本位于/sysbench-0.5/sysbench/test/下,db 目录下是数据库测试项目,其中 common.lua 并非测试文件,是用于 prepare 和 cleanup。 oltp.lua 文件用于测试事务性能,其中 thread_init 函数来初始化每个线程的参数,初始化工作调用了 common.lua 中的 set_vars()函数,来初始化 oltp 的相关参数。

阶段 1: 连接数据库服务器

每次执行基准测试,不管是 prepare 还是 run,如果不是使用默认值的话,都应该指定如何连接数据库。默认值如下:

默认的数据库 sbtest,sysbench 不会自动创建该数据库。所以如果你要用过的话要首先。

阶段 2:Prepare

如果使用默认值,首先要创建测试所用的表。创建方式有两种: oltp.lua (串行) 和 parallel_prepare.lua (并行)。

针对 database driver 还需要指明以下参数:

创建表:

oltp.lua 中提供的 –oltp-tables-count 指明了表的数量。默认的表名是 sbtest。如果制定了 oltp-tables-count,则在表名后加数字,例如 sbtest1, sbtest2, .. sbtest[oltp-tables-count],注意,此种情况下不会创建 sbtest 表。

通过选项 –oltp-secondary 可以在每个表上使用第二索引来替代主键。也就是说通过 KEY xid (ID) 而不是 PRIMARY KEY (ID) 来创建表。这个选项将会使 InnoDB 为每个表创建内部 6-byte 的索引。同样可以使用选项 –oltp-auto-in 将 id 字段设为递增。

创建表 SQL 语句示例如下:

CREATE TABLE `sbtest101` (

`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`));

Parallel.lua(并行) 创建:

./sysbench --test=tests/db/parallel_prepare.lua --mysql-user=USER --mysql-password=SECRET --oltp-tables-count=64 --num-threads=8 run

注意:oltp-tables-count 应该是 num-threads 的整数倍。

oltp.lua(串行)创建:

./sysbench --test=tests/db/oltp.lua --mysql-user=USER --mysql-password=SECRET --mysql-table-engine=myisam --oltp-table-size=1000000 --oltp-tables-count=64 --mysql-socket=/tmp/mysql.sock prepare

阶段 3:Run

准备好测试环境之后就可以使用 oltp.lua 执行一系列的测试了,测试使用的线程数量通过选项 –num-threads 来指定。每个线程通过随机产生小于或者等于 oltp-tables-count 的数字来选择一个表。

随机取样分布通过选项 –oltp-dist-type 来进行设置,该选项默认值是 special。Special 分布还和另外两个参数有关:–oltp-dist-pct,用来指定要特殊对待的记录的百分比,–oltp-dist-res 指定这些记录的概率。例如,对 1000 行记录进行 1000 次查询,–oltp-dist-pct=1 and –oltp-dist-res=50 结果,开始 10 条记录(1% of 1000),每条记录选中五十次,总共 500 次,剩余的查询将会从 990 条记录中均匀采样。

选中表之后,就会执行相应的测试。他们将会打包为一个事务(transaction)传递给数据库服务器(除非使用 myisam 引擎,这样先会锁住表)。也可以单线程运行 oltp 的子集,例如 oltp_simple.lua, select.lua, insert.lua, delete.lua, update_index.lua, update_non_index.lua

SELECT tests

Select 还可以分为点选择测试(Point Select tests)和范围测试(Ranges tests)。

点测试

选项 oltp-point-selects 单次事务中点选择测试的查询次数。 每次测试,通过制定的分布来随机产生一个小于或者等于表大小(oltp-table-size)的数字,然后执行下面的查询语句。 SELECT c FROM sbtestXXX WHERE id=N

范围测试

通过变量 oltp-range-size 可以制定要查询的范围(不大于表大小)

简单范围测试

选项 oltp-simple-ranges 单次事务中范围选择测试的查询次数。 每次通过指定的分布来产生一个不大于 oltp-talbe-size 的整数 N,然后通过选项设置 oltp-range-size 设置整数 M,然后执行如下查询: SELECT c FROM sbtest WHERE id BETWEEN N AND M

范围求和(Sum in ranges)

选项 oltp_sum_ranges 单次事务中范围选择测试的查询次数。查询语句: SELECT SUM(K) FROM sbtest WHERE id BETWEEN N and M

范围排序(Order in ranges)

选项 oltp_order_ranges 单次事务中范围选择测试的查询次数。查询语句: SELECT c FROM sbtest WHERE id between N and M ORDER BY c

范围去重(Distincts in ranges)

选项 oltp-distinct-ranges 单次事务中范围选择测试的查询次数。查询语句:

SELECT DISTINCT c FROM sbtest WHERE id BETWEEN N and M ORDER BY c

UPDATE tests

只要没有指定 oltp-read-only=on 就能进行更新测试。

1、index_update.lua

选项 oltp_index_updates 单次事务中范围选择测试的查询次数。查询语句:

UPDATE sbtest SET k=k+1 WHERE id=N

2、non_index_update.lua

选项 oltp-non-index-updates 单次事务中范围选择测试的查询次数。C 为随机产生的字符串,查询语句:

UPDATE sbtest SET c=C WHERE id=N

DELETE test

只要没有指定 oltp-read-only=on 就能进行更新测试。通过执行分布产生一个不大于 oltp-table-siez 的数字 N,执行语句:

DELETE FROM sbtest WHERE id=N

INSERT test

只要没有指定 oltp-read-only=on 就能进行更新测试。通过执行分布产生一个不大于 oltp-table-siez 的数字 N,执行语句:

INSERT INTO sbtest (id, k, c, pad) VALUES N, K, C, PAD

使用举例:

使用 5 个线程在 25 个 table 上进行默认测试:

./sysbench --mysql-user=USER --mysql-password=SECRET --test=tests/db/oltp.lua --oltp-tables-count=25 --num-threads=5 run

使用 10 个线程在 100 个 table 上进行 select 测试,10 个点测试和值为 1000 的范围测试:

./sysbench --mysql-user=USER --mysql-password=SECRET --test=tests/db/select.lua --oltp-tables-count=100 --num-threads=10

--oltp-point-selects=100 --oltp-range-size=1000 run

阶段 4:清理(cleanup)

可以通过清理操作来返回到准备的阶段。必须提供链接数据库服务器的选项和创建的表的数量。

./sysbench --test=tests/db/oltp.lua --mysql-user=USER --mysql-password=SECRET --oltp-tables-count=64 cleanup

mysql sysbench_MySQL sysbench基准测试相关推荐

  1. sysbench mysql oltp_sysbench OLTP基准测试

    1.sysbench参数 # 通过参数 --num-threads=N           创建测试线程的数目.默认为1. --max-requests=N          请求的最大数目.默认为1 ...

  2. 性能测试--【MySQL】Sysbench 性能压测

    合成自:http://linuxperformance.top/index.php/archives/83/ https://blog.csdn.net/notbaron/article/detail ...

  3. 找出MySQL瓶颈的基准测试和剖析

    有些时候,我们需要优化MySQL.那我们要对MySQL进行哪些改进呢?一条特殊的query?数据库模式?服务器硬件?唯一的办法是测量你的系统在做什么,在各种条件下测量它的性能.这就是我们下面要学习的. ...

  4. 【MySQL】sysbench压测服务器及结果解读

    前言:最近新到一批机器,需要对机器进行压测,主要压测范围包括CPU测试.磁盘IO测试.线程测试.OLTP测试等,那么sysbench就可以满足我们的压测需求.下面我们简单来看下sysbench的安装使 ...

  5. 使用sysbench对mysql压力测试

    sysbench是一个模块化的.跨平台.多线程基准测试工具,主要用于评估测试各种不同系统参数下的数据库负载情况.关于这个项目的详细介绍请看:https://github.com/akopytov/sy ...

  6. mysql benchmark基准测试

    git项目地址: https://github.com/akopytov/sysbench 利用sysbench很容易对mysql做性能基准测试(当然这个工具很强大,除了测试主流数据库性能,还能测试其 ...

  7. mysql benchmark 测试工具_BenchmarkSQL数据库基准测试工具

    之前有介绍过sysbench基准测试工具,类似的开源测试工具还有BenchmarkSQL,一个JDBC基准测试工具,内嵌了TPC-C测试脚本,也支持很多数据库,如PostgreSQL.Oracle和M ...

  8. mysql benchmark 测试工具_mysql benchmark基准测试

    git项目地址: 利用sysbench很容易对mysql做性能基准测试(当然这个工具很强大,除了测试主流数据库性能,还能测试其它方面,详情自己看官网项目文档) mac上的用法: 一.安装 brew i ...

  9. 学习笔记3:Mysql基准测试

    Mysql基准测试:     [什么是基准测试]:基准测试是一种测量和评估软件性能指标的活动,用于建立某个时刻的性能基准,                         以便系统发生软硬件变化时重新 ...

最新文章

  1. 安卓网页广告拦截_拦截烦人的网页广告,增加上网体验
  2. Python,自己修改的爬取淘宝网页的代码 修改Python爬虫,爬取淘宝商品信息也不报错,也不输出信息的错误
  3. android canvas绘制圆角_Android自定义View撸一个渐变的温度指示器(TmepView)
  4. 毕业论文 | 基于单片机的烟雾报警器设计(完整源代码、流程图、电路图)
  5. Linux (七) 网络
  6. kylin 部分问题
  7. Web API 速率限制(一)
  8. #if、#ifdef、#if defined之间的区别【转】
  9. ie自动获取无效_经常用浏览器自动登录忘记了密码?教你一键查看网页星号密码...
  10. 关于VC9和VC6以及Thread Safe和Non Thread Safe版本选择的问题
  11. 一起谈.NET技术,NET下RabbitMQ实践 [配置篇]
  12. android 使用ffmpeg 调用命令实现视频转gif(ffmpeg 学习三)
  13. ubuntu18.04 登录不了百度云盘
  14. Android截屏的几种方法
  15. 抖音音频提取php,php抖音背景音乐解析下载API接口
  16. 在网页中插入MediaPlayer控件
  17. 数据结构与算法 — 环形队列
  18. onkeydown基本用法
  19. 有哪些一般人不知道的数据获取方式
  20. python Matplotlib 控制x轴和y轴都为整数

热门文章

  1. Matplotlib 找不到系统安装的字体
  2. 支付系统实战 | 支付宝支付
  3. 使用腾讯云函数隐藏C2
  4. 传奇GOM引擎安装大叔超智能假人
  5. HTTP的通信过程及请求报文和响应报文(详解)
  6. VS性能诊断器-时间耗时诊断
  7. 这一切都要从一只蝙蝠说起——Python初体验
  8. R语言中package ‘xxxx’ is not available (for R version xxx)的解决办法以及R如何在线升级版本?
  9. springboot -- 整合websocket 实现在线聊天
  10. android 4k拍摄,五款专业安卓手机摄影App,立即提高手机生产力(全部免费)