设为首页 收藏本站
查看: 1084|回复: 0

[经验分享] 使用mysqlslap对mysql进行压测,观察Azure虚拟机cpu使用率

[复制链接]

尚未签到

发表于 2017-6-30 19:01:17 | 显示全部楼层 |阅读模式
  一直想做这个测试,原因很简单,很多人一直比较怀疑Azure的虚拟机性能,说相同的配置凭啥比阿里的虚拟机贵那么多,其实,我自己以前也怀疑过,但是接触Azure的几个月,确实发现Azure的虚拟机性能真的很强悍,在这里笔者举个例子说明,有个客户(这里就不透露名字了)在本地数据中心cpu使用率一直在60%以上,因为我们上云都是先平移,如果不够用我们再auto sacle,但是客户却很不放心,非要高配的机器,在我们的百般劝说之下好不容易才答应先平移(客户表示很委屈,为什么我要高配的机器你不给,哈哈,开个玩笑),最后测试下来的结果发现cpu平时使用率在百分之二十多,周末最繁忙的时刻也没超过百分之五十,客户当场就说没想到Azure虚拟机性能这么优越,同时也很感谢我们没有坑他,在本次场景中,其实性能的瓶颈并不在vm,而是在于数据库,因为mysql是轻量级数据库不同于Oracle!!!
  在本次测试环境中,我们在中国东部建立一台vm,考虑到数据库对虚拟机性能要求较高,这里我们以A6为例(要记得先建立高配的机型,然后再降为A6虚拟机!!!),并挂载1T的硬盘。
  第一步建立虚拟机,过程略,结果如下
  在这里,笔者想说一句,由于本次poc环境中,我们需要直观地看到cpu使用率,考虑到linux的ps命令的局限性,而且ARM里面很难看到cpu使用率,所以笔者选用ASM环境来建立虚拟机。
DSC0000.png

  接下来我们先记录一下cpu与内存的使用情况
DSC0001.png

  接下来第一步,添加附加磁盘
DSC0002.png

  第二步,挂载附加磁盘
  ssh远程登陆到该虚拟机
  1.切换到root用户



[yangyang@mysqlvm1 ~]$ sudo su - root
[iyunv@mysqlvm1 ~]#
  切换成功
  2.查看



[iyunv@mysqlvm1 ~]# fdisk -cul /dev/sdc
Disk /dev/sdc: 1098.4 GB, 1098437885952 bytes
255 heads, 63 sectors/track, 133544 cylinders, total 2145386496 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000
  3.分区



[iyunv@mysqlvm1 ~]# fdisk -cu /dev/sdc
Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel
Building a new DOS disklabel with disk identifier 0x9694814d.
Changes will remain in memory only, until you decide to write them.
After that, of course, the previous content won't be recoverable.

Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)
Command (m for help): p
Disk /dev/sdc: 1098.4 GB, 1098437885952 bytes
255 heads, 63 sectors/track, 133544 cylinders, total 2145386496 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x9694814d
Device Boot      Start         End      Blocks   Id  System
Command (m for help): n
Command action
e   extended
p   primary partition (1-4)
p
Partition number (1-4): 1
First sector (2048-2145386495, default 2048):
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-2145386495, default 2145386495):
Using default value 2145386495
Command (m for help): p
Disk /dev/sdc: 1098.4 GB, 1098437885952 bytes
255 heads, 63 sectors/track, 133544 cylinders, total 2145386496 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x9694814d
Device Boot      Start         End      Blocks   Id  System
/dev/sdc1            2048  2145386495  1072692224   83  Linux
Command (m for help): w
  4.格式化
  查看帮助文件



[iyunv@mysqlvm1 ~]# man mkfs.ext4
  找到lazy



  lazy_itable_init[= <0 to disable, 1 to enable>]
If enabled and the uninit_bg feature is enabled, the
inode table will not be fully initialized by mke2fs.
This speeds up filesystem initialization noticeably,
but it requires the kernel  to  finish  initializing
the filesystem in the background when the filesystem
is first mounted.  If the option value  is  omitted,
it defaults to 1 to enable lazy inode table initial-
ization.

  快速格式化



[iyunv@mysqlvm1 ~]# mkfs.ext4 -E lazy_itable_init /dev/sdc1
mke2fs 1.41.12 (17-May-2010)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
67043328 inodes, 268173056 blocks
13408652 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=4294967296
8184 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
4096000, 7962624, 11239424, 20480000, 23887872, 71663616, 78675968,
102400000, 214990848
Writing inode tables: done                           
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done
This filesystem will be automatically checked every 27 mounts or
180 days, whichever comes first.  Use tune2fs -c or -i to override.
  5.创建挂载点并挂载



[iyunv@mysqlvm1 ~]#mkdir /1T
[iyunv@mysqlvm1 ~]#mount /dev/sdc1 /1T
  第三步,安装mysql,这里选择yum安装



