【MySQL进阶】SQL性能分析

MySQL-SQL性能分析 设置慢查询日志的时间为 2 秒,SQL语句执行时间超过2秒,就会视为慢查询,记录慢查询日志。修改/etc/my.cnf 【注意这里是linux下的mysql路径】默认情况下,不加session/global ,是session级别。上述字段中,type这一个字段就可以大致的看出当前sql的效率了。修改完成后,重启mysql,通过如下指令来查找慢日志存储的位置。#开启MySQL慢查询日志开关。 阅读详情

一、SQL性能分析

1.SQL执行频率

MySQL 客户端连接成功后,通过 show [session|global] status 命令可以提供服务器状态信
息。通过如下指令,可以查看当前数据库的 INSERT 、 UPDATE 、 DELETE 、 SELECT 的访问频次:
-- session 是查看当前会话 ;
-- global 是查询全局数据 ;
SHOW GLOBAL STATUS LIKE 'Com_______';

Com_delete: 删除次数    Com_insert: 插入次数
Com_select: 查询次数   Com_update: 更新次数
我们可以在当前数据库再执行几次查询操作,然后再次查看执行频次,看看 Com_select 参数会不会变化。
通过上述指令,我们可以查看到当前数据库到底是以查询为主,还是以增删改为主,从而为数据库优化提供参考依据。 如果是以增删改为主,我们可以考虑不对其进行索引的优化。 如果是以查询为主,那么就要考虑对数据库的索引进行优化了。

那么通过查询SQL的执行频次,我们就能够知道当前数据库到底是增删改为主,还是查询为主。 那假如说是以查询为主,我们又该如何定位针对于那些查询语句进行优化呢? 次数我们可以借助于慢查询日志。

接下来,我们就来介绍一下 MySQL 中的慢查询日志。

2.慢查询日志

慢查询日志记录了所有执行时间超过指定参数( long_query_time ,单位:秒,默认 10 秒)的所有
SQL 语句的日志。
MySQL 的慢查询日志默认没有开启,我们可以查看一下系统变量 slow_query_log 。
SHOW VARIABLES LIKE 'slow_query_log';

我的之前配置过,所以显示的是ON(off为关,on为开):

如果要开启慢查询日志,需要在 MySQL 的配置文件(C:\ProgramData\MySQL\MySQL Server 8.0)中配置如下信息:

# 开启MySQL慢日志查询开关
slow_query_log=1
# 设置慢日志的时间为2秒,SQL语句执行时间超过2秒,就会视为慢查询,记录慢查询日志
long_query_time=2

 

小知识:

my.ini和my.cnf的区别

MySQL的配置文件在windows系统为 my.ini
而在linux或者MacOs是 my.cnf

linux或者MacOs配置文件所在位置


安装MySQL方式不同配置文件所在位置也不同,如果是安装版一般默认在
/usr/local/mysql-[版本号]/
而免安装版一般都都在 MySQL安装目录的根路径下,如果找不到MySQL的安装目录,那么Linux和MacOS是可以通过命令搜索的,一般会放在/etc/my.cnf,/etc/mysql/my.cnf。如果找不到,可以用find命令查找。
 

Windows的配置文件所在位置
无论安装版和免安装版,最好的办法是通过环境变量的方式查找,方式有了,我就不在这里赘述了。
 

 慢查询日志:

测试【linux版本】:

配置完毕之后,通过以下指令重新启动MySQL服务器进行测试,查看慢日志文件中记录的信息

/var/lib/mysql/localhost-slow.log 。

systemctl restart mysqld

然后,再次查看开关情况,慢查询日志就已经打开了。

A. 执行如下SQL语句 :

select * from tb_user; -- 这条SQL执行效率比较高, 执行耗时 0.00sec
select count(*) from tb_sku; -- 由于tb_sku表中, 预先存入了1000w的记录, count一次,耗时
13.35sec

 

B. 检查慢查询日志 :

最终我们发现,在慢查询日志中,只会记录执行时间超多我们预设时间( 2s )的 SQL ,执行较快的 SQL是不会记录的。

 

那这样,通过慢查询日志,就可以定位出执行效率比较低的 SQL ,从而有针对性的进行优化。 

3.profile详情 

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

 可以看到,当前MySQL是支持 profile操作的,如果开关是关闭的。

可以通过set语句在 session/global级别开启profiling:

SET profiling = 1;
SELECT @@profiling ;

 开关已经打开了,接下来,我们所执行的SQL语句,都会被MySQL记录,并记录执行时间消耗到哪儿去了。 我们直接执行如下的SQL语句:

