Mysql架构组成之存储引擎压力测试

来源:互联网 发布:遗传算法c语言程序 编辑:程序博客网 时间:2024/06/03 17:24

一、压力测试mysql

Mysqlslap性能测试mysql二中存储引擎(mysim、innodb)

Mysqlslap是mysql自带的基准的测试工具优点有:查询数据,语法简单,灵活容易使用,这个工具可以模拟多个客户端同时并发的向服务器发出查询更新,给出了性能测试数据而且提供了多种引擎的性能比较,mysqlslap为mysql性能优化前后提供了直观的依据

Mysqlslap一些参数

--concurrency代表并发的数量,多个可以用逗号隔开。如: concurrency 500,1000等

--engines代表要测试的引擎,可以有多个,用分隔符隔开。

--iterations代表运行这些测试多少次,以及运行多少次后,得到的结果

--auto-generate-sql-load-type代表要测试的是读还是写还是两者混合的。

--number-of-queries代表总共要运行多少次的查询,每个客户运行的查询数量可以用查询总数/并发数来计算

--debug-info嗲表要额外输出cpu以及内存的相关信息

--number-int-cols代表测试表中的integer类型的属性有多少个

--number-char-cols代表测试表中char类型字段的数量

等等。。。更多参数可以用mysqlslap –help查看。

1.查看    mysql数据库默认的最大连接数

mysql> show variables like '%max_connections%';


默认是151,可以通过主配置 文件来添加max_connections=1024重启mysql再次查看


修改后的最大连接数


2.用自带的sql脚本来测试

mysqlslap  --defaults-file=/etc/my.cnf    --concurrency=1600,1620    --iterations=1--number-int-cols=20 number-char-cols=30   --auto-generate-sql   --auto-generate-sql-add-autoincrement   --auto-generate-sql-load-type=mixed   --engine=myisam,innodb   --number-of-queries=2000 -uroot-ppwd123 --verbose


也可以将测试结果以csv的格式拷贝到windows主机上如下:

mysqlslap    --defaults-file=/etc/my.cnf    --concurrency=1600,1620    --iterations=1   --number-int-cols=20  number-char-cols=30   --auto-generate-sql     --auto-generate-sql-add-autoincrement    --auto-generate-sql-load-type=mixed   --engine=myisam,innodb   --number-of-queries=6000  -uroot -ppwd123   --csv=/root/yankerp.csv


Linux已经生成,通过sz命令下载到本地windows


3.用我们自己定义的sql语句脚本测试

脚本内容如下:

#!/bin/bash
HOSTNAME="localhost"
PORT="3306"
USERNAME="root"
PASSWORD="123456"
DBNAME="test1"
TABLENAME="tb1"
#create database
mysql -h ${HOSTNAME} -P${PORT} -u${USERNAME} -p${PASSWORD} -e "drop database if exists ${DBNAME}"
create_db_sql="create database if not exists ${DBNAME}"
mysql -h ${HOSTNAME} -P${PORT} -u${USERNAME} -p${PASSWORD} -e"${create_db_sql}"
#create table
create_table_sql="create table if not exists ${TABLENAME}(stuid int not null primary key,stuname varchar(20) not null,stusex char(1) not null,cardid varchar(20) not null,birthday datetime,entertime datetime,address varchar(100)default null)"
mysql -h ${HOSTNAME} -P${PORT} -u${USERNAME} -p${PASSWORD} ${DBNAME} -e"${create_table_sql}"
#insert data to table
i="1"
while [ $i -le 20000 ]
do
insert_sql="insert into ${TABLENAME}  values($i,'zhangsan','1','21276387261874682','1999-10-10','2017-10-24','beijingchangpingqu')"
mysql -h ${HOSTNAME} -P${PORT} -u${USERNAME} -p${PASSWORD} ${DBNAME} -e"${insert_sql}"
let i++
done
#select data
select_sql="select count(*)from${TABLENAME}"
mysql -h ${HOSTNAME} -P${PORT} -u${USERNAME} -p${PASSWORD} ${DBNAME} -e"${select_sql}"


运行结束后,执行mysqlslap工具测试(过程稍慢)

mysqlslap--defaults-file=/etc/my.cnf --concurrency=500,600 --iterations=1--create-schema="yankerp" --query='select * from yankerp.bdqn'--engine=myisam,innodb --number-of-queries=2000 -uroot -ppwd123 --verbose


生成csv文件到windows

mysqlslap--defaults-file=/etc/my.cnf --concurrency=100,200 --iterations=1--create-schema="yankerp" --query='select * from yankerp.bdqn'--engine=myisam,innodb --number-of-queries=2000 -uroot -ppwd123--csv=/root/yankai.csv


工程中遇到的错误


调整以下并发数就解决了~~

希望对您有所帮助,再见! 再见