[iyunv@mysqlvm1 dev]# cd /1T/
[iyunv@mysqlvm1 1T]# yum -y install mysql-server
  看到如下结果



Installed:
mysql-server.x86_64 0:5.1.73-7.el6                                            
Dependency Installed:
mysql.x86_64 0:5.1.73-7.el6        perl-DBD-MySQL.x86_64 0:4.013-3.el6      
Dependency Updated:
mysql-libs.x86_64 0:5.1.73-7.el6                                             
Complete!
  设置开机启动



[iyunv@mysqlvm1 ~]# chkconfig mysqld on
  启动mysql服务



[iyunv@mysqlvm1 ~]# service mysqld start
  设置mysql root用户以及密码



[iyunv@mysqlvm1 ~]# mysql -u root
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.1.73 Source distribution
Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> select user,host,password from mysql.user;
+------+-----------+----------+
| user | host      | password |
+------+-----------+----------+
| root | localhost |          |
| root | mysqlvm1  |          |
| root | 127.0.0.1 |          |
|      | localhost |          |
|      | mysqlvm1  |          |
+------+-----------+----------+
5 rows in set (0.00 sec)
mysql> set password for root@localhost=password('root');
Query OK, 0 rows affected (0.00 sec)
mysql> exit
  用户root,密码root
  用root来登陆



[iyunv@mysqlvm1 ~]# mysql -u root -p
  以下是mysql的一些常见命令



show databases; //查看系统已存在的数据库
use databasesname;   //选择需要使用的数据库
drop database databasename; //删除选定的数据库
exit    //退出数据库的连接
create database test01;    //建立名为test的数据库
show tables;        // 列出当前数据库下的表
其他基本的增删改查使用标准SQL即可
  第四步,进行压测
  mysqlslap是mysql自带的基准测试工具,可以模拟多个并发连接数来向服务器发起多次查询请求,这样可以观察CPU的情况
  单线程测试



[iyunv@mysqlvm1 ~]# mysqlslap -a -uroot -proot
Benchmark
Average number of seconds to run all queries: 0.001 seconds
Minimum number of seconds to run all queries: 0.001 seconds
Maximum number of seconds to run all queries: 0.001 seconds
Number of clients running queries: 1
Average number of queries per client: 0
  多线程测试(100)



[iyunv@mysqlvm1 ~]# mysqlslap -a -c 100 -uroot -proot
Benchmark
Average number of seconds to run all queries: 0.193 seconds
Minimum number of seconds to run all queries: 0.193 seconds
Maximum number of seconds to run all queries: 0.193 seconds
Number of clients running queries: 100
Average number of queries per client: 0
  迭代测试



[iyunv@mysqlvm1 ~]# mysqlslap -a -i 10 -uroot -proot
Benchmark
Average number of seconds to run all queries: 0.001 seconds
Minimum number of seconds to run all queries: 0.001 seconds
Maximum number of seconds to run all queries: 0.001 seconds
Number of clients running queries: 1
Average number of queries per client: 0
  每个客户端的并发连接数*每个客户端查询的次数=总的查询次数
  一下是mysqlslap的常见语法



# mysqlslap [options]
常用参数 [options] 详细说明:
--auto-generate-sql, -a 自动生成测试表和数据,表示用mysqlslap工具自己生成的SQL脚本来测试并发压力。
--auto-generate-sql-load-type=type 测试语句的类型。代表要测试的环境是读操作还是写操作还是两者混合的。取值包括:read,key,write,update和mixed(默认)。
--auto-generate-sql-add-auto-increment 代表对生成的表自动添加auto_increment列,从5.1.18版本开始支持。
--number-char-cols=N, -x N 自动生成的测试表中包含多少个字符类型的列,默认1
--number-int-cols=N, -y N 自动生成的测试表中包含多少个数字类型的列,默认1
--number-of-queries=N 总的测试查询次数(并发客户数×每客户查询次数)
--query=name,-q 使用自定义脚本执行测试,例如可以调用自定义的一个存储过程或者sql语句来执行测试。
--create-schema 代表自定义的测试库名称,测试的schema,MySQL中schema也就是database。
--commint=N 多少条DML后提交一次。
--compress, -C 如果服务器和客户端支持都压缩,则压缩信息传递。
--concurrency=N, -c N 表示并发量,也就是模拟多少个客户端同时执行select。可指定多个值,以逗号或者--delimiter参数指定的值做为分隔符。例如:--concurrency=100,200,500。
--engine=engine_name, -e engine_name 代表要测试的引擎,可以有多个,用分隔符隔开。例如:--engines=myisam,innodb。
--iterations=N, -i N 测试执行的迭代次数,代表要在不同并发环境下,各自运行测试多少次。
--only-print 只打印测试语句而不实际执行。
--detach=N 执行N条语句后断开重连。
--debug-info, -T 打印内存和CPU的相关信息。

  接下来我们来执行一条更复杂的测试语句
  并发分别为50,100并发,1000次查询,并进行迭代测试



