一、mysql数据库的压测

1.名词概念理解

QPS:

英文全称:Query Per Second,对数据库来说就是每秒可以处理多少个请求,可以大致理解为一次请求就是一条sql语句,也就是说这个数据库每秒可以处理多少个sql语句。对于java应用系统或者一些中间件来说,就是每秒可以处理多少个请求。

TPS:

英文全称:Transaction Per Second,就是指每秒可以处理的事务量,就是每秒有多少个事务执行完毕。

IO相关的压测性能指标

IOPS:

这个指的是机器的随机IO并发处理能力,比如机器可以达到200 IOPS,意思就是说每秒可以执行200个随机IO读写请求。这个指标对mysql数据Buffer Pool中缓存数据刷入磁盘文件时特别重要,如果IOPS值比较小是,缓存数据刷入磁盘就会比较慢,因为它刷入磁盘采用对就是随机读写。

吞吐量

这个指机器的磁盘存储每秒可以读写多少字节的数据量。这个指标也是特别关键的,因为mysql在执行sql提交事务的时候会写redo log之类的日志文件到磁盘中,所以一台机器每秒可以读写多少字节的数据量就决定了每秒可以把多少redo log之类的日志文件写入磁盘。一般来说redo log之类的日志文件写磁盘都是顺序写的也就是一行接着一行写,不会说进行随机的读写,那么一般普通磁盘的顺序写入吞吐量可以达到200MMB左右。所以,一般机器的磁盘吞吐量是可以承载高并发请求的。

latency

这个指往磁盘写入一条数据的延迟

其他的性能指标

CPU负载
网络负载

主要看机器的带宽大小是多少,在压测一定的QPS和TPS的时候,每秒钟机器的网卡会输入多少M的数据和输出多少M的数据。因为有可能你的带宽最多每秒传输100M的数据,那么可能你的QPS到1000的时候,你的带宽就打满了,即使其他的指标正常,那么这也不能继续压测了。

内存负载

2.使用压测工具对mysql进行全方位压测(sysbench)

sysbench工具的安装

curl -s https://packagecloud.io/install/repositories/akopytov/sysbench/script.rpm.sh | sudo bash
sudo yum -y install sysbench
sysbench --version

如果执行完上面的命令之后,出现版本号,说明安装成功。

测试数据库的测试用例

首先创建一个数据库,然后取名字为test_db,同时创建号对应的帐户名和密码,然后基于sysbench构建10个测试表,每个表里有100万数据,接着使用10个并发线程对这个数据库发起访问,连续访问5分钟。

基于sysbench构造测试表和测试数据

sysbench --db-driver=mysql --time=300 --threads=10 --report-interval=1 --mysql-host=127.0.0.1 --mysql�
port=3306 --mysql-user=mysqlusername --mysql-password=mysqlpassword --mysql-db=test_db --tables=10 --
table_size=1000000 oltp_read_write --db-ps-mode=disable prepare

参数含义解释:
--db-driver=mysql:就是说基于mysql的驱动去连接mysql数据库,如果要是oracle、sqlserver,那就换成其他数据库的驱动。
--time=300:连续访问300秒
--threads=10:10个线程模拟并发访问
--report-interval=1:每隔1秒输出一下压测情况
--mysql-host=127.0.0.1 --mysql�
port=3306 --mysql-user=mysqlusername --mysql-password=mysqlpassword:
填写数据库的一些基本信息
--mysql-db=test_db --tables=10 --table_size=1000000:在test_db这个库里,构造10张测试表,每个测试表里构造100万条测试数据,测试表的名字会是类似于sbtest1,sbtest2这个样子的。
oltp_read_write:执行oltp数据库的读写测试
--db-ps-mode=disable: SQL是否需要预编译,模式有:auto/disable,默认为disable。
prepare: 这个参数的意思是参照设置的命令参数去构造出我们需要的数据库里的数据,比如根据上面的参数它会自动创建设置出10张测试表和每个表里面创建100万条测试数据。这个参数还有其他几个选项比如:run:运行压测;cleanup:清理数据。

测试数据库的综合读写TPS,使用的是oltp_read_write模式(看下面的命令把prepare换成run了,然后就是运行压测):

sysbench --db-driver=mysql --time=300 --threads=10 --report-interval=1 --mysql-host=127.0.0.1 --mysql�
port=3306 --mysql-user=mysqlusername --mysql-password=mysqlpassword --mysql-db=test_db --tables=10 --
table_size=1000000 oltp_read_write --db-ps-mode=disable run

测试数据库的只读性能,使用oltp_read_only模式:

