High Performance MySQL, Chapter2: benchmarking and profiling

为了发现系统瓶颈
benchmarking是为了确定系统性能表现究竟怎么样
profiling是为了了解为什么系统会表现成这样


benchmark的作用:
测试应用当前的性能
验证系统的可伸缩性
减少系统将来扩展的风险
测试系统在变化的环境下的表现
测试系统在不同硬件、软件配置下的表现

benchmark的策略
测试整个应用,或仅仅测试MySQL

what to measure?
Transactions per time unit(throughput)
response time or latency
scalability
concurrency: 不同于前面几项,concurrency不是测试的结果,而是测试设置的一个属性。我们通常是验证系统在不同并发下的性能表现,而不是去测试系统能达到多大的并发。

常见benchmark的错误:
使用真实数据的一个子集:实际应用会用到几百G的数据,而测试时只用几个G的数据
数据分布不正确:测试数据均衡分布,但真实环境中会存在许多“hot spots”
使用不真实的参数
用单用户场景来测试多用户的应用
在单server上测试分布式的应用
没有匹配真实的用户行为,例如忽略了用户浏览网页时观看网页的时间
在循环中使用了同样的查询,真实情况不会这样,缓存会失效
忽略错误,这样benchmark的结果会变得毫无意义
忽略了系统在没有预热的情况下的表现。因为有时候需要关心系统在刚重启后的性能。同样的,如果需要测试系统一般状况的表现,也不能在刚重启后就立即测试
使用默认的server设置。实际情况往往会进行优化


Profiling
需要对应用进行profiling,同时也需要MySQL server进行profiling

 

MySQL Server的profiling可以分析mysql的log。log分为general log和slow log。

另外可以使用SHOW STATUS命令,检查query究竟执行了哪些操作,有助于优化query。

例如,mysql> SHOW SESSION STATUS LIKE 'Select%';
+------------------------+-------+

| Variable_name          | Value |
+------------------------+-------+
| Select_full_join       | 0     |
| Select_full_range_join | 0     |
| Select_range           | 0     |
| Select_range_check     | 0     |
| Select_scan            | 2     |
+------------------------+-------+

等等,诸如此类。

另外可以SHOW PROFILE,查看mysql执行某个query究竟把时间耗费在什么地方。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值