如何解析MySQL性能瓶颈排查定位-创新互联

如何解析MySQL性能瓶颈排查定位,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。

创新互联公司自成立以来,一直致力于为企业提供从网站策划、网站设计、成都网站设计、成都网站制作、电子商务、网站推广、网站优化到为企业提供个性化软件开发等基于互联网的全面整合营销服务。公司拥有丰富的网站建设和互联网应用系统开发管理经验、成熟的应用系统解决方案、优秀的网站开发工程师团队及专业的网站设计师团队。

导读

从一个现场说起,全程解析如何定位性能瓶颈。

排查过程

收到线上某业务后端的MySQL实例负载比较高的告警信息,于是登入服务器检查确认。

1. 首先我们进行OS层面的检查确认

登入服务器后,我们的目的是首先要确认当前到底是哪些进程引起的负载高,以及这些进程卡在什么地方,瓶颈是什么。

通常来说,服务器上最容易成为瓶颈的是磁盘I/O子系统,因为它的读写速度通常是最慢的。即便是现在的PCIe SSD,其随机I/O读写速度也是不如内存来得快。当然了,引起磁盘I/O慢得原因也有多种,需要确认哪种引起的。

第一步,我们一般先看整体负载如何,负载高的话,肯定所有的进程跑起来都慢。
可以执行指令

  • 某些进程/服务消耗更多CPU资源(服务响应更多请求或存在某些应用瓶颈);

  • 发生比较严重的swap(可用物理内存不足);

  • 发生比较严重的中断(因为SSD或网络的原因发生中断);

  • 磁盘I/O比较慢(会导致CPU一直等待磁盘I/O请求);

  • 这时我们可以执行下面的命令来判断到底瓶颈在哪个子系统(横版查看):

    [yejr@imysql.com:~ ]# top
    top - 11:53:04 up 702 days, 56 min,  1 user,  load average: 7.18, 6.70, 6.47
    Tasks: 576 total,   1 running, 575 sleeping,   0 stopped,   0 zombie
    Cpu(s):  7.7%us,  3.4%sy,  0.0%ni, 77.6%id, 11.0%wa,  0.0%hi,  0.3%si,  0.0%st
    Mem:  49374024k total, 32018844k used, 17355180k free,   115416k buffers
    Swap: 16777208k total,   117612k used, 16659596k free,  5689020k cached
    
      PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
    14165 mysql     20   0 8822m 3.1g 4672 S 162.3  6.6  89839:59 mysqld
    40610 mysql     20   0 25.6g  14g 8336 S 121.7 31.5 282809:08 mysqld
    49023 mysql     20   0 16.9g 5.1g 4772 S  4.6 10.8   34940:09 mysqld

    很明显是前面两个mysqld进程导致整体负载较高。
    而且,从 Cpu(s) 这行的统计结果也能看的出来,%us

  • 一次请求读写的数据量太大,导致磁盘I/O读写值较大,例如一个SQL里要读取或更新几万行数据甚至更多,这种最好是想办法减少一次读写的数据量;

  • SQL查询中没有适当的索引可以用来完成条件过滤、排序(ORDER BY)、分组(GROUP BY)、数据聚合(MIN/MAX/COUNT/AVG等),添加索引或者进行SQL改写吧;

  • 瞬间突发有大量请求,这种一般只要能扛过峰值就好,保险起见还是要适当提高服务器的配置,万一峰值抗不过去就可能发生雪崩效应;

  • 因为某些定时任务引起的负载升高,比如做数据统计分析和备份,这种对CPU、内存、磁盘I/O消耗都很大,最好放在独立的slave服务器上执行;

  • 服务器自身的节能策略发现负载较低时会让CPU降频,当发现负载升高时再自动升频,但通常不是那么及时,结果导致CPU性能不足,抗不过突发的请求;

  • 使用raid卡的时候,通常配备BBU(cache模块的备用电池),早期一般采用锂电池技术,需要定期充放电(DELL服务器90天一次,IBM是30天),我们可以通过监控在下一次充放电的时间前在业务低谷时提前对其进行放电,不过新一代服务器大多采用电容式电池,也就不存在这个问题了。

  • 文件系统采用ext4甚至ext3,而不是xfs,在高I/O压力时,很可能导致%util已经跑到100%了,但iops却无法再提升,换成xfs一般可获得大幅提升;

  • 内核的io scheduler策略采用cfq而非deadline或noop,可以在线直接调整,也可获得大幅提升。

关于如何解析MySQL性能瓶颈排查定位问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注创新互联-成都网站建设公司行业资讯频道了解更多相关知识。


分享标题:如何解析MySQL性能瓶颈排查定位-创新互联
转载注明:http://myzitong.com/article/iidpi.html