zoukankan      html  css  js  c++  java
  • MySQL慢查询的可能原因及解决思路

    要有高性能的MySQL服务,不仅需要设计好的库表结构、好的索引,还需要有好的查询。

    也就是说,一个慢查询的出现,可以从服务器、库表结构、索引、查询语句等方面着手。

    对查询进行性能剖析有两种方式,一种是剖析服务器负载,另一种是剖析单条查询。

    1.剖析服务器负载

    1.1捕获慢查询

    使用慢查询日志。慢查询日志是开销最低、精度最高的测量查询时间的工具,而且I/O开销可以忽略不计。

    但如果长期开启慢查询日志,应部署好日志轮转(log rotation)工具。或者只在收集负载样本的期间开启。

    MySQL还有一种查询日志,叫通用日志,在查询请求到服务器时进行记录。

    1.2分析查询日志

    使用pt-query-digest可以从慢查询日志生成剖析报告。确定需要优化的查询后,可以利用生成的报告迅速的检查查询的执行情况。

    2.剖析单条查询

    实际应用中有三个方法:SHOW SATUS, SHOW PROFILE, 检查慢查询日志的条目。

    2.1 使用 SHOW PROFILE

    当一条查询提交给服务器时,此工具会记录剖析信息到一张临时表,并且给查询赋予一个从1开始的整数标识符。

    剖析报告会给出查询执行的每个步骤及其花费的时间。

    2.2 使用SHOW STATUS

    SHOW STATUS 返回了一些计数器,既有服务器级别的全局服务器,也有基于某个连接的会话级别的计数器。可以显示某些活动如读索引的频繁程度,但无法给出消耗了多少时间。用于猜测哪些操作操作代价较高或者消耗的时间较多。

    2.3使用慢查询日志

    包含了 SHOW PROFILE 和 SHOW STATUS 所有的输出,还有更多信息。

    2.4 使用Performance Schema

    3.使用性能剖析

    慢查询日志中记录到有查询异常慢的问题,可能是系统中有其他东西消耗了资源,也可能是某种类型的锁或者争用阻塞了查询的进度。

    4.诊断间歇性问题

     一些可能的情况:

    1.从运行得很慢得外部服务来获取数据

    2.缓存中的一些重要条目过期,导致大量请求落到MySQL以重新生成缓存条目。

    3.DNS查询偶尔会有超时现象

    4,由于互斥锁争用或内部删除缓存算法的效率太低时,MySQL查询缓存有时导致服务由短暂的停顿

    判断是单条查询问题还是服务器问题

  • 相关阅读:
    信号、事件与状态
    信号处理机制的范式分析
    三寒两倒七分饱
    血热的人吃什么好
    消息、信息与信号的区别
    Busy waiting
    事件的处理机制:单播、广播、链式路由、职责链。
    事件处理:pull与push
    响应式编程
    类、组件、人机交互
  • 原文地址:https://www.cnblogs.com/earsonlau/p/11370225.html
Copyright © 2011-2022 走看看