一、数据库服务器优化步骤

下面流程展示了优化的步骤,可以理解为三个步骤:慢查询、EXPLAIN和SHOW PROFILING。


二、查看系统性能参数

在MySQL中,可以使用SHOW STATUS语句查询一些MYSQL数据库服务器的性能参数、执行频率。
SHOW STATUS语句语法如下:

SHOW [GLOBAL | SESSION] STATUS LIKE '参数';

一些常用的性能参数如下:

  • Connections:连接MySQL服务器的次数。
  • Uptime:MySQL服务器的上线时间。
  • Slow_queries:慢查询的次数。
  • Innodb_rows_read:SELECT查询返回的行数。
  • Innodb_rows_inserted:执行INSERT操作插入的行数。
  • Innodb_rows_updated:执行INSERT操作更新的行数。
  • Innodb_rows_deleted:执行INSERT操作删除的行数。
  • Com_select:查询操作的次数。
  • Com_insert:插入操作的次数。对于批量插入的INSERT操作,只累加一次。
  • Com_update:更新操作的次数。
  • Com_delete:删除操作的次数。

这里的查询使用了LIKE模糊查询,所以这些参数不用记得太死,比如执行:

SHOW GLOBAL STATUS LIKE 'Innodb_rows_%'

可以一次查询出增删改查的行数:


三、统计SQL的查询成本:last_query_cost

一条SQL查询语句在执行前需要确定查询计划,如果存在多种执行计划的话,MySQL会计算每个执行计划所需要的成本,从中选择成本最小的一个作为最终执行的执行计划。
如果我们想要查看某条SQL语句的查询成本,可以在执行完这条SQL语句之后,通过查看当前会话中的last_query_cost变量值来得到当前查询的成本。它通常也是我们评价一个查询的执行效率的一个常用指标。这个查询成本对应的是SQL语句所需要读取的页数量。

SHOW STATUS LIKE 'last_query_cost'

四、开启慢查询日志

MySQL的慢查询日志,用来记录在MySQL中响应时间超过阈值的语句,具体指运行时间超过long_query_time值的SQL,则会被记录到慢查询日志中。long_query_time的默认值为10,意思是运行10秒以上(不含10秒)的语句,认为是超出了我们的最大忍耐时间值。
它的主要作用是,帮助我们发现那些执行时间特别长的SQL查询,并且有针对性地进行优化,从而提高系统的整体效率。当我们的数据库服务器发生阻塞、运行变慢的时候,检查一下慢查询日志,找到那些慢查询对解决问题很有帮助。

1. 开启slow_query_log

在使用前,我们需要先查看慢查询是否已经开启

show variables like 'slow_query_log'


慢查询默认设置为OFF,可以在配置文件my.cnf 或者my.ini设置永久开启,但不建议这样做,因为慢查询扫描毕竟会消耗性能,我们只需要在每次使用时临时打开即可。

set global slow_query_log = 'ON'

2. 修改long_query_time阈值

默认阈值为10s,可以根据自己业务修改阈值

show variables like 'long_query_time'

--设置阈值为1s,设置成功后查询阈值发现并未修改成功,这时候会需要重新开启一个会话才会生效
set global long_query_time = 1--也可以在当前会话中,在执行下面的语句,阈值会在当前会话生效
set long_query_time = 1

3. 查看慢查询数据

查询当前系统中有多少条慢查询记录

show global status like 'slow_queries'


可以看到当前超过1s的查询SQL慢查询有2条记录,没有记录可以自己创造查询记录。

4. 慢查询日志分析

在生产环境中,如果要手工分析,查找、分析SQL,显然是个体力活,MySQL提供了日志分析工具 mysqldumpslow,因为我自己的 linux服务器有点问题,这里就不详细说明了。
慢查询每次会产生log文件,只需要找到对应的log文件,即可分析慢查询,log文件的记录位置默认是mysql数据文件存储的位置,日志文件名称查询:

show variables like 'slow_query_log_file'

可以修改文件记录位置以及名称:

set global slow_query_log_file = 'slow_query.log'

查看log文件 “slow_query.log”


可以看到三条慢查询记录信息。可以根据记录的SQL语句以及SQL执行时间等信息分析SQL。


五、查看SQL执行成本:SHOW PROFILE

Show Profile是MySQL提供可以用来分析当前会话中SQL都做了什么,执行的资源消耗情况的工具,可用于SQL调优的测量。默认处于关闭的状态,并只保存近15次的运行结果。

1. 开启SQL执行成本查询

查看是否已开启

show variables like 'profiling'

开启SQL执行成本查询

set profiling = 'ON'

2. 查看执行成本

查询最近一次SQL的执行成本情况:

show profile


可能最近执行多个SQL语句,最多保存最近15次运行结果,想其中的一条执行的成本,查询已记录的最近15次SQL语句:

show profiles


这时候可以根据指定的Query_ID来查询对应SQL语句的执行成本,比如查询Query_ID=16对应的SQL语句 "select * from person"的执行成本:

show profile for query 16

3. 在Show Profile中查看不同部分的开销

show proflie 不仅可以查执行成本,还可以查看io、block io等开销

show profile cpu,block io


show profile的常用查询参数:

