Mysql高级篇(中)—— SQL优化之查询截取分析

news2024/9/22 6:50:52

SQL优化之查询截取分析

  • 一、慢查询日志
    • (1)简述
    • (2)如何开启
    • (3)慢查询日志分析工具介绍(了解)
    • (4)官方工具 mysqldumpslow
      • 简述
      • 如何使用
  • 二、SHOW PROCESSLIST
  • 三、(了解)Show Profile
  • 四、Performance Schema
    • (1)简述
    • (2)特点
    • (3)组成
    • (4)相关表介绍
    • (5)使用实例
  • 五、(了解)全局查询日志(General Query Log)

一、慢查询日志

(1)简述

慢查询日志 记录了所有超过指定时间阈值的 SQL 查询。MySQL 允许你设置一个“慢查询阈值”(long_query_time),如果某个查询执行时间超过这个阈值,就会被记录到慢查询日志中。这个阈值的单位是秒默认值通常为 10 秒

(2)如何开启

默认情况 下,MySQL 的慢查询日志功能是 关闭 的,需要手动启用
查看 慢查询日志是否开启

  • SHOW VARIABLES LIKE '%slow_query_log%'; 查看慢查询日志是否开启 默认情况下slow_query_log 的值为OFF,表示慢查询日志是禁用

方法一:通过 SQL 命令动态启用


SET GLOBAL slow_query_log = 'ON';  -- 开启慢查询日志
SET GLOBAL slow_query_log_file = '/path/to/mysql-slow.log';  -- 设置日志文件路径
SET GLOBAL long_query_time = 2;  -- 设置慢查询的时间阈值(秒)
SET GLOBAL log_queries_not_using_indexes = 1;  -- 记录没有使用索引的查询
SET GLOBAL log_output=FILE  -- 指定 MySQL 慢查询日志的输出目标为文件格式

方法二:修改 MySQL 配置文件

在配置文件 my.cnf[mysqld]下的配置为永久生效


[mysqld]
slow_query_log = 1  # 开启慢查询日志
slow_query_log_file = /var/log/mysql-slow.log  # 指定慢查询日志文件的路径
long_query_time = 2  # 定义慢查询的阈值为2秒(可根据需要调整)
log_queries_not_using_indexes = 1  # (可选)记录没有使用索引的查询
log_output=FILE  # (可选)指定 MySQL 慢查询日志的输出目标为文件格式

log_output=FILE(了解)
在这里插入图片描述

(3)慢查询日志分析工具介绍(了解)

  • 如果您需要详细的日志分析功能,pt-query-digest是一个不错的选择。
  • 如果您倾向于使用官方工具MySQL Enterprise Monitor适合企业级用户。
  • 如果您偏向于简单的命令行工具mysqldumpslow非常容易。
  • 如果您需要图形化界面实时监控风速计GoAccess是较好的选择。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

(4)官方工具 mysqldumpslow

简述

mysqldumpslowMySQL官方自带的一个简单的命令行工具,用于分析MySQL慢查询日志。它可以帮助用户快速获取慢查询日志中的汇总信息,按多种维度(如查询执行次数平均时间返回行数)等)对慢速查询进行排序,然后数据库管理员发现需要优化的SQL查询。

在这里插入图片描述
在这里插入图片描述


如何使用

常见使用示例

> 1. 按【执行时间】排序,显示最慢的10个查询:
mysqldumpslow -s t -t 10 /path/to/mysql-slow.log


> 2. 按【查询次数】排序,显示执行次数最多的5个查询:
mysqldumpslow -s c -t 5 /path/to/mysql-slow.log


> 3. 查看【包含特定关键词】(如SELECT)的慢查询:
mysqldumpslow -g "SELECT" /path/to/mysql-slow.log


> 4. 按【返回行数】排序,顺序显示前20个查询:
mysqldumpslow -s r -t 20 -r /path/to/mysql-slow.log


> 5. 显示所有查询的详细信息,不隐藏参数:
mysqldumpslow -a /path/to/mysql-slow.log

结果输出
在这里插入图片描述

二、SHOW PROCESSLIST

查询 mysql 进程列表,可以杀掉故障进程

还可以通过SHOW FULL PROCESSLIST获取完整的SQL语句,特别是当Info字段的SQL语句非常长时,SHOW PROCESSLIST可能只显示部分内容,而 SHOW FULL PROCESSLIST 会显示完整内容。

在这里插入图片描述

三、(了解)Show Profile

