Benchmarking(基准测试)
作用:测量系统的性能
功能:
- 测量当前应用的性能
- 检验系统的可扩展性
- 规划扩展。估计未来需要多少的硬件,网络资源等
- 测试应用在不断变化的环境中的承受能力
- 可以比较不同硬件上、软件和操作系统上的性能比较
Benchmarking Strategies(基准策略)
对整个应用进行测试而不是仅仅对MySQL单独测试的好处
- 关注的是整个应用,而不是仅仅是MySQL
- MySQL不总是应用的性能瓶颈
- 测试整个应用可以每个部分的缓存行为方式
- 性能瓶颈在实际应用行为中比较容易复现
只有当仅仅想关注数据库的瓶颈时才只对MySQL进行测试,如
- 比较不同的shemas 或者 queries
- 对在应用中看到的特定问题进行基准测试
- 想进行较短的基准测试,更快地进行和评估变更周期
测试的内容
- 单位时间的事务量
- 响应时间或者延迟
- 可扩展性
- 并发量
Benchmarking Tactics(基准措施)
在进行测试应该避免的情况
- 使用真实数据的子集
- 使用不正确分布的数据
- 使用不真实的分布式参数
- 对多用户应用程序使用单用户方案
- 在一个服务器上测试分布式的应用
- 循环使用相同的查询
- 没有匹配真实用户的行为
- 没有检测错误
- 忽视系统系统未预热的性能(如系统重启时的性能)
- 使用默认的系统配置
Designing and Planning a Benchmark
- 确定问题和目标
- 确定使用标准的基准测试还是设计自己的基准测试
- 使用基准测试要选择符合需求的测试
- 使用自定义的基准测试首先需要备份数据集,接下来根据数据查询。可以将行文记录在日志上。
- 即使不能建立自定义的基准测试,也要将基准测试的计划记录下来
- 设计一些方法参数的文档和结果
Getting Accurate Results
没有得到正确的结果需要检查
- 是否选择核实的基准测试
- 是否获取到了你解决问题所需要的数据
- 是否使用了错误的标准进行基准测试
Benchmarking Tools
- 全栈工具
- ab(Apache HTTP server benchmarking tools)
- http_load
- JMeter
- 单独组件工具
- mysqlap
- sysbench
- Database Test Suite
- MySQL Benchmark Suite
- Super Smack
Profiling
作用:找出应用的哪一部分花费时间多,消耗资源大
分类:application profiling,server profiling,database profiling
功能:
- 测试函数调用的次数
- IO操作的次数
- 数据查询的测试
瓶颈产生的原因:
- 加载额外的资源
- 操作需要处理大量的数据
- 循环中的昂贵操作,如滥用正则表达式
- 糟糕的优化算法
测量的指标
- 总执行时间
- 每一个查询的执行时间
- 每一次调用额外的资源
- 潜在的昂贵的函数调用
- 用户和系统的CPU时间
MySQL profiling
可以搜集到的信息
- 可以查看哪一个数据MySQL访问最多
- MySQL最经常执行哪种查询
- MySQL线程花费最多时间的原因是什么
- MySQL最长使用哪一些子系统执行查询
- 查询MySQL期间会访问哪种数据
- MySQL执行了多少种活动。如索引扫描
日志查询
MySQL包含两种日志查询
- general log。general log 包含了所有执行过的语句(成功或者失败),但是不记录执行时间或者在查询结束后的任何信息。
- slow log。用于记录MySQL中响应超过阈值的语句。
查询slow log的缺点
- 只能按照秒级的时间粒度进行查询
- 无法将所有的查询记录记录到日志
查询日志主要观察的对象
- 长查询。
- 高影响力的查询。查找服务器大部分执行时间的查询
- 新的查询。之前不在但是现在在排行榜上的查询
日志分析工具
- mysqldumpslow
- mysql_slow_log_filter
- mysql_slow_log_parser
- mysqlsla