MySQL 自建数据库慢日志分析

文章目录

    • 前言
    • 1. 参数介绍
      • 1.1 慢日志参数
      • 1.2 慢日志切割
    • 2. pt-query-digest
      • 2.1 离线分析
      • 2.2 在线分析
      • 2.3 常用参数
    • 总结

前言

慢 SQL 是指 MySQL 中执行时间超过指定阈值的语句将被记录到 Slow log 文件中的查询。慢 SQL 的风险是可能随时都会因为某种原因而被触发,并且根据 DBA 的工作经验,数据库最常出现的问题,都是因为慢查询导致数据库慢了,进而导致整个实例雪崩,从而导致了线上故障。因此需要定期治理优化,避免数据库内慢 SQL 堆积很多。

云上数据库,都会提供慢 SQL 的分析功能,使用起来也非常便捷,本篇文章主要讨论自建 MySQL 慢 SQL 如何分析。

1. 参数介绍

1.1 慢日志参数

MySQL 中的慢查询参数如下:

  • long_query_time:慢 SQL 阈值,SQL 耗时大于该值会被存储到慢日志中。
  • slow_query_log_file:慢日志存储的路径。
  • slow_query_log:是否开启慢日志。
  • log_slow_admin_statements:是否将 DDL 语句也写入到慢日志,推荐开启。
  • log_queries_not_using_indexes:是否将未使用索引的 SQL 写入到慢日志,即使没超过阈值。
  • log_output:有 FILE 和 TABLE 两个选项,FILE 表示记录到文件中,TABLE 记录到 mysql.slow_log 表中。

1.2 慢日志切割

为了避免慢日志过大,不仅分析时间长还会消耗服务器资源,更多的是采集后上传的集中服务器统一分析,需要先对慢日志进行切割,本小节介绍切割思路。

  1. 先关闭慢日志:

    set global slow_query_log=0;
    
  2. 对日志进行重命名或移除:

    mv /data/mysql/log/mysql-slow.log /data/mysql/log/mysql-old-slow.log
    
  3. 再次开启慢日志:

    set global slow_query_log=1;
    

2. pt-query-digest

pt-query-digest 含在 Percona Toolkit 中,安装方法可参考 Percona Toolkit Install 这篇文章的 1.1 小节。

2.1 离线分析

使用方法非常简单,直接指定 Slow log 日志路径即可。

pt-query-digest /data/mysql/log/slow.log

输出的报告非常详细,分为三部分,分析数据汇总、SQL 指纹列表、SQL 详情。

下方为分析数据汇总,首先输出工具分析日志时的耗时 CPU 及内存。接着打印了服务器的主机名、当前系统时间以及被分析的文件。

# 40.8s user time, 500ms system time, 62.94M rss, 255.45M vsz
# Current date: Wed Apr 24 14:24:18 2024
# Hostname: 172-16-104-56
# Files: ./slow.log
# Overall: 186.41k total, 488 unique, 0.01 QPS, 0.23x concurrency ________
# Time range: 2023-10-25T20:04:08 to 2024-04-24T12:47:59
# Attribute          total     min     max     avg     95%  stddev  median
# ============     ======= ======= ======= ======= ======= ======= =======
# Exec time        3550982s      1s   2908s     19s     27s     11s     24s
# Lock time            77s       0   205ms   414us   247us     3ms    73us
# Rows sent        492.10M       0  12.13M   2.70k   3.69k 130.80k       0
# Rows examine       1.78T       0 143.65M   9.99M  15.15M   7.13M  15.15M
# Query size       182.06M      17 893.24k   1.00k  563.87   9.77k  174.84
  • Overall:一共分析了 186.41k 个 Slow SQL,形式不一样的有 488 个,后面的 QPS 表示被分析 SQL 的数量除以时间范围 concurrency 表示被分析的 SQL 总耗时除以时间范围。
  • Time range: Slow log 的时间范围。
  • Attribute: 分别给出了 Exec time (执行时间)、Lock time (锁等待时间)、Rows sent (返回客户端总行数)、Rows examine(存储引擎检索的行数)、Query size(SQL 语句文本大小) 五个维度的 total(汇总值)、min(最小值)、max(最大值)、avg(平均值)、95%(95% 查询等于或小于该值)、stddev(标准差)、median(中位数) 等信息。

