sysbench压测小记(r11笔记第99天)

对于很多线上业务而言,如果有新服务器,新的环境,新的业务,到底资源和预期的承载压力是否匹配,这个得用数据说话,或是通过严谨的论证来阐述。

比如一台新的服务器,一般都需要经过压力测试,我们也叫拷机测试。一般都会从多个维度来进行加压(比如CPU,内存,IO等等),看看服务器是否依旧坚挺,虽然这一点上如果产生了懈怠或者懒惰还是会被轻视,但是从身边的例子来看,还是会测试出一些问题来,如果发现了问题,就避免了后续的很多被动。

sysbench就是这么一个工具,功能非常全面。是一个标准模块化,多线程的基准测试工具。

安装的过程相对比较简单,下载之后参考README文档即可,我就直接略过了。

这个工具能够测试哪些方面呢,我们用命令来说明。

sysbench --help

。。。

Compiled-in tests:

fileio- File I/O test

cpu- CPU performance test

memory- Memory functions speed test

threads- Threads subsystem performance test

mutex- Mutex performance test

oltp- OLTP test简单来说就是下面的一些方面。

1、磁盘IO性能

2、CPU运算性能

3、调度程序性能

4、内存分配及传输速度

5、POSIX线程性能

6、数据库性能(OLTP基准测试)

比如测试CPU,如果让我们测试还真没有什么好的思路,看看sysbench是怎么做的,可以使用命令sysbench --test=cpu help得到如下的结果:

cpu options:

--cpu-max-prime=N
upper limit for primes generator
[10000]可以看到重要的关键字prime,即质数,比如查找小于一千万的最大质数,这个问题还是蛮烧脑的,就让CPU来烧吧,这样运行即可。会启用10个并发线程,最大请求数是100

/usr/local/bin/sysbench --num-threads=10 --max-requests=100 --test=cpu --debug --cpu-max-prime=10000000 run

有了CPU压测的基本概念,后续的几种解释起来就相对容易一些了。

比如测试内存,可以指定测试范围,如32G,64G根据自己需要来。

比如我们测试32G内存,并发线程数是10个,最大请求数是100,分别从读和写两种测试来做。

内存读测试

/usr/local/bin/sysbench --num-threads=10 --max-requests=100

--test=memory --memory-block-size=8k --memory-total-size=32G

--memory-oper=readrun内存写测试

/usr/local/bin/sysbench
--num-threads=10 --max-requests=100 --test=memory
--memory-block-size=8k
--memory-total-size=32G--memory-oper=writerun而对于IO测试而言,是有些区别的,因为会有准备数据(比如写一个临时文件),所以会分成几个阶段,准备阶段,运行阶段,清理阶段。

下面就是一个相对简单的场景,20个文件,每个10GB,随机读写,文件大小总量在200G.

/usr/local/bin/sysbench --file-num=20 --num-threads=20 --test=fileio

--file-total-size=

200G--max-requests=1000000 --file-test-mode=rndrwprepare

/usr/local/bin/sysbench --file-num=20 --num-threads=20

--test=fileio --file-total-size=

200G--max-requests=1000000 --file-test-mode=rndrwrun

/usr/local/bin/sysbench --file-num=20

--num-threads=20 --test=fileio --file-total-size=

200G--max-requests=1000000
--file-test-mode=rndrwcleanup硬件类的测试,基本一次测试就能够得到一个基线数据,就不需要反反复复测试了。而对于DBA还是开发同学而言,更加关注于业务层面,我们会从很多可能的角度和场景去分析权衡,这些sysbench也是支持的,就是oltp选项。

当然sysben对于mysql的支持是原生的,而对于其他的数据oracle,PostgreSQL等数据,需要单独配置。

因为应用测试会产生基础数据,所以也是分为多阶段的。

比如准备基础数据,进行压力测试,最后的统计结果和后期的清理。这里值得说的是,对于较低版本的sysbench而言,还不支持多表参数--oltp_tables_count,准备好基础数据,后面就会开启多线程模式进行模拟压力的测试。比如下面的命令,测试模式complex,并发线程数30,最大请求数5000000
,表的数据量在一亿。先创建一个测试库sysbenchtest,测试完成之后删除即可。

mysql -uroot -e "create database if not exists sysbenchtest"

/usr/local/bin/sysbench --mysql-user=root --test=oltp

--mysql-host=localhost --oltp-test-mode=complex

--mysql-table-engine=innodb --oltp-table-size=100000000

--mysql-db=sysbenchtest --oltp-table-name=innodb_test --num-threads=30

--max-requests=5000000

prepare

/usr/local/bin/sysbench

--mysql-user=root --test=oltp --mysql-host=localhost

--oltp-test-mode=complex --mysql-table-engine=innodb

--oltp-table-size=100000000 --mysql-db=sysbenchtest

--oltp-table-name=innodb_test --num-threads=30 --max-requests=5000000

run

mysql -uroot -e "drop table if exists sysbenchtest.innodb_test; drop database if exists sysbenchtest"

在一台服务器上我进行了测试,发现1亿左右的数据,数据文件在24G左右。

-rw-r----- 1 mysql mysql 61 Mar 10 11:20 db.opt

-rw-r----- 1 mysql mysql 8632 Mar 10 11:20 innodb_test.frm

-rw-r----- 1 mysql mysql 24419237888 Mar 10 13:29 innodb_test.ibd

得到的报告如下,可以看到整个过程持续了近3个小时,TPS在455左右,其实还是不高的。