参数 说明
ALL 所有的开销信息
BLOCK IO 块IO开销
CONTEXT SWITCHES 上下文切换开销
CPU CPU开销信息
IPC 发送和接收开销信息
MEMORY 内存开销信息
PAGE FAULTS 页面错误开销信息
SOURCE 和Source_function、Source_file、Source_line相关的开销信息
SWAPS 交换次数开销信息

六、分析查询语句:EXPLAIN

请阅读文章 MySQL性能分析 二

MySQL性能分析 一相关推荐

  1. MySQL性能分析及explain的使用

    MySQL性能分析及explain用法的知识是本文我们主要要介绍的内容,接下来就让我们通过一些实际的例子来介绍这一过程,希望能够对您有所帮助. 1.使用explain语句去查看分析结果 如explai ...

  2. MySQL 性能分析 之 联合索引(复合索引)实践分析

    MySQL 性能分析 之 联合索引(复合索引)实践分析 作为开发者,大家都知道,一个服务器.一个数据库的性能是项目的重中之重,后台架构.写法与数据库设计的好坏往往直接影响到整个项目的性能. 索引:是当 ...

  3. 死磕数据库系列(三十三):MySQL 性能分析与相关工具的使用

    点关注公众号,回复"1024"获取2TB学习资源! 今天我将详细的为大家介绍 MySQL 性能分析以及相关工具使用的相关知识,希望大家能够从中收获多多!如有帮助,请点在看.转发支持 ...

  4. mysql 性能分析_十大MySQL性能分析工具汇总!专治MySQL性能瓶颈

    前言 MySQL 数据库最常见的两个瓶颈是CPU和I/O的瓶颈.CPU在饱和的时候一般发生在数据装入内存或从磁盘上读取数据时候,磁盘I/O瓶颈发生在装入数据远大于内存容量的时候. MySQL数据库性能 ...

  5. 011 MySQL性能分析

    一.性能分析的思路 1.首先需要使用[慢查询日志]功能,去获取所有查询时间比较长的SQL语句: 2.其次[查看执行计划]查看有问题的SQL的执行计划 explain: 3.最后可以使用[show pr ...

  6. MySQL性能分析工具的使用:慢查询日志、EXPLAN的使用、分析优化器执行计划:trace、MySQL监控分析视图-sys schema

    文章目录 1.数据库服务器的优化步骤 2.查看系统性能参数 2.1 语法 2.2 常用参数 3.统计SQL的查询成本:last_query_cost 4.定位执行慢的SQL:慢查询日志 4.1 慢查询 ...

  7. mysql 性能分析 命令_MySQL中使用SHOW PROFILE命令分析性能的用法整理

    show profile是由Jeremy Cole捐献给MySQL社区版本的.默认的是关闭的,但是会话级别可以开启这个功能.开启它可以让MySQL收集在执行语句的时候所使用的资源.为了统计报表,把pr ...

  8. mysql 性能分析之 profiling

    1.首先查看此功能有没有开启,默认是OFF关闭状态 mysql> show variables like 'profiling%'; +---------------+-------+ | Va ...

  9. mysql性能分析工具profiling_Mysql系列(十)—— 性能分析工具profiling

    explain是从mysql怎样解析执行sql的角度分析sql优劣.profiling是从sql执行时资源使用情况的角度来分析sql. 分析SQL执行带来的开销是优化SQL的重要手段.在MySQL数据 ...

最新文章

  1. Android8.0恢复出厂设置失败-BroadcastQueue: Background execution not allowed
  2. Hp linux tar 解压,tar命令的用法(百度)(HP_UX)
  3. mybatis08--关联查询多对一
  4. javaweb k8s_阿里云部署K8Sweb项目
  5. [BUUCTF-pwn]——pwnable_orw   (ORW)
  6. Android—OkHttp同步异步请求过程源码分析与拦截器
  7. c语言作业请输入一个运算符,C语言书面作业1(有答案版)..doc
  8. 打开pjsip2.1版本的视频支持
  9. RocketMQ基础概念剖析源码解析
  10. 拼接 结果集_JUST技术:利用轨迹拼接分析实时可达区域|技术前沿
  11. 由一条OpenResty Error log谈谈ngx.exit与ngx.eof的区别
  12. LintCode刷题:有效数字
  13. 实战matlab之文件与数据接口技术,实战MATLAB之文件与数据接口技术
  14. 大数据有哪些分析误区
  15. 自动驾驶_(无人驾驶)综述
  16. 起重机液压控制系统实训QY-JXSX01
  17. 如何快速连接无线Wifi 使用二维码
  18. python通达信自动交易_【其他】通达信程序化交易新发现,通达信dll下单
  19. AD软件repeat功能实践详解
  20. 操作ElasticSearch

热门文章

  1. 同元软控AI系列工具箱应用案例——涡轮发动机剩余寿命预测
  2. 为什么苹果6没有录屏_你知道为什么苹果iPhone手机的用户黏性高吗?而安卓可能就没有!...
  3. 《世界微尘里》大结局怎么看?下载当贝影视免费观看
  4. python葡萄酒品质分析
  5. ctf-web--总结几点基础题的做题思路
  6. Ubuntu8.10 DVD的下载和Mac OSX Leopard的模拟
  7. 《统计学习导论:基于R应用》第3章课后习题参考答案
  8. redis常用查询操作
  9. 【C语言排序问题】|区分选择排序以及起泡排序
  10. 用起泡法对字符串进行排序