高性能Mysql 序言3:服务器性能剖析

本文深入探讨了性能优化的关键方法,包括通过性能剖析优化、应用程序剖析及服务器负载分析。详细介绍了MySQL性能剖析技巧,如何识别并优化关键查询,以及理解被隐藏的细节。同时,文章提供了剖析应用程序和服务器负载的有效策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

 

3.1通过性能剖析进行优化

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

3.3剖析服务器负载

总结:


3.1通过性能剖析进行优化

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

mysql的性能剖析能将重要的任务展示在前面,但是有时没显示出来的信息也很重要,如下所示:

值得优化的查询

性能剖析不会自动给出哪些查询是值得花时间去优化的,另外当优化成本大于收益时,应该停止优化

异常情况

某些任务即使咩有出现在性能剖析输出的前面也需要优化,比如某些任务执行次数很少,但是每次执行慢,严重影响用户体验。

被隐藏的细节

性能剖析无法显示所有响应时间分布,只相信平均值时非常危险的,在操作里有可能一两个查询响应时间很高,这些都是无法显示出来的

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

剖析应用程序一般比剖析数据库要简单得多,而且汇报大。

性能瓶颈可能有很多影响因素:

  • 外部资源,比如调用了外部的web服务或者搜索引擎;
  • 应用需要处理大量的数据,比如分析一个超大的xml文件;
  • 在循环中执行昂贵操作,比如滥用正则表达式;
  • 使用低效的算法;

3.3剖析服务器负载

  • 捕获MySQL的查询到日志文件中

在当前mysql版本中,慢查询日志是开销最小的,精度最高的测量查询时间工具,在IO密集型场景下,慢查询日志带来的开销几乎忽略不计,但是需要关心的时日志可能会消耗大量的磁盘空间,长期开慢查询日志的话,注意要部署日志轮转工具,或者定时开慢查询。

  • 剖析单条查询方法
  1. 使用 SHOW PROFILE

设置 set profiling=1;然后在服务器执行的所有语句,都会测量其耗费的时间以及查询操作耗时,show profiles可以显示耗时,如:

但是问题来了,我们只能看到总的耗时,我们要是需要查询查询过程的耗时可以使用show profile for query 1;

这份报告给出查询执行的每个步骤需要花的时间,看结果可以确定哪个步骤耗时最多。

       2.使用SHOW STATUS

mysql的SHOW STATUS返回一些计数器,show global status 可以查看服务器级别的从服务器启动时开始计算的查询次数统计。

       3.使用SHOW PROCESSLIST

这个方法是通过不停地捕获SHOW PROCESSLIST的输出,来观察是否有大量线程处于不正常的状态或者有其它不正常特征。

        4.使用查询日志

如果要通过查询日志发现问题,需要开启慢查询日志并在全局级别设置long_query_time 为0,并且要确定所有的连接都采用了新设置。

  • IO利用率奇高

原因可能有两种情况:要么数据库io,要么系统缺少io资源影响数据库性能

什么情况导致性能低下:

  1. 资源已经被过渡使用,余量不足以正常公众;
  2. 资源没有被正确配置
  3. 资源应景选坏或者失灵

 

总结:

  • 我们认为定义性能最有效的是响应时间
  • 测量的最佳启点是应用程序
  • 完整测试产生大量需要分析的数据
  • 有两种消耗时间的操作:工作或者等待

 

 

相信大家看完肯定是糊里糊涂的,后面会专门开一章来讲解如何配置优化服务器。

前3章序言算是完了,接下来的7章讲相关的实用技巧了