MySQL-性能分析

1、数据库服务器的优化步骤

在这里插入图片描述

2、查看系统性能参数

  • 可以使用show status语句查询一些MySQL数据库服务器的性能参数 执行频率
  • 语法格式:show [ global | session ] status like '参数'
  • 常用性能参数如下所示
参数名说明
connection连接MySQL服务器的次数
uptimeMySQL服务器上线时间
slow_queries慢查询的次数
innodb_rows_readselect 查询返回行数
innodb_rows_inserted执行insert操作插入的行数
innodb_rows_updated执行update操作更新的行数
innodb_rows_delete执行delete操作删除的行数
com_select查询操作的次数
com_insert插入操作的次数。对于批量插入的insert操作,只累加一次
com_update更新操作的次数
com_delete删除操作的次数
last_query_costSQL查询成本

3、慢查询日志(定位执行慢的SQL)

  • MySQL慢查询日志用来记录MySQL中响应时间超过设定阈值的语句,具体运行时间超过 long_query_time 值的SQL将会被记录到慢查询日志中。long_query_time的默认值为 10

  • 默认情况下,MySQL数据库 没有开启慢查询日志,需要手动设置参数。

  • 是调优需要一般不建议启动该参数,因为开启慢查询日志或多或少会对性能造成一定影响。

  • 查询慢查询日志是否开启

mysql> show variables like 'slow_query_log';
+----------------+-------+
| Variable_name  | Value |
+----------------+-------+
| slow_query_log | OFF   |
+----------------+-------+
1 row in set (0.01 sec)
  • 开启 slow_query_log
mysql> set global slow_query_log = on;
Query OK, 0 rows affected (0.12 sec)mysql> show variables like 'slow_query_log%';
+---------------------+--------------------------------+
| Variable_name       | Value                          |
+---------------------+--------------------------------+
| slow_query_log      | ON                             |
| slow_query_log_file | /var/lib/mysql/rqtanc-slow.log |
+---------------------+--------------------------------+
2 rows in set (0.00 sec)
  • 查询 long_query_time 阈值
mysql> show variables like 'long_query_time';
+-----------------+-----------+
| Variable_name   | Value     |
+-----------------+-----------+
| long_query_time | 10.000000 |
+-----------------+-----------+
1 row in set (0.00 sec)
  • 修改long_query_time 阈值
[root@rqtanc ~]# vim /etc/my.cnf#设置
long_query_time = 5#重启mysql
[root@rqtanc ~]# systemctl status mysqld.service
  • 查看慢查询数目
mysql> show status like 'slow_queries';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| Slow_queries  | 0     |
+---------------+-------+
1 row in set (0.00 sec)

4、慢查询日志分析工具: mysqldumpslow

  • 查看 mysqldumpslow 帮助信息
[root@rqtanc ~]# mysqldumpslow --help
Usage: mysqldumpslow [ OPTS... ] [ LOGS... ]Parse and summarize the MySQL slow query log. Options are--verbose    verbose--debug      debug--help       write this text to standard output-v           verbose-d           debug-s ORDER     what to sort by (al, at, ar, c, l, r, t), 'at' is defaultal: average lock timear: average rows sentat: average query timec: countl: lock timer: rows sentt: query time  -r           reverse the sort order (largest last instead of first)-t NUM       just show the top n queries-a           don't abstract all numbers to N and strings to 'S'-n NUM       abstract numbers with at least n digits within names-g PATTERN   grep: only consider stmts that include this string-h HOSTNAME  hostname of db server for *-slow.log filename (can be wildcard),default is '*', i.e. match all-i NAME      name of server instance (if using mysql.server startup script)-l           don't subtract lock time from total time
  • 分析文件源为:
mysql> show variables like 'slow_query_log_file%';
+---------------------+--------------------------------+
| Variable_name       | Value                          |
+---------------------+--------------------------------+
| slow_query_log_file | /var/lib/mysql/rqtanc-slow.log |
+---------------------+--------------------------------+
1 rows in set (0.00 sec)
  • 执行以下语句进行分析
