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

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

原文地址:https://www.cnblogs.com/earsonlau/p/11370225.html

时间: 2024-08-08 19:57:50

MySQL慢查询的可能原因及解决思路的相关文章

mysql数据库死锁的产生原因及解决办法

这篇文章主要介绍了mysql数据库锁的产生原因及解决办法,需要的朋友可以参考下 数据库和操作系统一样,是一个多用户使用的共享资源.当多个用户并发地存取数据 时,在数据库中就会产生多个事务同时存取同一数据的情况.若对并发操作不加控制就可能会读取和存储不正确的数据,破坏数据库的一致性.加锁是实现数据库并 发控制的一个非常重要的技术.在实际应用中经常会遇到的与锁相关的异常情况,当两个事务需要一组有冲突的锁,而不能将事务继续下去的话,就会出现死锁,严 重影响应用的正常执行. 在数据库中有两种基本的锁类型

mysql保存中文乱码的原因和解决办法

当你遇到这个mysql保存中文乱码问题的时候,期待找到mysql保存中文乱码的原因和解决办法这样一篇能解决问题的文章是多么激动人心. 也许30%的程序员会选择自己百度,结果发现网友已经贴了很多类似mysql 中文乱码.php mysql 中文乱码.mysql5.5中文乱码.mysql 乱码.mysql乱码问题.mysql jsp 乱码.mysql jdbc 乱码.mysql 查询乱码.mysql 导入数据乱码等一系列问题,到底哪个是自己要找的能解决自己问题的呀?15%的程序员一看就懵了,剩下15

关于MySQL错误 2005 - Unknown MySQL server host 'localhost' (0) 原因及解决方法

今天在外面开navicat for mysql的时候,怎么也连不上自己本机上的数据库,一直显示2005 - Unknown MySQL server host 'localhost' (0): 错误代码的意思即无法连接上主机localhost.可能是由于没有联网造成的:于是将连接属性里的 '主机名或IP地址' 改成127.0.0.1即回送地址后,就可以连接上了.上百度搜了下,navicat里的一些功能应该是要联网的,而localhost是需要DNS解析后才会是127.0.0.1的,所以才会导致这

navicat报错2005 - Unknown MySQL server host 'localhost' (0) 原因及解决方法

报错原因:没有连接互联网,用navicat连接本地mysql数据库,连接属性ip为localhost. 解决办法:将ip改为127.0.0.1即可.localhost是需要DNS解析后才会是127.0.0.1的. navicat报错2005 - Unknown MySQL server host 'localhost' (0) 原因及解决方法 原文地址:https://www.cnblogs.com/Y-zhiwei/p/8458238.html

MySQL主从同步延迟的原因及解决办法

由于历史原因,MySQL复制基于逻辑的二进制日志,而非重做日志.多次被问到何时MySQL能支持基于物理的复制,其实这就看MySQL各位大佬的想法.上次和赖老师脑暴,倏地说道:MySQL会不会来个基于Paxos的redo复制? 物理复制的真正好处不在于正确性,因为基于ROW格式的日志复制也已能完全保证复制的正确性.由于物理日志的写入是在事务执行过程中就不断写入,而二进制日志的写入仅仅在事务提交时.因此物理日志的优势如下所示: 复制架构下,大事务日志提交速度快: 复制架构下,主从数据延迟小: 假设执

MySQL Got fatal error 1236原因和解决方法【转】

一 前言  MySQL 的主从复制作为一项高可用特性,用于将主库的数据同步到从库,在维护主从复制数据库集群的时候,作为专职的MySQL DBA,笔者相信大多数人都会遇到“Got fatal error 1236 from master when reading data from binary log” 这类的报错/报警.本文整理了常见的几种 error 1236 报错,并给出相应的解决方法,有所不足之处,当然也希望各位读者朋友指正. 二 常见的error 1236 报错2.1 logevent

mysql命令行以及mysql workbence查询结果中文乱码的解决方法

最近正在学习mysql,安装环境是windows server 2003 32位操作系统+mysql 5.1.47同时也安装了mysql命令行以及mysql workbench这里是test数据库create  table fortest(empno int auto_increment,empname nvarchar(20) not null,constraint pk_fortest primary key(empno))default charset=utf8;然后插入了一条数据set

【性能优化】RDS MySQL IOPS 使用率高的原因及解决方法

[1. 问题描述] [2. 查找原因] [3. 解决问题] 本文网址[tom-and-jerry发布于2017-05-20 18:46] http://www.cnblogs.com/tom-and-jerry/p/6882857.html

OracleDBconsoleorcl服务无法启动的原因及解决思路

被这个OracleDBconsole服务无法启动的问题折磨了两个星期了,今天很幸运,在网上无意间看到了一位大侠的思路,虽然错误的情况并不完全相同,但他的思路完全可以搬过来用.环境:Windows XP, 装Oracle 11g,装完数据库软件.新建一个数据库(数据库的SID为orcl20120825),但是无法进入网页版的企业管理器(EM),提示是“403,服务器拒绝了您的访问请求”.因为数据库的ID是orcl20120825,因此对应的Windows服务名为OracleDbConsoleorc