对于压力测试,其实一个蛮不错的想法,就是我指定压测的策略,然后让它去在后台运行,MGR测试脚本已经写好,会在测试之后共享给大家,这样一来,我可以在瞬间创建出多个节点,然后测试很多复杂的压力场景。到时候我就直接查看数据,得到一个报告,想想都很有意思。

时间: 2024-08-02 01:14:36

sysbench压测小记(r11笔记第99天)的相关文章

sysbench压测之MySQL压测的例子

基于OLTP的混合测试 大概是70%的读(select) 30%的写(insert, update, delete) 还是一样的分别对1 4 8 16 32 64线程做测试 [root@DS-VM-Node160 ~]# for i in 1 4 8 16 32 64; do sysbench --test=oltp --test=/usr/local/sysbench/tests/db/oltp.lua --db-driver=mysql --oltp-table-size=10000000

使用sysbench压测主机和数据库

交付服务器或数据库的时候,我们需要对服务器和数据库的性能有一定的了解.可以使用sysbench对系统做一些压测. sysbench sysbench下载 https://github.com/akopytov/sysbench 可以使用0.5版本,支持lua插件压测数据库 sysbench 数据库压测lua脚本例子 https://github.com/percona/sysbench-scripts Usage: sysbench --test=<test-name> [options]..

innodb compression原理以及性能压测

压缩算法:innodb plugin采用了 zlib library函式库的LZ77 的压缩算法来对数据进行压缩,这种算法已经很成熟,在cpu利用率,压缩比率在50%以上,更为重要的是无数据丢失: innodb的数据存储方式:innodb在数据储存上采用聚簇的方式(B-树)来组织数据,叶子节点上存放了表中定义的所有列数据:第二索引同样也是B-树结构,在索引列的后面会加上聚簇键列,用于索引列到聚簇索引查找数据: 压缩B-树:由于对B-树的频繁的更新,进而导致B-树的页节点的分裂,不断的对数据进行解

swingbench压测Oracle小记(r12笔记第19天)

   之前也分享过一篇关于swingbench测试Oracle的文章,也算是一个起步了.    新业务要上线,不跑个压力测试还真说不过去,当然我比较喜欢swingbench的一点就是它可以模拟一些OLTP的场景,比如订单类业务,新建客户,订购,下单等这样一个流程的操作算是一个模拟真实的事务.     当然swingbench还有几个地方做得挺有特色,一个是我们压力测试是指定数据量,比如1G,5G,100G,初始化数据就会按照这个基线来进行数据的分布.   swingbench的配置,其实有了图形

swingbench压测Oracle小记(二)(r12笔记第20天)

   今天抽时间在整理一个关于MySQL和Oracle共同面临的问题,但是它们有着不同的解决方案,就是经典的partial write问题,我也看到网上有很多DBA在纠结,在争论,相比而言,Oracle这边更沉默一些.我认真看了他们的讨论,但是到目前为止没有看到一个把两方面都照顾到的解读,而且这个问题可以继续扩展开来,从存储层面也可以有一些解读,所以我决定做这个事情.至于文章最近应该会从社群中看到,对于内容,我还是抱着谨慎的态度,想让几位朋友审阅之后再说会比较好.如果你对此有一定的基础,对此有浓

压测之sysbench安装和MySQL只读测试

sysbench编译安装 [root@DS-VM-Node160 ~]# cd /tmp/ [root@DS-VM-Node160 /tmp]# git clone https://github.com/akopytov/sysbench.git [root@DS-VM-Node160 /tmp]# cd sysbench/ [root@DS-VM-Node160 /tmp/sysbench]# yum install mysql mysql-devel libtool openssl-deve

【工具】MySQL 压测工具之mydbtest

一 前言   本文介绍一款绿色免安装版本的数据库压测利器--mydbtest(mydbtest_linux64.bin,由楼方鑫大牛编写).该压测软件区别于sysbench ,tpcc 等常见压测工具软件,免安装,上手快,而且可以针对业务sql做定制化压测.二 如何使用2.1 随机数据生成器    我们在配置文件中指定随机数据的类型,取值范围 比如a int 10 30000 ,随机生成从10-30000的整数,注意 a 必须是where 条件中使用的值,比如where id=:a:,语法 va

阿里10年分布式技术沉淀:阿里高可用体系核心缔造者、全链路压测创始人告诉你!

本次活动看点十足,大咖齐聚.纯正干货,下面给大家做下详解介绍,相信看后定会让你动心! 议题详情 双11核武器全链路压测--张军 / 阿里巴巴中间件高级技术专家 阿里巴巴双11备战期间,保障系统稳定性最大的难题在于容量规划,而容量规划最大的难题在于准确评估从用户登录到完成购买的整个链条中,核心页面和交易支付的实际承载能力.全链路压测的诞生改变了这一现状,通过对双11进行模拟,支持线上不影响正常用户访问的集群读写压测,获得最真实的线上承载能力数据.全链路压测开启了大促稳定性保障的新纪元,被誉为备战核

容量预估/性能压测思考

1 背景        随着业务的快速成长,日访问量越来越高,除了对功能要求很高以外,对性能要求也越来越高. 在实际工作中,我们往往会被一些问题所困扰.        1)线上服务容量是多少?性能痛点在哪里? 可伸缩性(resilience)和可靠性(reliability)怎样?预先知道了系统的容量,做到心中有数,才能为最终规划整个运行环境的配置提供有利的依据.        2)新开发的功能是否满足性能指标? 重新修改的代码会不会带来性能问题? 对服务或工具的参数修改是否有效果(如jvm参数