[yangyang@mysqlvm1 ~]$ mysqlslap -a --concurrency=50,100 --number-of-queries 100
0 --iterations=5 --debug-info -uroot -proot
Benchmark
Average number of seconds to run all queries: 0.147 seconds
Minimum number of seconds to run all queries: 0.132 seconds
Maximum number of seconds to run all queries: 0.163 seconds
Number of clients running queries: 50
Average number of queries per client: 20
Benchmark
Average number of seconds to run all queries: 0.196 seconds
Minimum number of seconds to run all queries: 0.154 seconds
Maximum number of seconds to run all queries: 0.244 seconds
Number of clients running queries: 100
Average number of queries per client: 10

User time 0.62, System time 1.02
Maximum resident set size 30164, Integral resident set size 0
Non-physical pagefaults 10837, Physical pagefaults 0, Swaps 0
Blocks in 0 out 0, Messages in 0 out 0, Signals 0
Voluntary context switches 29785, Involuntary context switches 1271
  接下来我们来测试一个更大的查询次数,极端情况下,30000次查询,并减小并发量为20,50



[yangyang@mysqlvm1 ~]$ mysqlslap -a --concurrency=20,50 --number-of-queries 30000 --iterations=5 --debug-info -uroot -proot
Benchmark
Average number of seconds to run all queries: 60.339 seconds
Minimum number of seconds to run all queries: 55.709 seconds
Maximum number of seconds to run all queries: 63.855 seconds
Number of clients running queries: 20
Average number of queries per client: 1500
Benchmark
Average number of seconds to run all queries: 47.620 seconds
Minimum number of seconds to run all queries: 46.899 seconds
Maximum number of seconds to run all queries: 48.904 seconds
Number of clients running queries: 50
Average number of queries per client: 600

User time 406.27, System time 781.33
Maximum resident set size 126940, Integral resident set size 0
Non-physical pagefaults 38944979, Physical pagefaults 0, Swaps 0
Blocks in 0 out 0, Messages in 0 out 0, Signals 0
Voluntary context switches 5415184, Involuntary context switches 653795
  我们到portal中去观察结果
DSC0003.png

  我们看到cpu的峰值使用情况达到了95.97%,这个时候我们再升到D12V2,执行相同的操作,看看结果如何



[yangyang@mysqlvm1 ~]$  mysqlslap -a --concurrency=20,50 --number-of-queries 30000 --iterations=5 --debug-info -uroot -proot
Benchmark
Average number of seconds to run all queries: 18.069 seconds
Minimum number of seconds to run all queries: 17.928 seconds
Maximum number of seconds to run all queries: 18.223 seconds
Number of clients running queries: 20
Average number of queries per client: 1500
Benchmark
Average number of seconds to run all queries: 16.130 seconds
Minimum number of seconds to run all queries: 15.414 seconds
Maximum number of seconds to run all queries: 18.134 seconds
Number of clients running queries: 50
Average number of queries per client: 600

User time 174.35, System time 100.30
Maximum resident set size 94236, Integral resident set size 0
Non-physical pagefaults 30137497, Physical pagefaults 6, Swaps 0
Blocks in 1832 out 0, Messages in 0 out 0, Signals 0
Voluntary context switches 14059308, Involuntary context switches 10329
  我们回到portal里面来观察结果,我们去新portal去看,这里为了结果更准确,我执行了两次,所以第二幅图有两个峰值,这样结果更直观。
DSC0004.png

DSC0005.png

  从上图可以看出,cpu最高也就在百分之五十左右,对于一般系统而言,前端不可能对后端有如此大的压力,即使在这种极端情况下,我们的虚拟机依然能承受,即使A6虚拟机也能承受,但是在这种极端情况我们不建议使用A系列虚拟机,D系列虚拟机性能比A系列高了百分之三十以上,再次证明,Azure的虚拟机性能是不容置疑的,本来笔者打算在linux系统中使用ps和top命令来查看cpu进程的,但是发现效果不是很良好,所以还是portal观察,但是portal的数据是有滞后性的,所以大家在观察的时候需要等待一会儿,一般十五分钟左右,本来我是想再测试一下DS系列虚拟机,但是由于普通存储盘的虚拟机无法升级到ssd的,所以就没有再去测试,如果有读者有兴趣可以去测试一下!!!

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-389767-1-1.html 上篇帖子: 深入理解Azure自动扩展集VMSS(1) 下篇帖子: HBase(三): Azure HDInsigt HBase表数据导入本地HBase
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表