MySQL性能分析常见方式

2023-09-20 17:10:34

1、慢查询SQL日志

  • 查看慢SQL是否开启
show variables like '%slow_query_log';
  • 执行下面的命令开启慢查询日志
set global slow_query_log='ON'; 
  • 修改慢查询阈值
# N为设置的时间
set global / session long_query_time = N;
  • 查看设置的慢查询时间
show global / session variables like '%long_query_time%';
  • 查看慢查询日志位置
show variables like '%slow_query_log_file%';
  • 查看慢查询数目
show GLOBAL STATUS LIKE '%Slow_queries%';

mysqldumpslow MySQL提供了的日志分析工具,可以帮助我们分析日志,查找、分析SQL。

#得到返回记录集最多的10个SQL
mysqldumpslow -s r -t 10 /usr/local/mysql/data/alvin-slow-slow.log

#得到访问次数最多的10个SQL
mysqldumpslow -s c -t 10 /usr/local/mysql/data/alvin-slow-slow.log

#得到按照时间排序的前10条里面含有左连接的查询语句
mysqldumpslow -s t -t 10 -g "left join" /usr/local/mysql/data/alvin-slow-slow.log

#另外建议在使用这些命令时结合 | 和more 使用 ,否则有可能出现爆屏情况
mysqldumpslow -s r -t 10 /usr/local/mysql/data/alvin-slow-slow.log | more
  • 删除慢SQL日志
#为了不互相混淆,手动删除慢查询日志文件命令。
mysqladmin -uroot -p flush-logs slow

最后要关闭慢SQL日志,不然可能影响性能。

2、查询SQL时间损耗性能分析

  • 查看当前数据库是否支持profile性能分析
show @@have_profiling
  • 查询profiling是否开启
show @@profiling
  • 默认profiling是关闭的,可以通过set语句在session/global级别开启profiling
SET profiling = 1
  • 查询每一条SQL的耗时基本情况
show profiles
  • 查看指定query_id的SQL语句各个阶段的耗时情况
show profile for query query_id
  • 查看指定query_id的SQL语句CPU的使用情况
show profile CPU for query query_id

3、explain执行计划

explain执行计划各字段含义:

  • id
    select查询的序列号,表示查询中执行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
    表示索引中使用的字节数,该值为索引字段最大可能长度,并非实际使用长度,在不损失精确性的前提下,长度越短越好。
  • rows
    MySQL认为必须要执行查询的行数,在innodb引擎的表中,是一个估计值,可能并不总是准确的。
  • filtered
    表示返回结果的行数占需读取行数的百分比,filtered 的值越大越好。
  • Extra
    额外的信息。
更多推荐

【Linux系统编程】通过系统调用获取进程标识符 及 创建子进程(fork)

文章目录1.通过系统调用获取进程标示符(PID)1.1进程id(PID)1.2父进程id(PPID)2.bash也是一个进程3.通过系统调用创建进程-fork初识3.1批量化注释3.2取消注释3.3fork创建子进程3.4fork的返回值3.5fork之后通常要用if进行分流3.6父子进程代码共享,数据写时拷贝(实现相

手机号码携号转网API接口,轻松实现用户号码流转

携号转网是指用户可以将自己的手机号码从原来的运营商转移到其他运营商,以更好的服务、更低的资费和更多的优惠来吸引用户。而手机号码携号转网API接口,则是让开发者可以方便地实现用户号码流转的工具,下面就来介绍一下如何使用手机号码携号转网API接口。一、API接口简介手机号码携号转网API接口是指一个提供手机号码携号转网服务

GitHub 曝出漏洞,或导致 4000 多个存储库遭受劫持攻击

TheHackerNews网站披露,安全研究员发现GitHub中存在一个新安全漏洞,该漏洞可能导致数千个存储库面临劫持攻击的风险。据悉,在2023年3月1日漏洞披露后,微软旗下的代码托管平台已于2023年9月1日解决了安全漏洞问题。Checkmarx安全研究员EladRapoport在与TheHackerNews分享的

mysql向数据库中添加数据

要向MySQL数据库中添加数据,您可以使用INSERTINTO语句。以下是一些基本步骤和示例代码来添加数据:连接到数据库:首先,您需要使用MySQL客户端或编程语言中的MySQL连接库连接到您的数据库。编写INSERT语句:创建一个INSERTINTO语句,指定要插入数据的表名和要插入的数据列以及其值。语法如下:INS

【学习笔记】Java 一对一培训(2.1)Java基础语法

【学习笔记】Java一对一培训(2.1)Java基础语法关键词:Java、SpringBoot、Idea、数据库、一对一、培训、教学本文主要内容含Java简介、Java基础语法、Java对象和类、Java基本数据类型、Java变量类型、Java修饰符计划2小时完成,请同学尽量提前准备。这部分主要讲述Java是什么、怎么

Spring Boot的运行原理

SpringBoot的运行原理SpringBoot是一个用于快速构建独立、可独立运行的Spring应用程序的框架。它通过自动配置和约定优于配置的原则,简化了Spring应用程序的开发过程。下面将详细介绍SpringBoot的运行原理,并附上一些代码解释。1.主要组件SpringBoot的核心组件包括自动配置(Auto-

基于SpringBoot的图书商城系统

基于SpringBoot+Vue的网上书城系统、图书商城、网上书店系统,前后端分离开发语言:Java数据库:MySQL技术:SpringBoot、Vue、MybaitsPlus、ELementUI工具:IDEA/Ecilpse、Navicat、Maven【主要功能】角色:管理员、用户管理员:用户管理、图书类型管理、图书

TCP详解之流量控制

TCP详解之流量控制发送方不能无脑的发数据给接收方,要考虑接收方处理能力。如果一直无脑的发数据给对方,但对方处理不过来,那么就会导致触发重发机制,从而导致网络流量的无端的浪费。为了解决这种现象发生,TCP提供一种机制可以让「发送方」根据「接收方」的实际接收能力控制发送的数据量,这就是所谓的流量控制。下面举个栗子,为了简

百度之星(夏日漫步)

夏日夜晚,小度看着庭院中长长的走廊,萌发出想要在上面散步的欲望,小度注意到月光透过树荫落在地砖上,并且由于树荫的遮蔽度不通,所以月光的亮度不同,为了直观地看到每个格子的亮度,小度用了一些自然数来表示它们的亮度。亮度越高则数字越大,亮度相同的数字相同。走廊是只有一行地砖的直走廊。上面一共有n个格子,每个格子都被小度给予了

如何给API签名

前言有时候为了保护API,需要用到API签名,使用API签名的好处:让API只能被特定的人访问防止别人抓包拿到请求参数,通过篡改参数发起新的请求客户端过程给API调用者分配一个app_id和app_secret,app_secret调用者和服务端各保存一份,不对外泄露,app_id需要在调用API时作为参数传递。除了a

分布式电源接入对配电网影响分析(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。⛳️座右铭:行百里者,半于九十。📋📋📋本文目录如下:🎁🎁🎁目录💥1概述📚2运行结果🎉3参考文献🌈4Matlab代码、数据、文章💥1概述分布式电源的接入将配电系统从传统的无源放射

热文推荐