MySQL性能分析 一
一、数据库服务器优化步骤
下面流程展示了优化的步骤,可以理解为三个步骤:慢查询、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性能分析 一相关推荐
- MySQL性能分析及explain的使用
MySQL性能分析及explain用法的知识是本文我们主要要介绍的内容,接下来就让我们通过一些实际的例子来介绍这一过程,希望能够对您有所帮助. 1.使用explain语句去查看分析结果 如explai ...
- MySQL 性能分析 之 联合索引(复合索引)实践分析
MySQL 性能分析 之 联合索引(复合索引)实践分析 作为开发者,大家都知道,一个服务器.一个数据库的性能是项目的重中之重,后台架构.写法与数据库设计的好坏往往直接影响到整个项目的性能. 索引:是当 ...
- 死磕数据库系列(三十三):MySQL 性能分析与相关工具的使用
点关注公众号,回复"1024"获取2TB学习资源! 今天我将详细的为大家介绍 MySQL 性能分析以及相关工具使用的相关知识,希望大家能够从中收获多多!如有帮助,请点在看.转发支持 ...
- mysql 性能分析_十大MySQL性能分析工具汇总!专治MySQL性能瓶颈
前言 MySQL 数据库最常见的两个瓶颈是CPU和I/O的瓶颈.CPU在饱和的时候一般发生在数据装入内存或从磁盘上读取数据时候,磁盘I/O瓶颈发生在装入数据远大于内存容量的时候. MySQL数据库性能 ...
- 011 MySQL性能分析
一.性能分析的思路 1.首先需要使用[慢查询日志]功能,去获取所有查询时间比较长的SQL语句: 2.其次[查看执行计划]查看有问题的SQL的执行计划 explain: 3.最后可以使用[show pr ...
- MySQL性能分析工具的使用:慢查询日志、EXPLAN的使用、分析优化器执行计划:trace、MySQL监控分析视图-sys schema
文章目录 1.数据库服务器的优化步骤 2.查看系统性能参数 2.1 语法 2.2 常用参数 3.统计SQL的查询成本:last_query_cost 4.定位执行慢的SQL:慢查询日志 4.1 慢查询 ...
- mysql 性能分析 命令_MySQL中使用SHOW PROFILE命令分析性能的用法整理
show profile是由Jeremy Cole捐献给MySQL社区版本的.默认的是关闭的,但是会话级别可以开启这个功能.开启它可以让MySQL收集在执行语句的时候所使用的资源.为了统计报表,把pr ...
- mysql 性能分析之 profiling
1.首先查看此功能有没有开启,默认是OFF关闭状态 mysql> show variables like 'profiling%'; +---------------+-------+ | Va ...
- mysql性能分析工具profiling_Mysql系列(十)—— 性能分析工具profiling
explain是从mysql怎样解析执行sql的角度分析sql优劣.profiling是从sql执行时资源使用情况的角度来分析sql. 分析SQL执行带来的开销是优化SQL的重要手段.在MySQL数据 ...
最新文章
- Android8.0恢复出厂设置失败-BroadcastQueue: Background execution not allowed
- Hp linux tar 解压,tar命令的用法(百度)(HP_UX)
- mybatis08--关联查询多对一
- javaweb k8s_阿里云部署K8Sweb项目
- [BUUCTF-pwn]——pwnable_orw (ORW)
- Android—OkHttp同步异步请求过程源码分析与拦截器
- c语言作业请输入一个运算符,C语言书面作业1(有答案版)..doc
- 打开pjsip2.1版本的视频支持
- RocketMQ基础概念剖析源码解析
- 拼接 结果集_JUST技术:利用轨迹拼接分析实时可达区域|技术前沿
- 由一条OpenResty Error log谈谈ngx.exit与ngx.eof的区别
- LintCode刷题:有效数字
- 实战matlab之文件与数据接口技术,实战MATLAB之文件与数据接口技术
- 大数据有哪些分析误区
- 自动驾驶_(无人驾驶)综述
- 起重机液压控制系统实训QY-JXSX01
- 如何快速连接无线Wifi 使用二维码
- python通达信自动交易_【其他】通达信程序化交易新发现,通达信dll下单
- AD软件repeat功能实践详解
- 操作ElasticSearch