MySQL 压力测试

开始之前先做个小实验

今天登录一台测试机,发现MySQL服务起不来,查看日志发现报错



刚开始认为mysql库中的几个关键表损坏了,想着去修复一下呢,结果并不是,更狠


库全没了

也不知道它经历了啥,里面的系统库都没有了。后来我想系统库大部分表啥的都一样,可能就里面的数据有不一样的。如果把同版本的msyql sys performance_schema 移动过来并授权,应该就能启动,于是从隔壁同版本的mysql scp系统库导data目录

查看下


启动 ,没有问题 


Ok 正常运转。


下面要对MySQL 进行压测。

使用sysbench 工具进行压测

Sysbench 简介

sysbench是一款开源的多线程工具,可以执行CPU/内存/线程/IO/数据库等方面的性能测试,数据库目前支持MySQL/Oracle/PostgreSQL。

对于大多数版本Linux 可以直接yum 安装

yum -y installsysbench

也可以编译安装

默认支持MySQL,如果需要测试Oracle/PostgreSQL,则在configure时需要加上–with-oracle或者–with-pgsql参数

./configure--prefix=/u01/sysbench --with-mysql-includes=/opt/mysql/include/mysql--with-mysql-libs=/opt/mysql/lib/mysql

make &&make install

安装

yum install -y automake libtool 依赖包

ln -sf /usr/local/mysql/lib/libmysql*/usr/lib64

ln -sf /usr/local/mysql/lib/libmysqlclient.so/usr/lib64/libmysqlclient_r.so

 wgethttp://imysql.com/wp-content/uploads/2014/09/sysbench-0.4.12-1.1.tgz

 tar zxf sysbench-0.4.12-1.1.tgz

 cd sysbench-0.4.12-1.1/

./autogen.sh

 ./configure--with-mysql-includes=/usr/local/mysql/include/ --with-mysql-libs=/usr/local/mysql/lib/

 make

 make install

 sysbench –help

说明没有问题 安装成功




需要关注的事项



MySQL oltp 测试脚本


1 准备数据(如果没有做全局变量,需要在绝对路径下执行)

./sysbench --mysql-host=192.168.193.128 --mysql-port=3306 --mysql-user=root--mysql-password=123456--test=/root/sysbench-0.4.12-1.1/sysbench/tests/db/oltp.lua  --oltp-table-size=10000--oltp_tables_count=50 --rand-init=on --mysql-table-engine=innodb prepare

--test=tests/db/oltp.lua表示调用 tests/db/oltp.lua 脚本进行 oltp 模式测试,

oltp --oltp_tables_count=50 表示会生成 50个测试表

--oltp-table-size=10000

表示每个测试表填充数据量为10000行

--rand-init=on  表示每个测试表都是用随机数据来填充的

2 执行测试

./sysbench  --mysql-host=192.168.193.128--mysql-port=3306 --mysql-user=root --mysql-password=123456--test=/root/sysbench-0.4.12-1.1/sysbench/tests/db/oltp.lua  --oltp-table-size=10000--oltp_tables_count=50 --mysql-table-engine=innodb --num-threads=100 --oltp-read-only=off--report-interval=10 --rand-type=uniform --max-time=1800 --max-request=0--percentile=99 run >> /root/test.log


--num-threads=1024

   表示发起1024个并发连接

--oltp-read-only=off

表示不要进行只读测试,也就是会采用读写混合模式测试

--report-interval=10

表示每10秒输出一次测试进度报告

--rand-type=uniform

表示随机类型为固定模式,其他几个可选随机模式:uniform(固定),gaussian(高斯),special(特定的),pareto(帕累托)

--max-time=1800

表示最大执行时长为1800秒,测试将在这个时间后结束

--max-requests=0

表示总请求数为 0,因为上面已经定义了总执行时长,所以总请求数可以设定为 0;也可以只设定总请求数,不设定最大执行时长

--percentile=99 表示设定采样比例,默认是 95%,即丢弃1%的长请求,在剩余的99%里取最大值



3 数据删除

./sysbench  --mysql-host=192.168.193.128--mysql-port=3306 --mysql-user=root --mysql-password=123456--test=/root/sysbench-0.4.12-1.1/sysbench/tests/db/oltp.lua  --oltp-table-size=1000--oltp_tables_count=20 --mysql-table-engine=innodb --num-threads=100 --oltp-read-only=off--report-interval=10 --rand-type=uniform --max-time=600 --max-request=0 --percentile=99 cleanup

4 看测试报告



当然测试的结果跟测试的数据量是有关的,本次测试量50*10000,50万行数据。其实没有多少,所以测试结果看着很好,其实没有太大参考价值。因为数据量还不到100m。所以,加大数据量才有价值。




如果加大数据量的话,比如上亿数据,是需要时间的。有没有可以快速压测的方法呢。有的,MySQL自带mysqlslap工具。mysqlslap是mysql自带的基准测试工具。

优点:查询数据,语法简单,灵活容易使用.该工具可以模拟多个客户端同时并发的向服务器发出查询更新,给出了性能测试数据而且提供了多种引擎的性能比较。

常用的选项

--concurrency

    并发数量,多个可以用逗号隔开

--engines

      要测试的引擎,可以有多个,用分隔符隔开,如--engines=myisam,innodb

--iterations

     要运行这些测试多少次

--auto-generate-sql

        用系统自己生成的SQL脚本来测试

--auto-generate-sql-load-type

    要测试的是读还是写还是两者混合的(read,write,update,mixed)

--number-of-queries

         总共要运行多少次查询。每个客户运行的查询数量可以用查询总数/并发数来计算


--number-int-cols

            创建测试表的int型字段数量

--number-char-cols

            创建测试表的chat型字段数量

--create-schema

           测试的database

--query

自己的SQL 脚本执行测试

--only-print

如果只想打印看看SQL语句是什么,可以用这个选项

--auto-generate-sql-add-autoincrement

代表对生成的表自动添加auto_increment列,从5.1.18版本开始



mysqlslap--concurrency=200,300,500,650 --iterations=3 --number-int-cols=20--number-char-cols=30 --auto-generate-sql --auto-generate-sql-add-autoincrement--auto-generate-sql-load-type=mixed --engine=innodb --number-of-queries=2000--verbose -udzyd -p123456

模拟并发200,300,500,600客户端 表int20 char30混合查询 每次2000查询,执行3次




mysqlslap  --concurrency=200,250 --iterations=2--create-schema=dzyd -e innodb --query="/root/query.sql" -uroot-p123456

使用自建的sql来测试,这样比较准确,本次自建的sql来自该项目原数据库的慢查询日志中sql


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

推荐阅读更多精彩内容