`

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性能监控工具-MONyog-5.6.6-3安装文件及其破解

    MONyog MySQL数据库监控管理工具被称作“MySQL DBA in a box'”,它可以帮助MySQL DBA管理调优更多的服务器并在出现严重性能问题前找到症结所在。  MONyog可以动态地监控企业数据库环境,并针对MySQL系统安全性、...

    mysql性能调优思路1

    mysql性能调优思路定位慢sql语句启动慢查询,mysqldumpslow分析分析慢sql语句explain执行计划分析语句优化创建最合理的索引避免模糊查询=

    MySQL管理之道 性能调优、高可用与监控.part2.rar

    3.1 影响mysql性能的因素 72 3.2 系统性能评估标准 73 3.2.1 影响linux服务器性能的因素 73 3.2.2 系统性能评估指标 74 3.2.3 开源监控和评估工具介绍 76 3.3 故障与处理 79 3.3.1 连接数过多导致程序连接...

    MySQL数据库运维.pdf

    而与此同时,MySQL 数据库规模成倍的增长, 如何快速定位问题,解决问题?如何规模化、自动化运维?如何进行优化,提高 MySQL 数据库的性能?如何架构部署 MySQL 集群、架构跨 IDC 的分布式 MySQL 集群?如何实现 ...

    mysql经典性能查询SQL

    mysql经典性能查询SQL,提高效率不止10倍,快速定位问题,便于DBA定位问题,减少排查时间,便于初学者学习,提供了很多排查方法

    高可用MySQL:构建健壮的数据中心

    《高可用MySQL:构建健壮的数据中心》由MySQL开发团队亲自执笔,定位于解决MySQL数据库的常见应用瓶颈,在保持MySQL的持续可用性的前提下,挖潜各种提高性能的解决方案。《高可用MySQL:构建健壮的数据中心》分为三...

    高可用MySQL

    本书由mysql 开发团队亲自执笔,定位于解决mysql 数据库的常见应用瓶颈,在保持mysql 的持续可用性的前提下,挖潜各种提高性能的解决方案。本书分为三个部分。第一部分讲述mysql 复制,包括高可用性和横向扩展,第二...

    基于Python实现用于实时监控和分析 MySQL 服务器的性能指标和相关信息工具源码

    它可以帮助 DBA(数据库管理员)和开发人员定位和解决数据库性能问题 1、实时监控:mysqlstat 可以实时监控 MySQL 服务器的 QPS(每秒查询数)、TPS(每秒事务数)以及网络带宽使用情况等指标。 2、查询分析:它可以...

    Yearning Mysql SQL审核平台.rar

    编码人员根据业务需求编写对应模块代码,经由测试人员进行压力测试等性能测试后发现,该模块性能达不到预期指标,结果分析得出是编码人员对数据源交互的SQL语句缺陷,开发人员通常想着先定位问题,然后反馈给DBA。...

    mysql网络数据库指南(中文版) part1

    2.3.3 性能与效率问题 85 2.3.4 希望对值进行什么样的比较 87 2.3.5 计划对列进行索引吗 87 2.3.6 列类型选择问题的相互关联程度 88 2.4 表达式求值和类型转换 88 2.4.1 撰写表达式 89 2.4.2 类型转换 94 第3...

    [高可用MySQL:构建健壮的数据中心.].查理斯·贝尔.扫描版.part1

    《高可用MySQL:构建健壮的数据中心》由MySQL开发团队亲自执笔,定位于解决MySQL数据库的常见应用瓶颈,在保持MySQL的持续可用性的前提下,挖潜各种提高性能的解决方案。《高可用MySQL:构建健壮的数据中心》分为三...

    [高可用MySQL:构建健壮的数据中心.].查理斯·贝尔.扫描版.part2

    《高可用MySQL:构建健壮的数据中心》由MySQL开发团队亲自执笔,定位于解决MySQL数据库的常见应用瓶颈,在保持MySQL的持续可用性的前提下,挖潜各种提高性能的解决方案。《高可用MySQL:构建健壮的数据中心》分为三...

    mysql的安装包,安装方法,主从复制,性能分析,慢语句查询

    此包包含mysql的安装包5.6,安装方法,主从复制方法,慢语句查询方法,性能定位方法

    MySQL limit性能分析与优化

    结论:rows 相同条件下,offset 值越大,limit 语句性能越差 二、测试 执行测试: 5750000 条数据 sql 1 执行时间: sql 6执行时间: 三、优化 方式一:可根据主键ID等其他索引字段定位到数据位置,然后使用 limit 0...

    最新mysql面试题整理大厂必备,你能答对几个?

    24.MySQL 性能指标都有哪些?如何得到这些指标? 25.MySQL 中的重要日志分为哪几个? 26.redo log 和 binlog 有什么区别? 27.慢查询日志的获取方式有哪些? 28.如何定位慢查询? 29.MySQL 中常见的读写分离方案...

    MySQL进阶学习需要掌握的具体内容解析,MySQL数据库如何使用和优化索引.docx

    索引是MySQL中一个重要的概念,它可以显著提高查询性能。因此,在设计和使用MySQL数据库时,了解如何使用和优化索引非常重要。 一个索引是一种数据结构,可以快速定位和访问表中的数据。MySQL支持多种类型的索引,...

    高可用MySQL_构建健壮的数据中心.pdf

    高可用MySQL_构建健壮的数据中心 本书是"Mysql High Availability"的中文翻译版,...本书由Mysql开发团队亲自执笔,定位于解决Mysql数据库的常见应用瓶颈,在保持Mysql的持续可用性的前提下,挖潜各种体高性能的解决方案

Global site tag (gtag.js) - Google Analytics