SHOW PROFILEMySQL 中一个 用于诊断和调试查询性能的工具,能够 展示查询在执行时消耗的时间和资源分配情况。通过 SHOW PROFILE,你可以查看一个查询执行的各个阶段所花费的时间,这对于优化慢查询非常有帮助。

虽然 MySQL 5.6 开始,它的功能逐渐被 Performance Schema 替代,但它依然是一个易于使用的性能诊断工具。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

四、Performance Schema

(1)简述

Performance SchemaMySQL用于监控和分析数据库性能的强大工具,它从 MySQL 5.5 开始引入,并逐渐取代了一些旧的性能分析工具,如 SHOW PROFILEPerformance Schema 主要通过收集 MySQL 服务器在运行时的内部数据来帮助用户了解系统的性能表现,尤其是识别系统瓶颈。它可以监控大量的数据库活动,比如 等待事件、锁定、存储引擎的运行情况 等。

(2)特点

  • 低开销: 它被设计为高效、轻量级的监控工具,尽量减少对数据库性能的影响。
  • 灵活性: 可以根据需要启用或禁用监控特定的事件。
  • 可定制性: 用户可以选择监控的粒度,例如全局、会话级别,或者特定的线程、表或用户。

(3)组成

Performance Schema核心是系统表,这些表位于 performance_schema 数据库中,它们存储了各种性能相关的信息。你可以通过查询这些表来分析 MySQL 的性能问题。常用的系统表包括:

  • events_waits_current: 当前正在等待的事件。
  • events_waits_history: 最近的等待事件历史记录。
  • events_statements_current: 当前正在执行的 SQL 语句。
  • events_statements_history: 最近的 SQL 语句历史。
  • threads: 当前活动线程的信息。
  • users: 与用户相关的监控数据。
  • table_io_waits_summary_by_table: 每个表的 I/O 等待情况总结。
  • file_summary_by_instance: 文件实例的 I/O 统计。

(4)相关表介绍

1. 启用 Performance Schema
MySQL 启动时,需要在配置文件 my.cnf 中启用 Performance Schema默认情况下,许多 MySQL 版本已经开启了该功能,但某些系统可能需要手动开启:

[mysqld]
performance_schema = ON

重启 MySQL 服务后,你可以确认 Performance Schema 是否开启:

SHOW VARIABLES LIKE 'performance_schema';

2. 查看监控表
Performance Schema 使用数据库内的表存储监控信息。可以通过 USE performance_schema 来访问这些表。

> 你会看到大量的监控表,每张表记录着不同的系统信息。
USE performance_schema;
SHOW TABLES;

3. 监控等待事件
等待事件是性能问题的一个重要指示器。你可以查看哪些操作在等待资源(例如锁、I/O 等)。

> 这个查询显示了发生等待事件的不同类型和等待的总时间。
SELECT * FROM events_waits_summary_global_by_event_name
WHERE SUM_TIMER_WAIT > 0;

4. 监控 SQL 语句执行
要查看最近执行的 SQL 语句及其性能数据,可以查询 events_statements_history 表:

> 这将显示执行时间最长的最近五条查询,帮助你找出慢查询。
SELECT event_id, sql_text, timer_wait
FROM events_statements_history
ORDER BY timer_wait DESC
LIMIT 5;

5. 监控表 I/O
对于表级别I/O 问题,可以使用 table_io_waits_summary_by_table 表来查看各表的 I/O 情况。

这将列出 I/O 负载最重的表,帮助你识别需要优化的表。

SELECT object_schema, object_name, count_read, count_write, sum_timer_read, sum_timer_write
FROM table_io_waits_summary_by_table
ORDER BY sum_timer_read DESC
LIMIT 10;

6. 监控锁和事务
锁冲突是导致数据库性能问题的重要原因之一。你可以使用 events_waits_history_long 表查看锁相关的信息。

该查询将显示等待最久的表锁,帮助你定位可能的锁冲突。

SELECT event_id, object_type, object_name, timer_wait
FROM events_waits_history_long
WHERE object_type = 'TABLE'
AND object_name IS NOT NULL
ORDER BY timer_wait DESC
LIMIT 10;

7. 监控文件 I/O
文件 I/O 是数据库性能的另一大瓶颈。Performance Schema 提供了 file_summary_by_instance 表,用于监控文件层面的 I/O 操作。

这个查询显示了文件系统层面上读写操作最频繁的文件。

SELECT file_name, count_read, count_write, sum_timer_read, sum_timer_write
FROM file_summary_by_instance
ORDER BY sum_timer_read DESC
LIMIT 10;

