`

mysql性能问题定位

 
阅读更多

 

mysql性能问题定位

  使用mysql作为基础数据库的应用,可能会遇到一些数据库方面的性能问题,我们可以通过一些方法进行问题定位。以下介绍可以定位性能问题的四种方法,欢迎拍砖。

一、开启慢查询日志:

记录执行查询时间大于long_query_time的sql,long_query_time默认为2s;

show variables like ‘%slow%’

 

 

得到图中所示信息,这里可以查看到慢查询日志是否开启,慢查询日志文件的存放目录。

开启慢查询日志的方法:

1、vi  /etc/my.cnf(这个是mysql的默认读取配置文件目录,一般会将my.cnf文件放在这下面)

[mysqld]下添加

slow_query_log=ON

long_query_time=1(sql语句执行时间超过该参数值,则会打印在慢查询日志中),默认执行时间超过2s的sql会打印在慢查询日志中。

修改了my.cnf中的配置项,需要重启数据库。

2、不重启数据库的情况下,执行 set global slow_query_log=ON,可以开启慢查询日志。

开启慢查询日志后,跟踪慢查询日志文件中的慢查询sql,再具体分析,通过调整sql写法,或者添加正确的索引,可以看到意想不到的性能效果。

二、分析慢查询sql:

1、Explain 打印执行计划

执行的selcet语句前面加上explain,可以告诉你mysql如何执行该条语句。

 

这里需要额外注意type、key、rows 、extra列展示的内容。

其中,

Type=all,表示使用的是全表扫描,在数据量大的情况下,全表扫描是非常耗性能的,这个需要特别注意;

Type=index,表示使用索引扫描,只会遍历索引树;

Type=range,表示使用索引范围扫描,常见于between 、>、<等的查询。

Type=ref,非唯一性索引扫,返回匹配某个单独值得所有行

Type=eq_ref 唯一性索引扫描,对于每个索引键,表中只有一条记录与之匹配

Type=const/system   读常量,最多只会有一条记录匹配,由于是常量,实际上只须要读一次

Type=null 不需要扫描表

访问类型从上到下由差变为最好。

key表示select中使用到的索引,如果为null,表示没有使用索引,从查询效率上讲,使用索引比不使用索引快。但并不是所有的都要加索引,索引也存在不足,这里就不详解。

rows表示执行该条sql所需要扫描的行数,这个没有绝对值可参考,一般来说越小越好,如果100万数据量的数据库,rows是70万,通过这个可以判断sql的查询性能很差,如果100万条数据量的数据库,rows是1万,从我个人的角度,还是能接受的。

extra

一些十分重要的额外信息,重点关注出现关键字:

Using filesort:当Query 中包含order by 操作,而且无法利用索引完成排序操作的时候,MySQL Query Optimizer 不得不选择相应的排序算法来实现。

Using temporary:在某些操作中必须使用临时表时,在 Extra 信息中就会出现Using temporary ,主要常见于 GROUP BY 和 ORDER BY 等操作中

当 执行计划Extra 出现Using filesort 、Using temporary 时,可以考虑是否需要进行sql优化和调整索引,最后再调整my.cnf 中与排序或者临时表相关的参数,如sort_buffer_size或者tmp_table_size.

2、show full processlist 查看哪条sql一直占用进程

 

Time表示执行当前操作所耗费的时间,单位为秒(s);
State表面当前线程的状态,Info表示正在执行的操作;
这里如果发现time值比较大,state一直处于一个状态,那么从Info中我们可以获得耗时长的操作,再具体分析;
注意观察State中出现关于lock关键字的状态。
这个命令可以很直观地看到正在执行的sql,及其当前状态,操作比较方便。

3、show profile 定位sql在数据库中资源占用情况(注意,一个是show profiles,一个是show profile)

Show profiles主要展示在当前会话中,profiling_history_size条sql执行的时间、query_id,默认为15条,最大为100条,不能设为0。
SHOW VARIABLES LIKE ‘%profiling_history_size%’

 

SHOW VARIABLES LIKE ‘%profiling’或者select @@profiling 查看profiling是否开启

 

 

set profiling=1 开启profiling

执行一条sql

 

 

 

 

再执行show profiles,会把最近执行的sql给展示出来,

 

 

从图中找到刚刚执行的sql,query_id是120,执行时间是0.00079725s

如果我们想看sql在各个阶段所消耗时间,则使用如下

SHOW PROFILE FOR QUERY 120

 

 

 

 

 

 

 

 

各个阶段所消耗时间一目了然。

show profile具体写法为 Show profile TYPE for query n,n为query_id,TYPE可写可不写

TYPE的取值有为ALL、BLOCK IO、CONTEXT SWITCHES、CPU、IPC、MEMORY、PAGE FAULTS、SOURCE、SWAPS

如上述例子中

SHOW PROFILE CPU,MEMORY FOR QUERY 120

 

 

 

 

 

不加for query n这句,则展示执行show profile之前执行过一条语句。

4、Mysqladmin 查询整个数据库的状态

在mysql的bin目录下,执行

./mysqladmin -u用户名 -p密码 proc stat

 

 

这里添加proc就如同show full processlist功效

stat展示当前数据库的状态

threads 表示当前线程数,Opens 当前打开的表数目,Queries per second 每秒执行的查询数,数据库性能越好,这个值就越高

分享到:
评论

相关推荐

    MySQL性能提升

    MySQL性能提升是一个关键议题,它涉及到多个方面,包括对性能的认识、问题的定位、性能改进、并发控制机制以及性能测试等。在这些方面,楼方鑫等专家分享了许多经验和见解。 首先,讨论了性能提升的必要性和复杂性...

    Mysql性能优化教程

    MySQL性能优化是数据库管理中的关键环节,特别是在高并发场景下,优化MySQL的性能对于提升系统整体效率至关重要。本教程将深入探讨MySQL性能优化的各个方面,帮助你理解并实践有效的优化策略。 首先,我们来了解**...

    百度mysql性能优化ppt

    6. **监控与调优工具**:介绍如何使用Performance Schema、MySQL Tuner、Percona Toolkit等工具进行性能监控和问题定位。 7. **源码分析**:深入MySQL源码,理解其内部处理流程,为更深层次的优化提供理论基础。 8...

    数据库性能问题定位

    每个因素都可能成为性能瓶颈,因此定位问题的关键在于全面而深入的分析。 1. **监控与日志分析**:在开始定位问题前,我们需要收集数据库的运行日志和性能监控数据。大多数数据库系统都有内置的监控工具,如MySQL的...

    mysql性能优化教程.pdf (by caoz)

    ### MySQL性能优化知识点详解 #### 一、背景及目标 - **目的**:厦门游家公司(4399.com)为了提升员工技能水平,制定了这份MySQL性能优化教程,旨在为已有一定MySQL使用经验的工程师提供实战指导。 - **适用场景*...

    高性能Mysql mysql书籍

    《高性能MySQL》是一本经典的数据库技术专著,深入探讨了MySQL的高性能优化、备份、恢复、复制和安全性等方面,对于数据库管理员、开发人员以及对MySQL性能有高要求的技术人员来说,是一本不可或缺的参考书。...

    mysql高性能---mysql数据库的性能调优

    9. **监控与调优工具**:使用如Percona Toolkit、pt-query-digest等工具,实时监控MySQL性能,定位并解决性能瓶颈。 10. **架构设计**:考虑读写分离、分布式数据库、缓存技术(如Redis)等架构设计,可以进一步...

    MySQL性能调优与架构设

    MySQL性能调优与架构设计是数据库管理领域中的一个重要主题,涉及到如何优化数据库系统以提高查询速度、提升系统稳定性以及确保高可用性。本篇将详细探讨MySQL在性能优化和架构设计方面的关键知识点。 1. **索引...

    MySQL性能调优与架构设计

    3. **监控与告警**:实时监控MySQL的性能指标,如QPS、TPS、延迟等,一旦发现问题,及时发出告警,快速定位和解决问题。 4. **备份与恢复**:定期备份数据库,确保在灾难情况下可以快速恢复数据。使用工具如...

    MySQL性能调优与架构设计-简朝阳

    总的来说,《MySQL性能调优与架构设计》是一本全面讲解MySQL数据库优化和架构设计的书籍,它将帮助读者深入理解MySQL的工作原理,掌握提升数据库性能的关键技巧,并具备解决实际问题的能力。无论你是初级开发者还是...

    mysql性能优化综述

    ### MySQL性能优化综述 MySQL作为一款广泛使用的开源关系型数据库管理系统,在许多应用场景中都需要针对其性能进行优化。本文将从几个关键方面详细介绍如何优化MySQL的性能。 #### 1. 最底层优化 - **参数优化**:...

    MySQL性能瓶颈排查定位实例详解

    本文实例讲述了MySQL性能瓶颈排查定位的方法。分享给大家供大家参考,具体如下: 导读 从一个现场说起,全程解析如何定位性能瓶颈。 排查过程 收到线上某业务后端的MySQL实例负载比较高的告警信息,于是登入服务器...

    Mysql性能优化教程.doc

    ### MySQL性能优化教程知识点概述 #### 一、MySQL执行优化 **1.1 背景及目标** - **背景**: 针对已具备一定MySQL使用经验的工程师,特别是适用于高并发、海量数据处理的互联网环境。 - **目标**: 通过对MySQL性能...

    高性能mysql源码.rar

    深入学习MySQL源码,不仅能帮助我们理解数据库内部运作机制,还可以让我们更好地针对特定场景进行定制化开发和性能优化,解决实际问题。例如,通过源码分析,开发者可以了解SQL执行的详细过程,优化查询语句;或者...

    mysql性能优化总结

    MySQL性能优化是一个涵盖广泛的主题,涉及数据库设计、SQL查询优化、索引策略等多个方面。以下是对标题和描述中提到的一些关键知识点的详细说明: 1. **表的优化**: - **定长与变长字段的分离**:将定长字段(如...

Global site tag (gtag.js) - Google Analytics