[root@rqtanc ~]# mysqldumpslow -a -s t -t 5 /var/lib/mysql/rqtanc-slow.logReading mysql slow query log from /var/lib/mysql/rqtanc-slow.log
Count: 1  Time=0.00s (0s)  Lock=0.00s (0s)  Rows=0.0 (0), 0users@0hostsDied at /usr/bin/mysqldumpslow line 162, <> chunk 1.

5、查看SQL执行成本:show profile

  • 见 MySQL-SQL执行流程及原理 一文

6、分析查询语句:explain

参考 官方文档

  • 定位查询慢的SQL以后,可以使用explain 或 describe 工具做针对性的分析查询语句

  • 基本语法(查询执行计划): explain + SQL 语句 如:

mysql> explain select 1;
+----+-------------+-------+------------+------+---------------+------+---------+------+------+----------+----------------+
| id | select_type | table | partitions | type | possible_keys | key  | key_len | ref  | rows | filtered | Extra          |
+----+-------------+-------+------------+------+---------------+------+---------+------+------+----------+----------------+
|  1 | SIMPLE      | NULL  | NULL       | NULL | NULL          | NULL | NULL    | NULL | NULL |     NULL | No tables used |
+----+-------------+-------+------------+------+---------------+------+---------+------+------+----------+----------------+
1 row in set, 1 warning (0.00 sec)
  • explain语句输出列的相关说明
列名说明
id在一个大的查询语句中每个select关键字都对应一个唯一的id
select_typeselect 关键字对应的哪个查询类型
table表名
partitions匹配的分区信息
type针对单表的访问方法
possible_keys可能用到的索引
key实际上用到的索引
key_len实际上使用到的索引长度
ref当使用索引列等值查询时,与索引列进行等值匹配的对象信息
rows预估的需要读取的记录条数
filtered某个表经过搜索条件过滤后剩余记录条数的百分比
Extra一些额外信息

6.1、id列

  • id 列的值标识了查询执行中的每一步操作,并反映了这些步骤的执行顺序和嵌套关系。
  • id如果相同,可以认为是一组从上往下执行
  • 在所有组中,id值越大,优先级越高,越先执行
  • 每一个id值表示一趟独立的查询,一个SQL的查询趟数越少越好

6.2、select_type 列

  • 一个大的查询语句中可以包含若干个select关键字,每个关键字代表一个小的查询语句,而每个select关键字的from子句中可以包含若干张表
  • 每一张表对应执行计划输出中的一条记录,对于同一个select关键字中的表来说,他的id值是相同的
查询类型说明
SIMPLE表示查询是简单的 SELECT 查询,不包含任何子查询或联合查询。
PRIMARY表示最外层的 SELECT 查询,也可以称为主查询。
SUBQUERY表示查询中的子查询。
DERIVED表示派生表,这是一个临时表,通常是在 FROM 子句中的子查询结果。
UNION表示联合查询中的第二个或后续的 SELECT。
UNION RESULT表示联合查询结果集的合并。
DEPENDENT SUBQUERY表示依赖外部查询结果的子查询,每次执行都依赖于外部查询的结果。
UNCACHEABLE SUBQUERY表示子查询结果不可缓存,每次执行都重新计算。
MATERIALIZED表示使用了物化表(Materialized Table),这是一个存储预先计算结果的临时表。

6.3、partitions列

  • 出现位置:partitions 列通常出现在执行计划的结果中,用于指示每个操作所涉及的分区信息。
  • 分区名称:对于涉及到分区的操作,partitions 列可能会显示涉及的具体分区名称。
  • 分区范围:对于涉及到范围分区的操作,partitions 列可能会显示涉及的分区范围。
  • 作用
    • 显示分区信息:partitions 列提供了有关查询涉及的分区的信息,包括查询在执行过程中访问了哪些分区。
    • 性能优化:分析查询涉及的分区信息可以帮助优化查询性能,例如确保查询只访问必要的分区,避免不必要的分区扫描。

6.4、type 列