(5)使用实例

假设你遇到 MySQL 数据库性能下降的问题,下面是一种诊断步骤:

1. 检查等待事件: 查看哪些事件在等待较长时间,例如 I/O、锁等。


SELECT event_name, SUM_TIMER_WAIT
FROM events_waits_summary_global_by_event_name
WHERE SUM_TIMER_WAIT > 0
ORDER BY SUM_TIMER_WAIT DESC;

2. 检查最近的慢查询: 查看执行时间较长的 SQL 语句。


SELECT sql_text, timer_wait
FROM events_statements_history
ORDER BY timer_wait DESC
LIMIT 5;

3. 分析表的I/O情况: 找出 I/O 负载较高的表,可能需要优化索引或查询。


SELECT object_schema, object_name, count_read, count_write
FROM table_io_waits_summary_by_table
ORDER BY sum_timer_wait DESC
LIMIT 5;

4. 监控文件 I/O: 确认是否有文件系统瓶颈。


SELECT file_name, count_read, count_write, sum_timer_read, sum_timer_write
FROM file_summary_by_instance
ORDER BY sum_timer_wait DESC
LIMIT 5;



Performance Schema 和其他工具的对比

  • SHOW PROFILE: 简单易用,但只适合分析单个查询的执行性能
    Performance Schema 则是全局的、实时的监控工具,可以提供更多维度的性能数据。

  • EXPLAIN: 主要用于 显示查询的执行计划,帮助用户理解查询优化器如何选择索引及执行路径;
    Performance Schema 则侧重于运行时的实际性能分析


总结
Performance SchemaMySQL 的高级性能监控工具,可以帮助用户深入了解系统的运行状况。通过对等待事件、SQL 语句、锁定、I/O 等关键领域的监控,用户可以迅速定位数据库的性能瓶颈,并进行针对性的优化。它比 SHOW PROFILEEXPLAIN 更加全面,适用于复杂的性能调优和监控任务。

五、(了解)全局查询日志(General Query Log)

全局查询日志(General Query Log)MySQL用于记录服务器接收到的每一个SQL语句和管理命令的日志工具。它非常适合用来调试和监控数据库的所有活动,无论查询是否或失败都可以记录下来。虽然它可以帮助了解数据库内部正在发生的操作,但由于它的高开销,不建议在高负载生产环境中长期启用

  • 永远不要在生产环境开启这个功能

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

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

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

相关文章

网络安全详解

目录 引言 一、网络安全概述 1.1 什么是网络安全 1.2 网络安全的重要性 二、网络安全面临的威胁 2.1 恶意软件(Malware) 2.2 网络钓鱼(Phishing) 2.3 中间人攻击(Man-in-the-Middle Attack) 2.4 拒…

让C#程序在linux环境运行

今晚花一些时间,总结net程序如何在linux环境运行的一些技术路线。 1、采用.Net Core框架 NET Core 使用了 .NET Core Runtime,它可以在 Windows、Linux 和 macOS 等多个操作系统上运行。可以采用Visual Studio生成Linux版本的dll。 在Linux系统中&…

救生圈检测系统源码分享

救生圈检测检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer Visio…

Python基础学习(3)

目录 一,函数 1,函数的定义 2,函数的参数 1,默认值 2,传参 3,返回值 4,变量的作用域 5,函数的调用 二,常用数据结构 1,列表 列表的定义 列表的特性…

机器学习的应用领域

机器学习在许多领域有广泛的应用,下面列出了一些主要的应用领域及其典型应用: 1. 图像识别 人脸识别:用于解锁手机、自动标记照片、监控安全系统。物体识别:应用于自动驾驶汽车、机器人、医疗影像分析中,帮助机器理解…

vue3 TagInput 实现

效果 要实现类似于下面这种效果 大致原理 其实是很简单的,我们可以利用 element-plus 组件库里的 el-tag 组件来实现 这里我们可以将其抽离成一个公共的组件,那么现在有一个问题就是通讯问题 这里我们可以利用父子组件之间的通讯,利用 v-model 来实现,父组件传值,子组…

蓝桥杯15届C/C++B组省赛题目