sysbench --db-driver=mysql --time=300 --threads=10 --report-interval=1 --mysql-host=127.0.0.1 --mysql�
port=3306 --mysql-user=mysqlusername --mysql-password=mysqlpassword --mysql-db=test_db --tables=10 --
table_size=1000000 oltp_read_only --db-ps-mode=disable run

测试数据库的删除性能,使用的是oltp_delete模式:

sysbench --db-driver=mysql --time=300 --threads=10 --report-interval=1 --mysql-host=127.0.0.1 --mysql�
port=3306 --mysql-user=mysqlusername --mysql-password=mysqlpassword --mysql-db=test_db --tables=10 --
table_size=1000000 oltp_delete --db-ps-mode=disable run

测试数据库更新索引字段的性能,使用的是oltp_update_index模式:

sysbench --db-driver=mysql --time=300 --threads=10 --report-interval=1 --mysql-host=127.0.0.1 --mysql�
port=3306 --mysql-user=mysqlusername --mysql-password=mysqlpassword --mysql-db=test_db --tables=10 --
table_size=1000000 oltp_update_index --db-ps-mode=disable run

测试数据库更新非索引字段的性能,使用的是oltp_update_non_index模式:

sysbench --db-driver=mysql --time=300 --threads=10 --report-interval=1 --mysql-host=127.0.0.1 --mysql�
port=3306 --mysql-user=mysqlusername --mysql-password=mysqlpassword --mysql-db=test_db --tables=10 --
table_size=1000000 oltp_update_non_index --db-ps-mode=disable run

测试数据库的插入性能,使用的是oltp_insert模式:

sysbench --db-driver=mysql --time=300 --threads=10 --report-interval=1 --mysql-host=127.0.0.1 --mysql�
port=3306 --mysql-user=mysqlusername --mysql-password=mysqlpassword --mysql-db=test_db --tables=10 --
table_size=1000000 oltp_insert --db-ps-mode=disable run

测试数据库的写入性能,使用的是oltp_write_only模式:

sysbench --db-driver=mysql --time=300 --threads=10 --report-interval=1 --mysql-host=127.0.0.1 --mysql�
port=3306 --mysql-user=mysqlusername --mysql-password=mysqlpassword --mysql-db=test_db --tables=10 --
table_size=1000000 oltp_write_only --db-ps-mode=disable run

清理压测构造的数据:

sysbench --db-driver=mysql --time=300 --threads=10 --report-interval=1 --mysql-host=127.0.0.1 --mysql�
port=3306 --mysql-user=mysqlusername --mysql-password=mysqlpassword --mysql-db=test_db --tables=10 --
table_size=1000000 oltp_read_write  --db-ps-mode=disable cleanup

压测结果分析

image.png

以红色框住的测试信息为例,解析说明其含义:
thds:10 ,10个线程在压测
tps:226.01 ,每秒可以执行226.01个事务
qps:4499.11 ,每秒可以执行4499.11个请求
(r/w/o: 3144.07/904.02/451.01) :,在每秒4499.11个请求中有3144.07个读请求,904.02个写请求,451.01个其他请求,其实就是对qps的拆解。
lat (ms,95%): 223.34 :,95%的请求延迟在223.34毫秒以下
err/s: 0.00 reconn/s: 0.00:,每秒有0个请求是失败的,发生了0次网络重连。

备注说明:其他请求是指类似commit等,除了select,insert,update,delete

最终的压测报告

image.png

通过dstat命令来查看机器的性能指标

安装dstat

yum -y install dstat

查看磁盘的吞吐量

dstat -d
image.png

上图可以清晰的看到,IO吞吐量每秒读取28B的数据,每秒写入41k的数据,一般机械硬盘都可以做到每秒上baiMB的读写数据量。
查看磁盘的IOPS

dstat -r

image.png

上面的参数意思是读IOPS和写IOPS分别是多少,就是说随机磁盘读取每秒读取多少次,和随机磁盘写入,每秒钟执行多少次,一般情况下,随机磁盘读写每秒在两三百次是可以接受的。
观察网卡的流量情况

dstat -n
image.png

上图显示的就是每秒钟通过网卡接收到的流量有多少kb,通过网卡发送出的流量有多少kb,如果你的机器是千兆网卡的话,那么每秒中网卡的总流量也就在100MB左右,甚至更低。

通过top命令来查看cpu,内存等性能指标

image.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,390评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,821评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,632评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,170评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,033评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,098评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,511评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,204评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,479评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,572评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,341评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,213评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,576评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,893评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,171评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,486评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,676评论 2 335

推荐阅读更多精彩内容