MySQL慢查询的可能缘由及解决思路

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

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

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

 

1.剖析服务器负载工具

 

1.1捕获慢查询性能

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

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

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

 

1.2分析查询日志orm

使用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查询缓存有时致使服务由短暂的停顿

 

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

相关文章
相关标签/搜索