mysql 基准测试

基准测试:不关心业务
模拟比当前系统更高的负载,以找到系统扩展瓶颈增加数据量并发,观察qps tps变化 找到性能最佳时刻的并发。测试不同的硬件,软件版本,和操作系统配置对数据库性能的影响。

怎样进行基准测试

一.对整个系统进行基准测试

从系统入口进行测试(如网站web前端)
 优点:能够测试整个系统的性能 包括web服务器 缓存 数据库。
 缺点:测试设计复杂 消耗时间长
二.单独对mysql进行基准测试

优点:操作简单 耗时短 适合针对某个具体问题进行测试
缺点:无法全面了解整个系统的性能基线

mysql基准测试常见指标

1.单位时间内所处理的事务数(TPS)

2.单位时间内处理的查询数(QPS)

3.响应时间(平均响应时间,最小响应时间,最大响应时间,各时间所占百分百)

4.并发量:同时处理的查询请求数量
    正在工作中的并发的操作数或同时工作的数量

基准测试步骤

1.明确测试范围(系统还是单独mysql)

2.使用什么数据(生产环境的实际数据(使用生产环境数据库备份),如果只想知道某个参数变化带来的影响(使用软件生成测试需要的的数据和sql))

3.计划和设计基准测试
数据收集脚本(收集cpu使用率,IO,网络流量,状态和计数器信息)
类似下面的收集脚本

.sh收集脚本

INTERVAL=5
PREFIX=/home/imooc/benchmarks/$INTERVAL-sec-status
RUNFILE=/home/imooc/benchmarks/running
echo "1" > $RUNFILE
MYSQL=/usr/local/mysql/bin/mysql
$MYSQL -e "show global variables" >> mysql-variables
while test -e $RUNFILE; do
    file=$(date +%F_%I)
    sleep=$(date +%s.%N | awk '{print 5 - ($1 % 5)}')
    sleep $sleep
    ts="$(date +"TS %s.%N %F %T")"
    loadavg="$(uptime)"
    echo "$ts $loadavg" >> $PREFIX-${file}-status
    $MYSQL -e "show global status" >> $PREFIX-${file}-status &
    echo "$ts $loadavg" >> $PREFIX-${file}-innodbstatus
    $MYSQL -e "show engine innodb status" >> $PREFIX-${file}-innodbstatus &
    echo "$ts $loadavg" >> $PREFIX-${file}-processlist
    $MYSQL -e "show full processlist\G" >> $PREFIX-${file}-processlist &
    echo $ts
done
echo Exiting because $RUNFILE does not exists

运行基准测试

保存分析基准测试结果(可编写.sh分析脚本)

一些值得注意的问题

1.使用生产环境的数据时只使用了部分数据(应该选择数据库的全部备份)

2.在多用户的场景中,只做单用户的测试(对于多用户推荐使用多线程并发测试)

3.在单服务器上测试分布式应用(使用相同的架构测试)

4.反复执行同一个查询(容易缓存命中)

常见基准测试
系统整体测试(AB,http_load)

mysql基准测试工具

1.mysqlslap (mysql5.1后自带的工具)

特点

可以模拟服务器负载,并输出相关统计信息
可以指定或自动生成查询语句

常用参数

--auto-generate-sql (用于指定使用系统自带生成sql脚本和相关数据测试还是自己指定)
--auto-generate-sql-add-autoincrement(在生成的表中增加自增id)用innodb中,最好使用自增id做主键
--auto-generate-sql-load-type (指定测试中使用的查询类型:默的类型认为混合
)
--auto-generate-sql-write-number (指定初始化数据时生成的数据量)
--concurrcy (指定并发线程的数量)可以通过这个测试多并发,以使用逗号分隔不同数目的并发量
--engine (指定测试表的存储引擎,可以使用逗号分隔多个存储引擎,测试完一个存储引擎后,删除表再测试下一个)(不能喝--no-drop一起用)
--no-drop 指定不清理测试数据
--iterations  指定测试运行次数,每次运行一次测试会重新生成测试数据,所以不能和no-drop一起用

–number-of-queries 指定每个线程执行的查询数

–debug-info(指定输出额外的内存和cpu统计信息)

--number-int-cols指定测试表中包含int类型列的数量

--number-char-cols 指定测试表中包含vachar类型列的数量
--create-schema指定了用于执行测试的数据库的名字
--query 用于指定自定义sql的脚本
--only-print 并不会运行测试脚本  而是把生成的脚本打印出来

你可能感兴趣的:(mysql 基准测试)