以下是第二部分 SQL 指纹列表信息,从中可以看到哪个 SQL 耗时最高然后再到详细列表中查找。

# Profile
# Rank Query ID                            Response time   Calls  R/Call  
# ==== =================================== =============== ====== ========
#    1 0x1F3DF74A0FB6D75DF7EE8A4DF97B3ADA  3018133.2433... 122738  24.5900  0.41 SELECT sku_price
#    2 0xCC7FB22A44D4CAD79264BD6D86639C71  128737.4054 ...  16619   7.7464  3.92 SELECT product
#    3 0x96066CBEEFBD4B6761FEC4D79C13AF50  104551.7744 ...   8400  12.4466  1.85 SELECT product
#    4 0x76012B6D3A94358E3DE7446AB2A9E779  73329.0292  ...   5372  13.6502  2.02 SELECT product
#    5 0x6DBFEFE50E3D5CFB209EB13F331CEFB7  67403.5812  ...   4299  15.6789  0.79 SELECT product
#    6 0x0532AA67135641A67F2E9297710D201F  33958.2081  ...   2149  15.8019  0.66 SELECT product
#    7 0xAE6B4B13A66F041AC6E01BD10DA19112  23221.0245  ...   3408   6.8137  5.20 SELECT product
  • Rank:排名,越靠前代表总执行时长最高。
  • Query ID:每一类 SQL 的指纹,查看 SQL 详细执行情况会用到。
  • Response time:总执行时长。
  • Calls:总执行次数。
  • R/Call:平均执行时间。
  • Other:剩下的是平均方差,一般而言平均方差越大,代表 SQL 执行时间波动越大。接下来是 SQL 操作类型以及表名。

接下来介绍 SQL 详情部分,该部分会按照 SQL 列表中的顺序展示 SQL 语句以及详细的执行信息。

# Query 1: 0.04 QPS, 1.00x concurrency, ID 0x1F3DF74A0FB6D75DF7EE8A4DF97B3ADA at byte 101023918
# This item is included in the report because it matches --limit.
# Scores: V/M = 0.41
# Time range: 2023-12-05T14:16:31 to 2024-01-09T14:24:29
# Attribute    pct   total     min     max     avg     95%  stddev  median
# ============ === ======= ======= ======= ======= ======= ======= =======
# Count         65  122738
# Exec time     84 3018133s      1s     90s     25s     29s      3s     24s
# Lock time     12     10s    37us    54ms    77us    93us   311us    66us
# Rows sent      0 479.68k       0    1000    4.00       0   56.36       0
# Rows examine  99   1.76T 338.41k  15.22M  15.02M  15.15M   1.46M  15.15M
# Query size    11  20.62M     172     184  176.20  174.84    0.64  174.84
# String:
# Databases    xxxxx
# Hosts        127.0.0.1
# Users        test_user
# Query_time distribution
#   1us
#  10us
# 100us
#   1ms
#  10ms
# 100ms
#    1s  #
#  10s+  ################################################################
# Tables
#    SHOW TABLE STATUS FROM `xxxxx` LIKE 'sku_price'\G
#    SHOW CREATE TABLE `xxxxx`.`sku_price`\G
# EXPLAIN /*!50100 PARTITIONS*/
SELECT * FROM sku_price WHERE (vendor_id = 11111 AND enabled = 1 AND sku_id > 0) ORDER BY sku_id ASC limit 1000\G

第一行 ID 就是第二部分中的 Query ID,然后就是此类 SQL 的耗时分析,数据库名称、来源、用户等信息。Query_time distribution 给出了当前 SQL 执行耗时的分布情况,从这里可以非常直观的看出 SQL 执行时间是否稳定。

2.2 在线分析

上面的方法是分析历史的慢 SQL,下面的方法是基于会话分析当前的 SQL。比如当前数据库负载比较高,或者你想查看当前正在执行慢 SQL 信息,可以使用下面方法。

pt-query-digest --processlist h=127.0.0.1,P=3306,u=root,p=abc123  --run-time 60s --interval 0.1

命令行中的 --processlist 表示在线采集会话中的 SQL,–run-time 表示采集周期 --interval 表示采集间隔,默认 0.1 秒。

在线分析的输出结果与离线分析的相同,在此不多赘述。

