性能优化

性能:完成某建任务所需要的时间度量.也就是说,性能即响应时间.

假设性能优化就是在一定的工作负载下尽可能地降低响应时间.性能优化并不是指降低CPU利用率,也不能仅仅看成是提升每秒查询量,这其实是吞吐量优化.

完成一项任务花费的时间可以分为执行时间和等待时间.

性能剖析(profiling)是测量和分析时间花费在哪里的主要方法.性能剖析一般有两个步骤:测试任务所花费的时间;然后对结果进行统计和排序,将重要的任务排到前面.

两种性能剖析:基于执行时间的分析基于等待时间的分析.基于执行时间的分析研究的是什么任务的执行时间最长;基于等待时间的分析研究的是判断任务在什么地方被阻塞的时间最长.

剖析MySQL查询

通过慢查询日志捕获服务器上的所有查询,并且进行分析.

不要直接打开慢查询日志进行分析,首先应该生成一个剖析报告,如果需要,在查看日志中需要特别关注的部分.从慢查询日志生成剖析报告的工具:pt-query-digest;
分析报告中有一个V/M列提供了方差均值比(variance-to-mean ratio),也就是常说的离差指数.离差指数高低的查询对应的执行时间变化较大,而这类查询通常都值得去优化.

定位到需要优化的单条查询后,就需要针对查询获取更多信息,为什么会花费这么多长的执行时间,以及如何去优化.

如何剖析单条查询:

  • 命令:show profile;默认是禁用的,但是可以通过服务器变量在会话(连接)级别动态的修改.
    set profiling = 1; 然后在服务器上执行的所有语句,都会测量其耗费的时间和其他一些查询执行状态变更相关信息.
    show profiles ; 可以查看语句的执行时间.
    show profile for query 1 这个1是上一步查询的id
    可以查看查询执行的每一步及其花费的时间.