「高性能MySQL阅读笔记」第二章 MySQL基准测试

第二章 MySQL基准测试

基准测试(benchmark)是MySQl新手和专家都需要掌握的一项基本技能。

2.1 为什么需要基准测试

为什么基准测试很重要?因为基准测试是唯一方便有效的、可以学习系统在给定的工作负载下会发生什么的方法。
基准测试可以完成很多工作:

  • 验证基于系统的一些假设,确认这些假设是否符合实际情况
  • 重现系统中的某些异常行为,以解决这些异常
  • 测试系统当前的运行情况
  • 模拟比当前系统更高的负载,以找出系统随着压力增加而可能遇到的扩展性瓶颈
  • 规划未来的业务增长
  • 测试应用适应可变环境的能力
  • 测试不同硬件,软件和操作系统配置
  • 证明新采购的设备配置是否正确

2.2 基准测试的策略

基准测试有两个主要的策略:

  • 一是针对整个系统的整体测试
    • 测试整个应用系统,包括Web服务器、应用代码、网络和数据库是非常有用的,因为用户关注的不仅仅是MySQL本身的性能,而是应用整体的性能。
    • MySQL并非总是应用的瓶颈
    • 只有对应用做整体测试,才能发现各部分直接的缓存带来的影响
    • 整体应用的集成测试更能揭示应用的真实表现,而单独组件测试很难做到这一点。
  • 另外是单独测试MySQL。
    • 需要比较不同的schema或者查询性能
    • 针对应用中某个具体问题的测试
    • 为了避免漫长的基准测试,可以通过一个短期的基准测试,做快速的“周期循环”来检测出某些调整后的效果
2.2.1 测试何种指标
  • 吞吐量:是指单位时间内的事务处理数,常用的测试单位是每秒事物数(TPS),有的地方也采用每分钟事务数(TPM)
  • 响应时间或者延迟:这个指标用以测试任务所需的整体时间。
  • 并发性
  • 可扩展性

2.3 基准测试的方法

如何避免一些常见的错误:

  • 使用真实数据的子集而不是全集
  • 使用错误的数据分布
  • 使用不真实的分布参数
  • 使用错误的数据分布
  • 在多用户场景下只做单用户的测试
  • 在单服务器上测试分布式应用
  • 与真实用户行为不匹配
  • 反复执行同一个查询
  • 没有检查错误
  • 忽略了系统预热(wram up)的过程
  • 使用默认的服务器配置
  • 测试时间太短
2.3.1 设计和规划基准测试
  • 提出问题并明确目标
  • 选择合适的方案
  • 迭代测试
  • 针对数据运行查询
  • 可以在不同级别记录查询
  • 即使不需要创建专用的基准测试,详细的写下测试规划也是必需的
  • 应该建立将参数和结果文档化的规范,每一轮测试都必须进行详细记录
2.3.2 基准测试应该运行多长时间

基准测试应该运行足够长的时间,这一点很重要。

2.3.3 获取系统性能和状态

需要记录的数据包括系统状态和性能指标,诸如CPU使用率,磁盘I/O、网络流量统计、SHOW GLOBAL STATUS计数器等

    #!/bin/sh
    INTERVAL = 5
    PREFIX =$INTERVAL-sec-status
    RUNFILE=/home/benchmarks/running
    mysql -e 'SHOW GLOBAL VARIABLES' >> mysql-variables
    while test -e $RUNABLE; do
        file=$(date +%F_%I)
        sleep=$(date+%s.%N | awk "{print $INTERVAL - (\$1 % $INTERVAL)}")
        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\G' >> $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 exist
2.3.4 获得准确的测试结果
  • 获得准确基准测试结果的最好办法是回答一些关于基准测试的基本问题:
    • 是否选择了正确等基准测试?
    • 是否为问题收集了相关数据?
    • 是否采用了错误等测试标准?
  • 确认测试是否可以重复。每次测试之前要确保系统状态一致
  • 每次测试中,修改的参数应尽可能少
  • 另外基于MySQL的默认配置的测试没什么意义,因为默认配置是基于消耗很少内存的极小应用的。
  • 最后,如果测试中出现异常结果,不要轻易当作坏数据点丢弃。应该认真研究并找到产生这种结果的原因
2.3.5 运行基准测试并分析结果
  • 自动化
  • 对结果进行分析
  • 得出结果,回答设计测试时的问题
2.3.6 绘图的重要性

在执行基准测试的时候要尽可能的收集更多的细节数据,然后将数据绘制成图形,这样可以帮助快速的发现问题。

2.4 基准测试工具

2.4.1 集成式测试工具

已有的集成式测试工具:

  • ab: 一个Apache HTTP 服务器基准测试工具。它可以测试http服务器每秒最多可以处理多少请求。
  • http_load
    • 和 ab类似,但是比ab灵活
    • 可以在提供的URL中随机测试
  • JMeter : 一个java应用程序,可以加载其他应用并测试性能。
2.4.2 单组件式测试工具
  • mysqlslap
  • MySQL Benchmark Suite(sql-bench)
  • Super Smack
  • Database Test Suite
  • Percona’s TPCC-MySQL Tool
  • sysbench

2.5 基准测试案例

2.5.1 http_load
2.5.2 MySQL基准测试套件
2.5.3 sysbench
2.5.4 数据库测试套件中的dbt2 TPC-C测试
2.5.5 Percona的 TPCC-MySQL测试工具

2.6总结

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

唐·王惜之

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值