查询类型说明
system表示访问系统表,通常只有一行记录。
const表示通过常量条件进行访问,通常使用索引直接定位到一行记录。
eq_ref表示通过唯一索引进行等值连接,通常用于连接操作。
ref表示通过非唯一索引进行等值连接,可能会返回多个匹配行。
range表示通过索引范围进行访问,通常用于范围查询。
index表示通过索引进行全表扫描,相比于 all 类型,这种访问方法更高效。
all表示全表扫描,通常是最低效的访问方法,应尽量避免。
  • 总结
    • type 列提供了关于查询执行时访问表数据的方式的信息。
    • 分析 type 列的值可以帮助你了解查询执行的效率,从而进行优化。
    • 应该尽量避免使用全表扫描(type 为 all),而更倾向于使用索引来加速查询。

6.5、explain四种输出格式 语法:EXPLAIN FORMAT= [ JSON | TREE | EXTENDED ]

  • 传统格式:表格形势
  • json格式:
    • 将查询执行计划输出为 JSON 格式的数据。这种格式适用于对查询执行计划进行进一步的自动化处理和分析,例如通过脚本进行解析和比较。JSON 格式输出了与标准格式相同的信息,但以 JSON 对象的形式表示,每个属性对应于查询执行计划中的一个字段。
  • tree格式:
    • 树形格式提供了更具可读性的查询执行计划信息。输出结果以树形结构呈现,每个节点代表查询执行计划中的一个操作。每个节点包含的信息通常与标准格式相同,但以树形结构展示,更直观地显示了查询执行的流程和嵌套关系。
  • 拓展格式(EXTENDED)输出:
    • 提供了比标准格式更详细的查询执行计划信息。除了标准格式中的列外,还包括了额外的信息,如每个操作的状态、扫描方式、索引长度等。这种格式适用于对查询执行细节进行深入分析和调优,提供了更多的信息用于性能优化。

6.6、SHOW WARNINGS

  • 用于显示最近执行的语句产生的警告信息。警告通常是一些执行中的问题或不符合预期的情况的提示。
  • SHOW WARNINGS 命令可以帮助你识别并了解这些问题,以便及时采取措施解决。
  • 警告信息可能包含以下内容:
    • Warning:警告的代码或编号。
    • Level:警告的级别,通常是 Note、Warning 或 Error。
    • Message:警告的具体消息描述

7、分析优化器执行计划:trace

  • optimizer_trace 可以跟踪优化器做出得各种决策(如:访问表的方法、各种开销计算、各种转换等,并将跟踪结果记录到 information_schema.optimizer_trace表中)
  • 此功能默认关闭,开启trace并将格式设置为json,同时设置trace最大能够使用的内存大小,避免解析过程中因内存过小而不能够完整展示
  • 可分析的语句:
    • select
    • insert
    • update
    • delete
    • replace
    • explain
    • set
    • declare
    • case
    • if
    • return
    • call

8、MySQL监控分析视图:sys schema

  • 主机相关:以 host_summary开头,主要汇总了IO延迟的信息
  • InnoDB相关:以innodb开头,汇总了innodb buffer信息和事务等待innodb锁的信息
  • I/O相关:以io开头,汇总了等待I/O及使用量的情况
  • 内存使用情况:以memory开头,从主机、线程、事件等角度展示内存使用的情况
  • 连接与会话信息: process list和session相关视图,总结了会话相关情况
  • 表相关:以schema_table开头的视图,展示了表的统计信息
  • 索引信息:统计了索引的使用情况,包含冗余索引和未使用索引的情况
  • 语句相关:以statement开头,包含执行全表扫描,使用临时表,排序等的语句信息
  • 用户相关:以user开头的视图,统计了用户使用的文件I/O、执行语句统计信息
  • 等待事件相关信息:以wait开头,展示等待事件的延迟情况

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/14400.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Autodesk 3ds Max下载,3ds MAX 2024三维建模渲染软件安装包下载安装

