DB瓶颈的发现


Benchmarking(基准测试)

作用:测量系统的性能

功能:

  1. 测量当前应用的性能
  2. 检验系统的可扩展性
  3. 规划扩展。估计未来需要多少的硬件,网络资源等
  4. 测试应用在不断变化的环境中的承受能力
  5. 可以比较不同硬件上、软件和操作系统上的性能比较

Benchmarking Strategies(基准策略)

对整个应用进行测试而不是仅仅对MySQL单独测试的好处

  1. 关注的是整个应用,而不是仅仅是MySQL
  2. MySQL不总是应用的性能瓶颈
  3. 测试整个应用可以每个部分的缓存行为方式
  4. 性能瓶颈在实际应用行为中比较容易复现

只有当仅仅想关注数据库的瓶颈时才只对MySQL进行测试,如

  1. 比较不同的shemas 或者 queries
  2. 对在应用中看到的特定问题进行基准测试
  3. 想进行较短的基准测试,更快地进行和评估变更周期

测试的内容

  1. 单位时间的事务量
  2. 响应时间或者延迟
  3. 可扩展性
  4. 并发量

Benchmarking Tactics(基准措施)

在进行测试应该避免的情况

  1. 使用真实数据的子集
  2. 使用不正确分布的数据
  3. 使用不真实的分布式参数
  4. 对多用户应用程序使用单用户方案
  5. 在一个服务器上测试分布式的应用
  6. 循环使用相同的查询
  7. 没有匹配真实用户的行为
  8. 没有检测错误
  9. 忽视系统系统未预热的性能(如系统重启时的性能)
  10. 使用默认的系统配置
Designing and Planning a Benchmark
  1. 确定问题和目标
  2. 确定使用标准的基准测试还是设计自己的基准测试
    • 使用基准测试要选择符合需求的测试
    • 使用自定义的基准测试首先需要备份数据集,接下来根据数据查询。可以将行文记录在日志上。
    • 即使不能建立自定义的基准测试,也要将基准测试的计划记录下来
    • 设计一些方法参数的文档和结果
Getting Accurate Results

没有得到正确的结果需要检查

  1. 是否选择核实的基准测试
  2. 是否获取到了你解决问题所需要的数据
  3. 是否使用了错误的标准进行基准测试

Benchmarking Tools

  1. 全栈工具
    • ab(Apache HTTP server benchmarking tools)
    • http_load
    • JMeter
  2. 单独组件工具
    • mysqlap
    • sysbench
    • Database Test Suite
    • MySQL Benchmark Suite
    • Super Smack

Profiling

作用:找出应用的哪一部分花费时间多,消耗资源大

分类:application profiling,server profiling,database profiling

功能:

  1. 测试函数调用的次数
  2. IO操作的次数
  3. 数据查询的测试

瓶颈产生的原因:

  1. 加载额外的资源
  2. 操作需要处理大量的数据
  3. 循环中的昂贵操作,如滥用正则表达式
  4. 糟糕的优化算法

测量的指标

  1. 总执行时间
  2. 每一个查询的执行时间
  3. 每一次调用额外的资源
  4. 潜在的昂贵的函数调用
  5. 用户和系统的CPU时间

MySQL profiling

可以搜集到的信息

  1. 可以查看哪一个数据MySQL访问最多
  2. MySQL最经常执行哪种查询
  3. MySQL线程花费最多时间的原因是什么
  4. MySQL最长使用哪一些子系统执行查询
  5. 查询MySQL期间会访问哪种数据
  6. MySQL执行了多少种活动。如索引扫描

日志查询

MySQL包含两种日志查询

  1. general log。general log 包含了所有执行过的语句(成功或者失败),但是不记录执行时间或者在查询结束后的任何信息。
  2. slow log。用于记录MySQL中响应超过阈值的语句。

查询slow log的缺点

  1. 只能按照秒级的时间粒度进行查询
  2. 无法将所有的查询记录记录到日志

查询日志主要观察的对象

  1. 长查询。
  2. 高影响力的查询。查找服务器大部分执行时间的查询
  3. 新的查询。之前不在但是现在在排行榜上的查询

日志分析工具

  1. mysqldumpslow
  2. mysql_slow_log_filter
  3. mysql_slow_log_parser
  4. mysqlsla

文章作者: 彭峰
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 彭峰 !
  目录