select * from tb_user;
select * from tb_user where id = 1;
select * from tb_user where name = '白起';
select count(*) from tb_user;
执行一系列的业务 SQL 的操作,然后通过如下指令查看指令的执行耗时:
-- 查看每一条SQL的耗时基本情况
show profiles;
-- 查看指定query_id的SQL语句各个阶段的耗时情况
show profile for query query_id;
-- 查看指定query_id的SQL语句CPU的使用情况
show profile cpu for query query_id;
查看每一条SQL的耗时情况:

查看指定SQL各个阶段的耗时情况 :
show profile for query 97;

4.explain 

EXPLAIN 或者 DESC 命令获取 MySQL 如何执行 SELECT 语句的信息,包括在 SELECT 语句执行过程中表如何连接和连接的顺序。
-- 直接在select语句之前加上关键字 explain / desc
EXPLAIN SELECT 字段列表 FROM 表名 WHERE 条件 ;

Explain 执行计划中各个字段的含义:

二、好书推荐

清华社【秋日阅读企划】领券立享优惠

IT好书 5折叠加10元 无门槛优惠券:https://u.jd.com/Yqsd9wj

活动时间:9月4日-9月17日,先到先得,快快来抢

 

迫不及待的小伙伴点击链接查看: Spring Cloud 微服务快速上手

 本次送书 2 本   评论区抽2位小伙伴送书
活动时间:截止到 2023-09-17 20:00:00

抽奖方式:利用程序进行抽奖。

参与方式:关注博主、点赞、收藏,评论区评论 "人生苦短,我用Java!"

MySQL进阶sql性能分析 因此我收集了一份《java开发全套学习资料》送给大家,初衷也很简单,就是希望帮助到想自学又不知道该从何学起的朋友,同时减轻大家的负担。慢查询日志会记录超出自己设置的时间还没有执行完毕的sql.默认情况下,Mysql数据库并不启动慢查询日志,需要我们手动来设置这个参数,如果不是调优需要的话,一般不建议启动该参数,因为开启慢查询日志会或多或少带来一定的性能影响。解释通过该命令可以查看当前数据库下的增删改查的使用次数,来采取对应的优化处理.value值就是执行的次数.1.查看profile是否可用。... 阅读详情

相关推荐

Mysql:SQL性能分析

通过上述指令,我们可以查看到当前数据库到底是以查询为主,还是以增删改为主,从而为数据库优化提供参考依据。如果是以增删改为主,我们可以考虑不对其进行索引的优化。如果是以查询为主,那么就要考虑对数据库的索引进行优化了。那么通过查询SQL的执行频次,我们就能够知道当前数据库到底是增删改为主,还是查询为主。那假如说是以查询为主,我们又该如何定位针对于那些查询语句进行优化呢?我们可以在当前数据库再执行几次查询操作,然后再次查看执行频次,看看 Com_select 参数会不会变化。Com_select: 查询次数。

u013938578的博客 1478

MYSQL | SQL性能 | 有效分析的技巧和方法

在SQL性能优化过程中,经常遇到的问题包括查询响应时间过长、数据库负载过高、不适当的索引策略以及查询语句的复杂性等。SQL性能分析可以帮助我们发现潜在的性能问题,定位瓶颈所在,并提供相应的优化策略。通过深入分析SQL查询的执行计划、监控关键性能指标以及使用专业的性能分析工具,我们可以及时优化和改进数据库应用程序的性能。

devops 5993

在昇腾910B上,用kubeadm快速拉起一个双节点K8s集群(保姆级避坑指南)

本文详细介绍了在昇腾910B服务器上使用kubeadm快速搭建双节点Kubernetes集群的完整流程,包括环境准备、容器运行时配置、kubeadm初始化、节点加入与网络插件部署等关键步骤,特别针对ARM架构和昇腾芯片提供了优化配置和避坑指南。

weixin_29204749的博客 244

MySQL----SQL性能分析

文章目录SQL性能分析1 SQL执行频率2 慢查询日志2.1 查询慢日志是否开启2.2 查询慢日志的时间2.3 查看慢日志文件中记录的信息3 profile详情3.1 查询是否支持 profile3.2 查询 profile 是否开启3.3 开启 profile3.4 查看每一条SQL的耗时基本情况3.5 查看指定query_id的SQL语句各个阶段的耗时情况3.6 查看指定query_id的SQL语句CPU的使用情况4 explain4.1 语法4.2 Explain 执行计划中各个字段的含义 SQL性

emmmm..... 3175

ZynqMP双核通信避坑指南:Linux驱动+裸机固件协同开发实录

本文详细解析了Xilinx ZynqMP芯片中APU与RPU双核通信的技术实现,重点介绍了通过IPI中断实现Linux驱动与裸机固件协同开发的实战经验。内容涵盖硬件寄存器配置、Linux驱动开发、RPU裸机程序编写以及双核调试技巧,为开发者提供了一套完整的工程化解决方案,帮助规避常见开发陷阱。

weixin_29168153的博客 126

【经验分享】使用Keil5烧录代码遇到的问题及解决方法

