高性能MySQL-3、服务器性能剖析

服务器性能剖析

常见问题:

  • 如何确认服务器是否达到性能最佳状态
  • 找出某条语句为什么执行不够快
  • 诊断被描述成“停顿”“堆积”或”卡死“的某些间歇性疑难故障

一、性能优化简介

  • 1、性能:为了完成某件任务所需要的时间度量,度量即响应时间,这是非常重要的原则
  • 2、如果目标是降低响应时间,就需要理解为什么服务器执行查询需要这么多时间,然后去减少或者消除那些对获得查询结果来说不必要的工作,无法测量就无法有效的优化。
  • 3、性能剖析说测量和分析时间花费在哪里的主要方法,一般有两个步骤:测量所花费的时间,对结果进行统计和排序,测量是一项很有挑战性的工作,甚至有百分之90的时间来测量时间花在哪里,如果测量了系统中完整而且正确的数据,性能问题一般都能暴露出来,对症下药的解决方案也就比较明了。

二、对应用程序进行性能剖析

1、性能瓶颈可能的影响因素

  • 外部资源
  • 应用需要处理大量数据
  • 在循环中执行昂贵的操作
  • 使用了低效的算法

2、PHP性能剖析工具:New Relic、xhprof、lfp

三、剖析MySQL查询

1、剖析服务器负载

  • 慢查询日志:5.1后long_query_time为0可以补货所有的查询,查询的响应时间单位可以做到微秒级
  • 生成剖析报告:pt-query-digest

2、剖析单条语句

  • SHOW PROFILES:mysql用来分析当前绘画SQL语句执行的资源消耗情况
  • SHOW [GLOBAL] STATUS;返回一些计数器

四、诊断间接性问题

1、系织偶尔停顿或慢查询

1、系织偶尔停顿或慢查询,无法确认如何重现,很难诊断,诊断这样的问题往往花费很多时间,甚至好几个月。
尽量不要用试错的方式来解决问题,这种方式有很大的风险,如果一时无法定位,可能是测量的方式不正确,或者测量的点选择有误,或者使用的工具不合适。

常见案例

  • 1、缓存中重要数据过期,导致大量查询落到MYSQL上以重新生成缓存
  • 2、DNS偶尔会有超时
  • 3、互斥锁争用
  • 4、并发度超过某个阔值时, InnoDB的扩展性限制导致查询计划的优化需要很长时间

2、确定单条询问题还是服务器问题

如果问题不停的周期性出现,那么可以在某种活动中规察到;或者整夜运行脚本收集数据,第二天来分析结果。大多数情况下都可似通过三种技术来解决

  • 使用 SHOW GLOBAL STATUS(列出服务器运行各种状态值,不停执行存数据)
  • 使用 SHOW PROCESSLIST
  • 使用查询日志

理解发现的问题,可选 gnuplot成R,或其他绘图工具将结果给制成图形

3、捕获诊断数据

  • 诊断触发器:在问题出现时能够捕获数据的基础,有两个常见问题可能导致无法达到预期的结果:误报( false positive)或漏检( false negative),pt-stak工具
  • 收集数据:尽可能收集所有能收集的数据,但只在需要的时间段内收集, oprofile、 strace、 tcpdump、GDB堆栈跟踪、pt- collect、 prestalk
  • 计时结果数据:pt-mysql-summary、pt-summary输出结果打包,pt-sift得到样本汇总信息,pt-pmp。
  • 解释数据结果:pt-mysql-summary、pt-summary输出结果打包,pt-sift得到样本汇总信息,pt-pmp

五、其他剖析工具

1、使用USER_STATISTICS表
2、使用strace,可以调查系统调用的情况。

发布了105 篇原创文章 · 获赞 18 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_38367817/article/details/104433731