2.3 常用参数

下面介绍 pt-query-digest 的常用参数:

  • –since & --until:分析指定时间段的慢 SQL。

    # 指定时间范围
    pt-query-digest --since='2024-04-22 01:00:00' --until='2024-04-22 16:00:00' slow.log
    # 分析最近 12 小时的慢 SQL
    pt-query-digest --since=12h slow.log
    
  • –limit: 按照总执行耗时排序,只输出指定比例或指定数量的分析结果,默认 95%。

  • –review、–history: 支持将分析结果导入到数据库中。

  • –output: 指定查询结果的分析输出格式,默认为 report,支持的选项有:slowlog、json、json-anon、secure-slowlog。

常用的方法是通过 output=json 对慢日志进行分析,然后将结果集中到分析服务器,然后将慢日志切割。

总结

本篇文章介绍了如何通过 pt-query-digest 对慢日志进行分析,并介绍如何解读分析结果,为后续的 SQL 优化工作奠定了基础。

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

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

相关文章

博客文章导航(实时更新)

一、计算机基础 链接:http://t.csdnimg.cn/ZtfmC 二、软件开发 链接:http://t.csdnimg.cn/cdT6H 三、数据结构与算法 链接:http://t.csdnimg.cn/XfoU0 四、计算机视觉 链接:http://t.csdnimg.cn/p21Y3 五、大语言模型 链…

Mysql--基础知识点--0.1--脏读、不可重复读、幻读

1 脏读、不可重复读、幻读 1.1 脏读 如果一个事务读到了另一个事务已修改且未提交的数据,则发生了脏读现象。 1.2 不可重复读 在一个事务里面多次读取同一个数据,若前后两次读到的数据不一致,则发生不可重复读现象。 1.3 幻读 在一个…

redis7 for windows的安装教程

本篇博客主要介绍redis7的windows版本下的安装教程 1.redis介绍 Redis(Remote Dictionary Server)是一个开源的,基于内存的数据结构存储系统,可用作数据库、缓存和消息代理。它支持多种数据结构,如字符串、哈希表、列…

【软考高项】二十六、范围管理基础内容

一、管理基础 产品范围和项目范围 产品范围强调结果,项目范围强调结果 管理的新实践 :需求一直是项目管理的关注重点,需求管理过程结束于需求关闭,即把产品、服务或成果移交给接收方,以便长期测量、监控、实现并维持收…

three.js 学习笔记 | 光线投射技术 - 包围盒(碰撞检测)

文章目录 three.js 学习笔记光线投射技术实现3D场景交互事件 THREE.Raycaster坐标系的转换案例:选中的模型变为红色 包围盒Box3 - 碰撞检测AABB包围盒辅助器Box3Helper案例1:创建AABB包围盒/包围球computeBoundingBox与boundingBox 搭配使用,…

PHP中的会话管理是如何工作的?

PHP中的会话管理是如何工作的? PHP中的会话管理是一个关键特性,它允许开发者跟踪和识别用户的活动,从而提供个性化的体验。会话管理主要依赖于会话ID、会话数据以及会话存储机制来实现。下面将详细解释PHP中会话管理的工作原理及其各个组成部…

vivado Aurora 8B/10B IP核(1)

Aurora 8B/10B IP 支持 Kintex -7, Virtex -7 FPGA GTP 和 GTH 收发器,Artix -7 FPGA GTP 收发器, Zynq -7000 GTP and GTP 收发器。Aurora 8B/10B IP core 可以工作于单工或者全双工模式。IP CODE的使用也非常简单,支持 AMBA总线的 AXI4-Stream 协议。…

字符串函数及其模拟实现

目录 strlen函数介绍模拟实现 strcpy函数介绍模拟实现 strcat函数介绍模拟实现 strcmp函数介绍模拟实现 strncpy函数介绍模拟实现 strncat函数介绍模拟实现 strncmp函数介绍模拟实现 strtokstrstr函数介绍模拟实现 strerrorperror strlen 函数介绍 函数介绍: 字符串…

Leetcode 17. 电话号码的字母组合