3ds MAX中文版&#xff0c;其强大的功能和灵活的操作为广大用户提供了无限的创意空间&#xff0c;使得高质量动画、最新游戏、设计效果等领域的制作需求得以完美满足。 ​ 作为一款三维建模软件&#xff0c;3ds MAX中文版具备极高的建模精度和渲染质量。它支持多种建模方式&am…

【Fiddler抓包工具】第四节.断点设置和弱网测试

文章目录 前言一、断点设置 1.1 全局断点 1.2 局部断点 1.3 打断点的几种常用命令 1.4 篡改响应报文二、弱网测试 2.1 网络限速 2.2 精准限速总结 前言 一、断点设置 1.1 全局断点 特点&#xff1a; 中断Fiddler捕获的所有请求&#xff0c;包括…

在链游中,智能合约如何被用于实现游戏内的各种功能

随着区块链技术的快速发展&#xff0c;链游&#xff08;Blockchain Games&#xff09;作为区块链技术的重要应用领域之一&#xff0c;正逐渐展现出其独特的魅力和优势。其中&#xff0c;智能合约作为链游的核心技术之一&#xff0c;对于实现游戏内的各种功能起到了至关重要的作…

【C++初阶】—— 类和对象 (下)

&#x1f4dd;个人主页&#x1f339;&#xff1a;EterNity_TiMe_ ⏩收录专栏⏪&#xff1a;C “ 登神长阶 ” &#x1f339;&#x1f339;期待您的关注 &#x1f339;&#x1f339; 类和对象 1. 运算符重载运算符重载赋值运算符重载前置和后置重载 2. 成员函数的补充3. 初始化列…

CentOS上升级glibc2.17至glibc2.31

glibc是Linux系统中的重要组件之一。在CentOS中&#xff0c;glibc通常是作为系统的默认C标准库使用的&#xff0c;因为它是许多软件的基础库。在CentOS中&#xff0c;glibc的版本通常与CentOS版本一起发布。因为CentOS通常会优先选择稳定性而不是最新性&#xff0c;所以CentOS使…

Vue项目如何进行XSS防护

前言 在目前主推网络安全的情况下&#xff0c;很多开发项目都需要在上线前进行渗透测试&#xff0c;当符合渗透测试标准及没有安全漏洞即可正常上线&#xff0c;当前还会有代码审计的&#xff0c;这个另当别论。 如何对XSS进行防护 在很多的富文本编辑器项目中&#xff0c;x…

leecode热题100---994:腐烂的橘子

题目&#xff1a; 在给定的 m x n 网格 grid 中&#xff0c;每个单元格可以有以下三个值之一&#xff1a; 值 0 代表空单元格&#xff1b; 值 1 代表新鲜橘子&#xff1b; 值 2 代表腐烂的橘子。 每分钟&#xff0c;腐烂的橘子 周围 4 个方向上相邻 的新鲜橘子都会腐烂。 返回…

【MySQL精通之路】InnoDB(5)-内存结构

总目录&#xff1a; 【MySQL精通之路】InnoDB存储引擎-CSDN博客 上一篇&#xff1a; 【MySQL精通之路】InnoDB(4)-架构图-CSDN博客 目录 ​编辑 1 缓存池&#xff08;Buffer Pool&#xff09; 1.1 缓存池LRU算法 1.2 缓存区配置 1.3 使用InnoDB标准监视器监视缓存池 …

SSRF服务端请求伪造漏洞原理与修复及靶场实践

SSRF服务端请求伪造漏洞原理与修复及靶场实践 SSRF漏洞原理与检测 SSRF&#xff08;Server-Side Request Forgery&#xff0c;服务器端请求伪造&#xff09;漏洞是一种因为服务端提供了远程访问服务&#xff0c;而并未对请求目标进行限制或限制不严格而引起的安全漏洞&#x…

Java Apache Jexl规则引擎初体验

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、模板引擎的选择&#xff1f;二、什么是JEXL规则引擎&#xff1f;优点缺点 三、其他规则引擎四、示例1.引入依赖2.方法示例3、代码解释4、效果![import java…