本文介绍了在使用Keil5烧录代码过程中可能遇到的常见问题,主要为编译错误和下载失败,并提供了解决方案和注意事项。通过本文中提供的具体解决方案和注意事项,希望能够帮助读者更加顺利地进行Keil5烧录代码操作,提高开发效率和成果实现。

qq_63195670的博客 1万+

关于Mysql Explain慢查询,你该知道的分析

explain分析Explain 详解Explain字段详解(重点关注加粗项)select_type解读 (UNION:联合查询)table 解读type 解读possible_keys 解读Key 解读key_len 解读ref 解读rows 解读Extra 解读 Explain 详解 在日常工作中,我们会遇到sql语句查询速度特别慢,常常用到explain这个命令来查看一个这些SQL语...

weixin_38171468的博客 992

ZYNQ软件复位重启、程序跳转的实现方法(Multiboot)

目录一、增加FSBL的调试信息 一、增加FSBL的调试信息 启动过程的调试信息如下: Xilinx First Stage Boot Loader Release 2016.4 Jan 19 2020-10:35:00 Devcfg driver initialized Silicon Version 3.1 Boot mode is QSPI Single Flash Informat...

weixin_41922484的博客 2万+

MySQL进阶——SQL性能分析

在上篇文章我们学习了,这篇文章学习MySQL进阶——SQL性能分析。SQL性能分析主要是从SQL语句执行频率、耗时时间、CPU使用情况和执行时表连接情况进行分析,常用的方法工具有:SQL执行频率、慢查询日志、profile详情和explain执行计划。

霖hero 1089

微信小程序 - [wxapplib]] backgroundfetch privacy fail {“errno”:101,“errMsg”:“private_getBackgroundFetchDa

微信小程序报错之backgroundfetch privacy fail,微信小程序报错WAServiceMainContext.js:1 [wxapplib]] backgroundfetch privacy fail {“errno“:101,怎么解决?问题出现:调用wx.chooseMessageFile报错(开发者工具中正常)用户隐私协议中未声明小程序使用此功能,安卓真机调试报错:backgroundfetch privacy fail ,怎么解决?微信小程序[wxapplib]] backgrou

🏆 前端领域优质创作者 1万+

《网络安全自学教程》- SQL注入之报错注入原理+步骤+实战操作

这篇文章为大家解析报错注入的实现原理,结合实战案例讲解报错注入的使用步骤。

wangyuxiang946的博客 1万+

【MySQL 进阶之路】SQL 性能分析

MySQL 性能优化是一个不断调优的过程,从硬件配置到查询结构优化再到索引设计,都需要全面考虑。利用EXPLAIN分析执行计划、慢查询日志、索引优化、内存调优等手段,可以有效提升数据库的性能。在高并发、大数据量的场景下,分库分表、查询缓存、连接优化等技术也是不可或缺的工具。

ajsbxi的博客 994

华为OD机考双机位C卷 - 区间交集(Java & Python& JS & C/C++ & GO )

华为OD机考双机位C卷 - 区间交集

算法大师! 1136

MySQL进阶:sql性能分析

1:sql的执行次数分析: sql: show global status like 'com_______' 解释:通过该命令可以查看当前数据库下的增删改查的使用次数,来采取对应的优化处理. value值就是执行的次数. 2:慢查询日志 sql: show variables like '%slow_query_log%'; 慢查询日志会记录超出自己设置的时间还没有执行完毕的sql. 默认情况下,Mysql数据库并不启动慢查询日志,需要我们手动来设置这个参数,如果不是调优...

wang5701071的博客 1万+