给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。 给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。 示例 1: 输入:digits “23” 输出:[“a…

清华大学 【战略管理的逻辑】全6讲笔记

讨论从20世纪初的企业管理背景入手,讲述了随着经济和技术的进步,企业管理理念和实践所经历的主要变化。 1.战略管理的重要性及其时代演变 在过去的几十年里,企业管理的理念和方法经历了从重视生产效率到注重市场营销,再到强调战略…

React真的好难用

我发现React就像个宗教一样,网络上总有一群信徒。信徒:React天下第一,谁也不能说他不好。 网络上大佬对React的评价一般有几类: React跟Vue比就是手动档和自动档的区别,高手都开手动档。—— 就一个破打工的&#xf…

Qt——代码崩溃 free() invalid pointer

最近在开发中&#xff0c;使用多个QSharedPointer创建智能指针指向c11 写的单例时&#xff0c;出现了程序崩溃&#xff0c;如标题的错误提示&#xff0c;故此记录&#xff1a; 错误代码&#xff1a; QSharedPointer <Singleton>m_test(Singleton.getInstance()); QShare…

cJSON的使用

文章目录 一、CJSON初识二、CJSON解析器基础三、CJSON解析数据JSON解析基础CJSON解析数组数据CJSON解析嵌套数据 五、创建JSON数据 一、CJSON初识 JSON (JavaScript Object Notation)是一种轻量级的数据交换格式&#xff0c;常用于在网络之间传输数据。它是一种文本格式&#…

笔记:.NET的框架梳理及相关概念了解(“.NET Core“ “.NET“ “.NET Framework“)

一、.NET设计 架构&#xff1a;C/C程序是直接将源码编译成机器码&#xff08;CPU可以识别和运行的指令&#xff09;&#xff0c;对于不同CPU&#xff0c;其指令集不同&#xff0c;机器码也就不同&#xff0c;故&#xff1a;C/C程序编译时&#xff0c;需选择具体的CPU架构&…

【系统架构师】-选择题(五)

1、某公司拟开发一个轿车巡航定速系统&#xff0c;系统需要持续测量车辆当前的实时速度&#xff0c;并根据设定的期望速度自动控制轿车的油门和刹车。针对上述需求&#xff0c;采用( 过程控制)架构风格最为合适。 某企业内部现有的主要业务功能已封装成为Web服务。为了拓展业务…

河南新办灌溉排涝乙级资质预算分析

河南新办灌溉排涝乙级资质的预算分析是一个涉及多方面因素的综合考量。以下是对该预算的详细分析&#xff1a; 首先&#xff0c;人员费用是预算中的重要组成部分。这包括聘请符合资质要求的技术人员、工程师和其他相关人员的薪酬、社保等费用。这些费用会根据所需人员的数量、资…

JavaScript云LIS系统源码 前端框架JQuery+EasyUI+后端框架MVC+SQLSuga大型医院云LIS检验系统源码 可直接上项目

JavaScript云LIS系统源码 前端框架JQueryEasyUI后端框架MVCSQLSuga大型医院云LIS检验系统源码 可直接上项目 云LIS系统概述&#xff1a; 云LIS是为区域医疗提供临床实验室信息服务的计算机应用程序&#xff0c;可协助区域内所有临床实验室相互协调并完成日常检验工作&#xff…

【SHADER】Shader实例学习1:UI noise halo

Shader实例学习1&#xff1a;UI noise halo 简介源码注释关键步骤总结 简介 又换方向做图形相关的工作了&#xff0c;门槛确实有一点&#xff0c;数学、图形什么的都要学&#xff0c;算轨迹用到力学什么的也是基本操作。大力出奇迹&#xff0c;跟着shadertoy里的众多大神学起来…

zynq dcache一致性问题

使能dcahce后&#xff0c;写内存不正常。 http://static.stmcu.com.cn/upload/pdf_html/93bd41d6e1e3dfc64cecbea29ccdef41.html FPGA - ZYNQ Cache一致性问题 FPGA - ZYNQ Cache一致性问题-CSDN博客

Unity类银河恶魔城学习记录15-5,6 p157 Audio time limiter p158 Area sound

Alex教程每一P的教程原代码加上我自己的理解初步理解写的注释&#xff0c;可供学习Alex教程的人参考 此代码仅为较上一P有所改变的代码 【Unity教程】从0编程制作类银河恶魔城游戏_哔哩哔哩_bilibili​​ AreaSound.cs using System.Collections; using System.Collections.G…