`
zhanghteye
  • 浏览: 51206 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

MySQL调优

阅读更多

为什么要进行优化?

  • 避免由数据库链接timeout产生页面5xx的错误
  • 避免由于慢查询造成页面无法加载
  • 避免由于阻塞造成数据无法提交
  • 优化用户体验

可以从哪几个方面进行数据库优化?

imageimage
从图中可以看出,SQL及索引的优化是最重要的,成本最低效果最好。
下面分别来看看如何优化SQL和索引。

SQL优化

慢查询日志配置

可以使用慢查询日志对有效率问题的SQL进行监控。下面是关于如何开启慢查询日志和慢查询日志的一些配置。

1
2
3
4
5
show variables like 'slow_query_log'; //查看是否开启了慢查询
set global slow_query_log_file='/home/mysql/sql_log/mysql-slow.log'; //设置慢查询日志的位置
set global log_queries_not_using_indexes=ON; //是否记录未使用索引的查询
set global long_query_time=1;//设置记录超过多长时间的SQL语句
set global slow_query_log=ON;//设置慢查询日志是否开启

 

慢查询日志的格式:
慢查询日志的格式慢查询日志的格式
详细看一下每一行都是什么意思。
查询的执行时间 Time:140606 12:30:17
执行SQL的主机信息 User@Host:root[root] @ localhost []
SQL的执行信息 Query_time: 0.000024 Lock_time:0.000000 Rows_sent:0 Rows_examined: 0
SQL执行时间 SET timestamp=1402389328
SQL的内容:show tables

分析慢查日志的工具

1.mysqldumpslow
可以使用MySQL自带的慢查询分析工具mysqldumpslow,可以通过mysqldumpslow -h来查看具体的使用方法。
eg:mysqldumpslow -t 3 /path/to/mysql-slow-query.log | more
上面的命令会列出查询时间top 3的SQL语句,具体格式如下图,会列出SQL执行的次数,SQL来执行的时间,锁定的时间,发送的函数,由谁在哪个服务器上执行的和具体的SQL内容。
mysqldumpslow格式mysqldumpslow格式
mysqldumpslow是比较常用的慢查询日志分析工具,但是分析结果包含的信息比较少,对于SQL优化来说可能还不太够。下面看看另一种分析工具。

2.pt-query-digest
pt-query-digest支持将分析结果保存到文件或数据表中。

1
2
3
4
5
6
7
输出到文件
pt-query-digest slow.log > slow_log.report
输出到数据库表
pt-query-digest slow.log -review \
h=127.0.0.1,D=test,p=root,P=3306,u=root,t=query_review \
--creat-reviewtable \
--review-history t=hostname_slow

 

通过pt-query-digest --help可以查看具体的使用方式。
eg: pt-query-digest /home/mysql/data/mysql-slow.log | more
通过上面的命令,会列出慢查询日志的分析结果,分为三个部分。
第一部分中包含日志中有多少个SQL,多少个不同的SQL,SQL执行的时间范围,总的执行时间,最短的执行时间,最长的执行时间,平均执行时间,总锁定时间,总发送行数,总检索行数等等。
pt-query-digest格式pt-query-digest格式
第二部分包含关于 表和执行语句的统计,可以看到哪个表的哪个操作的实行时间是最多的,也可以看到对应的响应时间和调用次数。
pt-query-digest格式pt-query-digest格式
第三部分就是具体的SQL的分析,包括对应语句执行时间,锁定时间,发送行数,检索行数等等。
pt-query-digest格式pt-query-digest格式

定位有问题的SQL

通过上面的慢查询日志分析我们可以定位需要优化的SQL,通常有三种:

  • 查询次数多且每次查询占用时间长的SQL:通常为pt-query-digest分析的前几个查询。
  • IO大的SQL:注意pt-query-digest分析中的Rows examine项
  • 未命中索引的SQL: 注意pt-query-digest分析中Rows examine和Rows Send的对比。

通过Explain查询和分析SQL的执行计划

可以通过Explain查询SQL的执行计划,例子如下:
ExplainExplain
explain返回的各列的含义:

列 含义
table 显示查询是关于哪个表的  
type 很重要的列,显示连接使用了何种类型。从最好到最差的连接类型为const、eq_reg、ref、range、index和ALL  
possible_keys 显示可能应用在这张表中的索引。如果为空,没有可能应用的索引  
key 实际使用的索引。如果为NULL,则没有使用索引  
key_len 使用的索引的长度。在不损失精确性的情况下,长度越短越好  
ref 显示索引的哪一列被使用了  
rows MYSQL认为必须检查的用来返回请求的行数  
extra 当这一列的值是Using filesort或Using temporary时,说明查询需要优化了

索引优化

如何选择合适的列来建立索引

  • 在where从句,group by从句,order by从句,on从句中出现的列
  • 索引的字段越小越好
  • 在建立联合索引时,离散度大的列放大联合索引的前面

如何维护和优化索引

要避免重复及冗余索引,重复索引是指相同的列以相同的顺序建立的同类型的索引。冗余索引是指多个索引的前缀列相同,或是在联合索引中包含了主键的索引。
可以使用pt-duplicate-key-checker工具可以检查重复及冗余索引。
同时还要注意及时删除由于业务变更不再使用的索引。目前MySQL中还没有记录索引的使用情况,但在PerconMuSQL和MariaDB中可以通过INDEX_STATISTICS表来查看哪些索引未使用,在MySQL中目前只能通过慢查询日志配合pt-index-usage工具来进行索引的使用情况的分析。

转自:http://yemengying.com/2016/05/24/mysql-tuning/#通过Explain查询和分析SQL的执行计划

分享到:
评论

相关推荐

    Mysql调优.xmind

    整理的mysql调优资料,适合刚入门的以及面试吹牛逼用,有些地方比较细致,有些地方比较粗糙,主要是一些理论,以及重要的知识点

    mysql调优文档集合

    mysql调优文档集合 mysql_配置详解.docx MySQL性能调优文档.pdf MySQL性能调优与架构设计--全册.pdf MySQL性能优化概述.pdf Mysql性能优化教程.doc mysql中的内存使用.pdf 如何处理大数据量的查询.doc 深入浅出MySQL...

    Linux下的MySQL调优

    ### Linux下的MySQL调优 #### 一、调优概述 MySQL作为一款广泛使用的数据库管理系统,在Linux环境下进行调优能够显著提高其性能与稳定性。本文将详细介绍Linux环境下MySQL调优的具体步骤与方法,帮助读者理解并...

    MySQL调优技术分享PPT.pptx

    【主 题】 MySQL调优技术 【主要内容】B+树介绍、单表性能调优、多表性能调优以及SQL语句效率对比。 【应用场景】1、B+树作为MySQL索引底层实现的数据结构,需要我们了解其工作机制; 2、从创建表要注意的点以及SQL...

    mysql调优与性能设计

    本资源"mysql调优与性能设计"提供了超过300页的高清内容,旨在帮助读者深入理解如何优化MySQL的性能并进行有效的架构设计。 在MySQL性能调优方面,首先我们需要关注的是查询优化。这包括了编写高效的SQL语句,避免...

    MySQL调优,收录MySQL调优

    MySQL调优,收录MySQL调优

    MySql调优.pdf

    MySQL数据库调优涉及多个方面,包括数据库架构、系统架构、常用工具以及存储引擎的理解。以下是对这些知识点的详细说明: 1. 数据库架构与调优: - **日志文件**:MySQL的日志系统对于故障恢复和复制至关重要。...

    MySQL调优脚本

    MySQL调优脚本,下载后可直接运行。 

    MySQL调优讨论:原理 优化 技巧

    本篇文章将深入探讨MySQL调优的原理、优化策略以及实用技巧,旨在帮助你提升数据库性能,确保系统的稳定性和效率。 一、MySQL调优原理 1. **查询优化**:查询优化是数据库调优的核心,它涉及到SQL语句的编写、索引...

    精通mysql调优002

    《精通MySQL调优002》 MySQL,作为全球最流行的开源关系型数据库管理系统,以其高效、稳定和灵活的特点在互联网行业中广泛应用。本教程将深入探讨MySQL的性能优化技巧,帮助开发者提升数据库运行效率,降低系统瓶颈...

    Linux下的MySQL调优.ppt

    【Linux下的MySQL调优】 MySQL调优是提升数据库性能的关键步骤,尤其在Linux环境下,由于其开源、灵活性和广泛的应用,MySQL的优化显得尤为重要。调优的目的多种多样,包括满足老板的要求、解决客户投诉、应对...

    Mysql 调优详解与实践案例

    【MySQL调优详解与实践案例】 在数据库管理中,MySQL调优是一项至关重要的任务,它涉及到提高查询效率、优化数据库结构以及确保系统稳定运行。在MySQL中,`EXPLAIN`是一个强大的工具,可以帮助我们理解查询执行计划...

    Mysql一些调优资料收集

    MySQL调优是一个涉及多个层面的过程,旨在提升数据库服务器的性能,包括硬件升级、服务器设置优化以及查询优化。这里我们将深入探讨后两者,因为它们对于大多数系统来说更具可操作性。 首先,MySQL服务器调优主要是...

    MySQL调优文件 txt

    MySQL调优文件 txt

    MySQL调优:从问题到解决的具体步骤和案例分析

    MySQL调优是一个重要的过程,旨在改善数据库系统的性能和响应时间,尤其在处理大量数据和高并发访问时。本文将深入探讨这一主题,提供具体步骤、案例分析和解决方案。 首先,发现问题至关重要。这包括监控MySQL的...

    mysql调优-以5.6版本为例-详细笔记文档总结

    MySQL调优-以5.6版本为例-详细笔记文档总结 MySQL调优是指对MySQL数据库服务器的优化,以提高其性能、稳定性和安全性。在本文中,我们将讨论MySQL 5.6版本的调优,包括字符集设置、存储引擎设置、应用层面优化、...

Global site tag (gtag.js) - Google Analytics