《高性能mysql》读书笔记:服务器性能剖析

3.1 性能优化简介

不合适的测量方式:
1)在错误的时间启动和停止测量;
2)测量的是聚合后的信息,而不是目标活动本身;

优化任务的执行时间,最好的办法是测量定位不同的子任务花费的时间,然后优化去掉一些子任务、降低子任务的执行频率或者提升子任务的效率。

3.1.1 通过性能剖析进行优化
性能剖析一般两个步骤:
1)测量任务所花费的时间;
2)对结果进行统计和排序,将重要的任务排到前面;

性能剖析报告:
1)对相似任务进行分组汇总
2)每行记录一个任务,包括任务名、执行时间、消耗时间、平均执行时间、占全部时间百分比;
3)报告按消耗时间降序排序;

两种类型的性能剖析:
1)基于执行时间的分析;
2)基于等待时间的分析;

3.1.2 理解性能剖析
值得优化的查询
1)一些只占总响应时间比重很小的查询是不值得优化的;
2)如果优化的成本大于收益,就应该停止优化;

异常情况:执行频率低,时间占比小,但每次执行很慢,需要优化;
未知的未知:丢失的时间,实际测量时间小于任务总时间;
被掩藏的细节:平均值无法展现细节;

3.2 对应用程序进行性能剖析

性能瓶颈可能因素:
1)调用了外部资源,比如第三方服务或者搜索引擎;
2)应用需要处理大量数据;
3)循环中执行耗时操作;
4)使用了低效的算法;

3.3 剖析mysql查询

3.3.1 剖析服务器负载
慢查询日志
慢查询日志是开销最低、精度最高的测量查询时间工具。慢查询日志带来的开销可以忽略不计,但可能消耗大量的磁盘空间,建议不要长期启用慢查询日志,只在需要收集负载样本的期间开启即可。
如果没有权限使用慢查询日志,可以不断使用SHOW FULL PROCESSLIST,查看查询的开始和消失时间,计算时间间隙。

通用日志,对查询请求进行记录,很少用于性能分析。

3.3.2 剖析单条查询
主要是用SHOW STATUS, SHOW PROFILE, 检查慢查询日志的方式。

SHOW PROFILE
在服务器上执行的所有语句,都会测量其耗费的时间和其他一些查询执行状态变更相关的数据。
方法:
1)show profiles,查看所有语句的执行状态;
2)show profile for query id,查看某条语句的执行时间;
3)也可以查询INFORMATION_SCHEMA表中的,可以格式化输出各项执行时间;

SHOW GLOBAL STATUS
以较高的频率比如一秒执行一次SHOW GLOBAL STATUS命令捕获数据,问题出现时,可以通过某些计数器来发现。

SHOW PROCESSLIST
通过不停地捕获SHOW PROCESSLIST的输出,来观察是否有大量线程厨余不正常的状态或者特征。

 

posted @ 2020-08-26 15:49  Alan6  阅读(158)  评论(0编辑  收藏  举报