问题描述 小蓝组织了一场算法交流会议,总共有 5050 人参加了本次会议。在会议上,大家进行了握手交流。按照惯例他们每个人都要与除自己以外的其他所有人进行一次握手 (且仅有一次)。但有 77 个人,这 77 人彼此之间没有进行握手 (但这 77 人与…

Unity数据持久化4——2进制

概述 基础知识 各类型数据转字节数据 文件操作相关 文件相关 文件流相关 文件夹相关 练习题 using System; using System.Collections; using System.Collections.Generic; using System.IO; using System.Text; using UnityEngine;public class Exercises1 : MonoBehaviour {/…

金融科技与银行业的数字化转型

随着科技的迅猛发展,金融科技已经成为推动银行业数字化转型的重要力量。从移动支付到区块链,再到人工智能,这些新兴技术正逐渐改变银行的运作方式,不断提高银行的服务效率、提升客户体验,并推动整个金融生态系统的变革…

大数据-143 - ClickHouse 集群 SQL 超详细实践记录!

点一下关注吧!!!非常感谢!!持续更新!!! 目前已经更新到了: Hadoop(已更完)HDFS(已更完)MapReduce(已更完&am…

代码编辑器 —— Notepad++ 实用技巧

目 录 NotePad常用技巧一、查找二、标记三、插件四、自动补全 NotePad常用技巧 Notepad 的吉祥物是一只变色龙。它广泛应用于编程、网页开发、文本处理、脚本编写、文档编辑等领域。 一起看看它有哪些功能和特点: 1、对众多编程语言提供语法高亮显示 2、可折叠函数…

redis简单使用与安装

redis redis 是什么 Redis 是一个开源的,使用 C 语言编写的,支持网络交互的,内存中的Key-Value 数据结构存储系统,支持多种语言,它可以用作数据库、缓存和消息中间件。 一、存储系统特性 内存存储与持久化 Redis 主要将数据存储在内存中,这…

某省公共资源交易中心爬虫逆向分析

目标网站 aHR0cHM6Ly95Z3AuZ2R6d2Z3Lmdvdi5jbi8jLzQ0L3NjenQteHEvP3VzZXJJZD02NzM4OTg2MzkyNjA3NzAzMDQmcm93SWQ9NTI1MDYyMDI2ODg0NzE2NTQ0JnRpbWU9MjAwOC0xMS0yNiZjZXJ0aWZpY2F0ZU5vPTkxNDQwOTA0NjgyNDI2MzU4QyZjZXJ0aWZpY2F0ZVR5cGU9Mjg 一、抓包分析 请求头参数加密 二、…

【C语言-数据结构】单链表的定义

单链表的定义(实现) 比较顺序表和单链表的物理存储结构就能够清楚地发现二者的区别 用代码定义一个单链表 typedef struct LNode{ElemType data; //每个结点存放一个数据元素struct LNode* next; //指针指向下一个结点 }LNode, *LinkList;//要表示一个…

微信CRM系统适合什么企业?

CRM(客户关系管理)系统适合多种行业和企业,包括但不限于:传统制造业、互联网行业、电商行业、医疗行业、教育行业、交通运输行业、汽车行业、房地产行业、金融行业、银行 CRM的功能覆盖了与客户接触的各个阶段,包括售…

python --PyAibote自动化

官文: https://www.pyaibote.com/ 下载安卓集成环境: 可以看到开发的一些信息

【AI视频】AI虚拟主播制作网站推荐

一、什么是AI虚拟主播? AI虚拟主播是一种利用人工智能技术打造的虚拟主持人,也被称为数字虚拟主持人。它们通常是由人工智能技术和三维建模技术结合而成,可以在各种平台上进行主持工作,如新闻报道、电商直播、综艺娱乐等。 AI虚…

华润电力最新校招社招润择认知能力测评:逻辑推理数字计算语言理解高分攻略

​ 尊敬的求职者们, 在您准备加入华润电力这个大家庭之前,了解其招聘测评的详细流程和要求是至关重要的。以下是我们为您整理的测评系统核心内容,希望对您的求职之旅有所帮助。 测评系统概览 华润电力的招聘测评系统旨在全面评估求职者的认…

【全网最全】2024年华为杯研赛B题成品论文获取入口(后续会更新)

您的点赞收藏是我继续更新的最大动力! 一定要点击如下的卡片,那是获取资料的入口! 点击链接加入【2024华为杯研赛资料汇总】:https://qm.qq.com/q/hMgWngXvcQhttps://qm.qq.com/q/hMgWngXvcQ你是否在寻找数学建模比赛的突破点&a…

二叉树(二)深度遍历和广度遍历

一、层序遍历 广度优先搜索:使用队列,先进先出 模板: 1、定义返回的result和用于辅助的队列 2、队列初始化: root非空时进队 3、遍历整个队列:大循环while(!que.empty()) 记录每层的size以及装每层结果的变量&a…