C++数据结构——哈希表

前言&#xff1a;本篇文章将继续进行C数据结构的讲解——哈希表。 目录 一.哈希表概念 二.哈希函数 1.除留取余法 三.哈希冲突 1.闭散列 线性探测 &#xff08;1&#xff09;插入 &#xff08;2&#xff09;删除 2. 开散列 开散列概念 四.闭散列哈希表 1.基本框架 …

场内期权怎么开户?佣金手续费最低是多少?

今天期权懂带你了解场内期权怎么开户&#xff1f;佣金手续费最低是多少&#xff1f;我国的首个场内期权是50ETF期权&#xff0c;随着投资者对期权产品日渐熟悉&#xff0c;投资者参与数量与交易量稳步增长。 场内期权怎么开户&#xff1f; 满足资金要求&#xff1a;根据监管要…

MyBatis:Parameter Maps collection does not contain value for 报错解决收录

MyBatis&#xff1a;Parameter Maps collection does not contain value for 报错问题解决收录 1.报错收录 后端测试时偶然遇到的用mybatis生成好的mapper文件&#xff0c;报Result Maps collection does not contain value…的错误 2.报错分析 java.lang.ILledalAraumentEx…

必应bing国内广告开户首充和开户费是多少?

微软必应Bing作为国内领先的搜索引擎之一&#xff0c;其广告平台凭借其精准的投放、高效的数据分析和广泛的用户覆盖&#xff0c;已成为众多企业的首选。 根据最新政策&#xff0c;2024年必应Bing国内广告开户预充值金额设定为1万元人民币起。这一调整旨在确保广告主在账户初始…

论文阅读--GLIP

把detection和phrase ground(对于给定的sentence&#xff0c;要定位其中提到的全部物体)这两个任务合起来变成统一框架&#xff0c;从而扩展数据来源&#xff0c;因为文本图像对的数据还是很好收集的 目标检测的loss是分类loss定位loss&#xff0c;它与phrase ground的定位los…

爬虫学习--11.MySQL数据库的基本操作(上)

MySQL数据库的基本操作 创建数据库 我们可以在登陆 MySQL 服务后&#xff0c;使用命令创建数据库&#xff0c;语法如下: CREATE DATABASE 数据库名; 显示所有的数据库 show databases; 删除数据库 使用普通用户登陆 MySQL 服务器&#xff0c;你可能需要特定的权限来创建或者删…

内脏油脂是什么?如何减掉?

真想减的人&#xff0c;减胖是很容易的&#xff0c;但想要形体美又健康&#xff0c;还是得从减内脏油脂开始&#xff0c;那么&#xff0c;问题来了&#xff0c;什么是内脏油脂&#xff1f; 油脂它分部于身体的各个角落&#xff0c;四肢、腹部、腰、臀部、脸、脖子...等&#xf…

VUE3+TS+elementplus创建table,纯前端的table

一、前言 开始学习前端&#xff0c;直接从VUE3开始&#xff0c;从简单的创建表格开始。因为自己不是专业的程序员&#xff0c;编程主要是为了辅助自己的工作&#xff0c;提高工作效率&#xff0c;VUE的基础知识并不牢固&#xff0c;主要是为了快速上手&#xff0c;能够做出一些…

Kubernetes中 Requests 和 Limits 的初步理解

1 灵魂拷问 我们在使用 Kubernetes 时是否遇到以下情况&#xff1a; 你会不会部署负载的时候将 CPU requests/limits 设置得过低或过高&#xff1f;你会不会部署负载的时候将 内存 requests/limits 设置得过低或过高&#xff1f;又或者你根本不设置 requests/limits&#xff…

SVN创建项目分支

目录 背景调整目录结构常规目录结构当前现状目标 调整SVN目录调整目录结构创建项目分支 效果展示 背景 当前自己本地做项目的时候发现对SVN创建项目不规范&#xff0c;没有什么目录结构&#xff0c;趁着创建目录分支的契机&#xff0c;顺便调整下SVN服务器上的目录结构 调整目…