当前位置: 首页 > news >正文

MySQL性能分析

一、查看执行频率

sql执行频率,执行下述指令可以看到select,update,delete等操作的次数

show global status like 'Com_______';

具体我们在终端登录mysql看下,使用下述命令登录mysql,并输入命令

mysql -u 用户名 -p

上述查询,删除等指标就出来了 ,如果在对应的数据库中,比如查询的指标过多,那么就要考虑对查询指标进行优化

二、慢查询日志

慢查询日志记录了所有执行时间超过指定参数(long_query_time,单位:秒,默认10秒)的所有SQL语句的日志,MySQL的慢查询日志默认没有开启,需要在MySQL的配置文件(/etc/my.cnf)中配置如下信息:.

首先执行以下命令,查看mysql是否已经开启了慢查询

show variables like 'slow_query_log'

如果是在Linux服务器上的数据库,那么利用vim编辑  /etc/my.cnf该文件,如果是本地windows好像是默认就开启的,我也不记得我之前有没有配置,因为查看的时候就是处于on状态

加入配置

  1. 开启慢查询标志
  2. 设置sql执行的超时时间 
slow_query_log=1long_query_time=2

接着要重启mysql,执行如下:

systemctl restart mysqld

 三、show profile

show profiles能够在做SQL优化时帮助我们了解时间都耗费到哪里去了。通过have_profiling参数,能够看到当前MySQL是否支profile操作:

SELECT @@have_profiling ;

能够看到数据库是支持profile操作的

默认profiling是关闭的,可以通过set语句在session/global级别开启profiling:

set profiling = 1

执行  select @@profiling;  查看当前是否开启了profile 

结果为0,可以看到是没有开启的 

通过使用上述的set命令可以看到已经开启了profile操作 

 接下来执行几条sql来看看它们在profile里面的体现

 可以看到如下的一些sql执行时间的情况

其中,执行耗时最长的是 select * from pw

查看指定query_id的SQL语句各个阶段的耗时情况

show profile  for  query query_id

查看指定query_id的SQL语句CPU的使用情况

show profile  cpu for  query query_id

四、explain分析sql慢查询 

 EXPLAIN或者DESC命令获取MySQL如何执行SELECT语句的信息,包括在SELECT语句执行过程中表如何连接和连接的顺序,语法如下:

EXPLAIN SELECT字段列表FROM表名WHERE条件;

执行如下命令,仔细分析下结果各代表什么

explain select * from goods where goodsID = 1;

上述都为null,因为表中没有id为1的

在explain中各个字段的含义:

字段含义
idselect查询的序列号,表示查询中执行select子句或者是操作表的顺序 (id相同,执行顺序从上到下;id不同,值越大,越先执行)
select_type表示 SELECT 的类型,常见的取值有 SIMPLE(简单表,即不使用表连接 或者子查询)、PRIMARY(主查询,即外层的查询)、 UNION(UNION 中的第二个或者后面的查询语句)、 SUBQUERY(SELECT/WHERE之后包含了子查询)等
type表示连接类型,性能由好到差的连接类型为NULL、system、const、 eq_ref、ref、range、 index、all
possible_key显示可能应用在这张表上的索引,一个或多个
key实际使用的索引,如果为NULL,则没有使用索引
key_len表示索引中使用的字节数, 该值为索引字段最大可能长度,并非实际使用长 度,在不损失精确性的前提下, 长度越短越好
rowsMySQL认为必须要执行查询的行数,在innodb引擎的表中,是一个估计值, 可能并不总是准确的
filtered表示返回结果的行数占需读取行数的百分比, filtered 的值越大越好

explain中重点关注的字段主要是:

key和key_len,能够检查是否命中了索引 

type字段查看sql是否有进一步的优化空间,是否存在全索引扫描或全盘扫描

extra建议来判断,是否出现了回表的情况,如果出现了,可以尝试添加索引或修改返回字段来修复

http://www.lryc.cn/news/373088.html

相关文章:

  • 为什么要学习Flink系统管理及优化课程?
  • 把本机的bash构建到docker镜像里面
  • 【数据分析】推断统计学及Python实现
  • 探索交互的本质:从指令到界面的演进与Linux基础指令的深入剖析
  • uniapp vue分享功能集成
  • 软件工程实务:软件产品
  • 带侧边栏布局:带导航的网页
  • react学习-redux快速体验
  • 基于flask的网站如何使用https加密通信-问题记录
  • 记C#优化接口速度过程
  • windows环境如何运行python/java后台服务器进程而不显示控制台窗口
  • 记周末百度云防御CC攻击事件
  • vue中v-bind控制class和style
  • 【面试经典150题】【双指针】392. 判断子序列
  • 禁用PS/Photoshop等一系列Adobe旗下软件联网外传用户数据操作
  • C语言猜输赢游戏
  • Rust 异步 trait 的实现困难
  • 腾讯云和windows11安装frp,实现内网穿透
  • Solidity智能合约事件(event)
  • 第2章 Rust初体验7/8:错误处理时不关心具体错误类型的下划线:提高代码可读性:猜骰子冷热游戏
  • 大话C语言:第24篇 预处理
  • React如何配置路由
  • MAC使用初体验+入门
  • Go TOKEN机制与跨域处理方式
  • JavaScript 的运行
  • 园区地图导航系统:技术原理、部署方案与智能化应用解析
  • 【数据结构】第十六弹---C语言实现希尔排序
  • 用Python向Word文档添加页眉和页脚
  • REST风格
  • Mongodb连接测试程序【Java版】