Couldn‘t agree a key exchange algorithm(available:curve25519-sha256,curve25519-sha256@libssh.org解决方案

本文主要介绍了Couldn’t agree a key exchange algorithm(available:curve25519-sha256,curve25519-sha256@libssh.org解决方案,希望能对使用winscp的同学们有所帮助。 文章目录 1. 问题描述 2. 解决方案 2.1 方案一 2.2 方案二

weixin_43178406的博客 4万+

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

MySQL进阶——索引简介及SQL性能分析

本文主要介绍MySQL索引内容,包括索引分类,索引语法,以及SQL的性能分析。

hujunbo553271的专栏 336

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

MySQL - 进阶篇 - 2.5 SQL性能分析

MySQL性能分析四步法:1. 通过SHOW STATUS分析SQL执行频率,判断读写压力分布;2. 配置慢查询日志捕获执行超时SQL;3. 使用PROFILE分析SQL各阶段耗时;4. 通过EXPLAIN解读执行计划,检查索引使用情况。这套方法从宏观到微观逐步定位性能瓶颈,大厂实践中会结合监控告警、采样分析等手段,最终可能采取索引优化、SQL改写或架构调整等解决方案。核心思路是:先找到问题SQL,再分析执行细节,最后针对性优化。

tang7mj的博客 1075

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

MySQL进阶-----索引的语法与SQL性能分析

本期就要来去讲解SQL索引的相关语法,已经我们之前所用的SQL语句对其进行性能分析和执行效率来去判断如何来选择合适的SQL语句。下面看正文。MySQL进阶-----索引的结构与分类-优快云博客一、索引语法1.SQL语法1.创建索引2.查看索引3.删除索引。

m0_73633088的博客 1341

【MySQL进阶 | SQL性能分析】SQL执行频率,慢查询日志

SQL执行频次是指在一定时间内,某个SQL语句在数据库被执行的次数。SQL执行频率可以反映在实际业务中的哪些类型的SQL语句被广泛执行,从而针对的去做优化。语法:MySQL客户端连接成功后,通过命令可以提供服务器信息状态,。通过如下指令就可以查看当前数据库的INSERT、UPDATE、DELETE、SELECT的访问频次。执行以上命令后,我们可以得到以下结果:可以观察到其中有后缀为delete、insert、select和update。

miaowa_311的博客 693

MySQL索引:SQL性能分析工具详解(进阶篇)

索引优化不能凭感觉,而是需要科学的性能分析工具。就像医生看病需要体检报告一样,优化SQL也需要"体检报告"——这就是本文要讲的性能分析工具。性能分析工具体系├── SQL执行频率统计 ← 找到优化方向├── 慢查询日志 ← 发现问题SQL├── Profile性能分析 ← 定位耗时环节└── EXPLAIN执行计划 ← 分析查询策略fill:#333;color:#333;color:#333;fill:none;问题1问题2问题3问题4SQL提交优化器生成执行计划存储引擎数据读取。

工一木子 784

『Mysql进阶』Mysql SQL语句性能分析 Profile (七)

找到我们执行SQL的Query_ID = 2, 执行show profile。不过该工具只有在MySQL 5.0.37。Query Profiler是。以列表形式显示最近发送到服务器上执行的语句的。显示上下文切换次数,不管是主动还是被动。展示最近一条语句执行的详细资源占用信息。选择显示某条记录的性能分析信息。显示源码中的函数名称与位置。查看是否打开了性能分析功能。显示发送和接收的消息数量。以及以上版本中才有实现。,通过它可以分析出一条。,显示的记录数由变量。

gorgor在码农 703

【MySQL进阶】索引(四)<SQL性能分析>

获取MySQL如何执行select语句的信息,包括在select语句执行过程中表如何连接和连接的顺序。配置完成后,需要重启MySQL服务器(tail动态监控慢查询日志,观察日志输出结构。慢查询日志记录了所有执行时间超过指定参数(,需要在MySQL的配置文件(如何查看慢查询日志是否开启。)的所有SQL语句的日志。MySQL的慢查询日志。

行为产生结果 160

MySQL进阶之索引(1)索引结构分类语法和SQL性能分析

学习索引的结构分类语法和SQL性能分析

xrkhy的博客 1018

Mysql进阶篇1-存储引擎、索引、SQL性能分析指令

本文介绍了MySQL存储引擎和索引的核心知识。存储引擎方面,重点分析了InnoDB和MyISAM的特点:InnoDB支持事务、行级锁和外键,适合高并发场景;MyISAM支持表级锁和全文索引,适合读多写少场景。索引部分详细讲解了B+Tree结构优于二叉树和B树的原因,包括层级更少、范围查询高效等优势。同时介绍了索引分类(主键、唯一、常规、全文索引)和聚集索引与二级索引的区别,其中聚集索引叶子节点存储数据,二级索引存储主键值。最后提到索引使用的最左前缀法则,强调联合索引查询必须包含最左字段。全文为MySQL性能

y_k_j_c的博客 967

MySQL数据库进阶第二篇(索引,SQL性能分析,使用规则)

本篇博客深入详细地介绍了数据库索引的概念和重要性。内容包含:索引的概念和目标、索引的优点与缺点。此外,博客还深入解析了三种主要的索引结构:B-Tree、B+Tree和Hash,提供了详细的结构解析和优化方法,并通过插图进一步增强了理解。 博客的部分内容专注于对B-Tree和B+Tree的对比,以及MySQL中索引结构的原理和实际应用。对索引结构的一些微妙差异,如MySQL在B+Tree基础上增加指向相邻叶子节点的链表指针,也进行了深入的探讨。 在对索引结构进行详细解析后,博客介绍了几种不同类型的索引(包括聚

Du_XiaoNan的博客 1057
上一篇: 【面试专题】Spring篇②
下一篇: 2023中国智能产业高峰论坛丨文档图像大模型的思考与探索
热爱编程的小白白
热爱编程的小白白 新星计划导师 新星计划导师
博客等级 码龄5年 11万+粉丝 243原创
评论 21
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

热爱编程的小白白

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值