慢sql监控

2023-11-03

1、开启慢sql日志

1.1 windows

window的mysql配置,编辑C:\ProgramData\MySQL\MySQL Server 5.7\my.ini,添加如下

#是否开启慢查询日志,1表示开启,0表示关闭
slow_query_log = 1
#慢查询日志存储路径
slow_query_log_file = D:/mysql/log/mysqlslowquery.log
#慢查询阈值,超过1秒,记录日志
long_query_time = 1

重启mysql

1.2 linux

配置文件

>vim /etc/my.cnf

#是否开启慢查询日志,1表示开启,0表示关闭
slow_query_log = 1
#慢查询日志存储路径
slow_query_log_file = /opt/mysql/mysqlslowquery.log
#慢查询阈值,超过1秒,记录日志
long_query_time = 1

因为mysql的linux用户为mysql,需要将权限授权给mysql

>chown -R mysql:mysql mysql/

1.3 查看是否开启成功

mysql> show variables like "%slow_query_log%";
+---------------------+-------------------------------+
| Variable_name       | Value                         |
+---------------------+-------------------------------+
| slow_query_log      | ON                            |
| slow_query_log_file | /opt/mysql/mysqlslowquery.log |
+---------------------+-------------------------------+
2 rows in set (0.24 sec)

2、示例

2.1 创建表

CREATE TABLE `user2` (
  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT 'id',
  `name` varchar(255) NOT NULL COMMENT '姓名',
  `age` int(11) NOT NULL COMMENT '年龄',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC;

2.2 添加数据

添加一条数据

INSERT INTO `user2`(`name`, `age`) VALUES ('测试0', 12); #第一次添加数据

重复添加,直到数据达到百万级以上

insert into user2(name,age) select name,age from user2;

2.3 生成慢sql日志

>select count(*) from user;

消耗时间超过1秒,日志记录

# Time: 2020-05-13T12:04:34.134555Z
# User@Host: root[root] @ localhost [::1]  Id:     3
# Query_time: 1.213271  Lock_time: 0.000000 Rows_sent: 1  Rows_examined: 5242880
SET timestamp=1589371474;
select count(*) from user;

慢sql

>update user2 set `name`=CONCAT(`name`,id);
>select * from user2 where name="测试10";
>select * from user2 where age=16;

 

 

3、日志分析工具mysqldumpslow

3.1 命令

>mysqldumpslow -h
Option h requires an argument
ERROR: bad option

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 default
                al: average lock time
                ar: average rows sent
                at: average query time
                 c: count
                 l: lock time
                 r: rows sent
                 t: 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

-s 排序方式

  • c:访问计数
  • l:锁定时间
  • r:返回记录
  • al:平均锁定时间
  • ar:平均访问记录数
  • at:平均查询时间

-t 是top n的意思,返回多少条数据。

-g 可以跟上正则匹配模式,大小写不敏感。

3.2 示例

3.2.1 查询返回记录(返回数据条数)最多的3个sql

>mysqldumpslow -s r -t 3 /opt/mysql/mysqlslowquery.log

Reading mysql slow query log from /opt/mysql/mysqlslowquery.log
Count: 5  Time=2.01s (10s)  Lock=0.00s (0s)  Rows=2.0 (10), root[root]@[111.200.40.10]
  select * from user2 where name="S"

Count: 8  Time=1.20s (9s)  Lock=0.00s (0s)  Rows=1.0 (8), root[root]@[111.200.40.10]
  select count(*) from user2

Count: 2  Time=129.66s (259s)  Lock=21.64s (43s)  Rows=0.0 (0), root[root]@[111.200.40.10]
  update user2 set `name`=CONCAT(`name`,id)

count为查询次数

3.2.2 查询平均访问次数最多的3条sql

>mysqldumpslow -s ar -t 3 /opt/mysql/mysqlslowquery.log

Reading mysql slow query log from /opt/mysql/mysqlslowquery.log
Count: 6  Time=2.01s (12s)  Lock=0.00s (0s)  Rows=2.7 (16), root[root]@[111.200.40.10]
  select * from user2 where name="S"

Count: 8  Time=1.20s (9s)  Lock=0.00s (0s)  Rows=1.0 (8), root[root]@[111.200.40.10]
  select count(*) from user2

Count: 2  Time=129.66s (259s)  Lock=21.64s (43s)  Rows=0.0 (0), root[root]@[111.200.40.10]
  update user2 set `name`=CONCAT(`name`,id)

3.2.3 查询平均访问次数最多,并且里面含有name字符的3条sql

>mysqldumpslow -s ar -t 3 -g 'name' /opt/mysql/mysqlslowquery.log

Reading mysql slow query log from /opt/mysql/mysqlslowquery.log
Count: 6  Time=2.01s (12s)  Lock=0.00s (0s)  Rows=2.7 (16), root[root]@[111.200.40.10]
  select * from user2 where name="S"

Count: 2  Time=129.66s (259s)  Lock=21.64s (43s)  Rows=0.0 (0), root[root]@[111.200.40.10]
  update user2 set `name`=CONCAT(`name`,id)

Count: 1  Time=17.12s (17s)  Lock=0.00s (0s)  Rows=0.0 (0), root[root]@[111.200.40.10]
  insert into user2(name,age) select name,age from user2

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

慢sql监控 的相关文章

  • 查询中列的顺序重要吗?

    当从 MySQL 表中选择列时 与表中的顺序相比 选择列的顺序是否会影响性能 不考虑可能覆盖列的索引 例如 您有一个包含行 uid name bday 的表 并且有以下查询 SELECT uid name bday FROM table M
  • mysql-如何向列申请补助?

    用户名 撤销对数据库的选择 Person I set GRANT SELECT id ON database Person TO username localhost 不是工作 gt SELECT secret FROM Person Go
  • MySQL Connector/C++ 库链接错误问题

    PROBLEM 好吧 我一直在尝试遵循 MySQL Forge Wiki 和其他一些网站上的示例代码 这些网站提供了有关如何获得简单数据库连接的教程 但由于某种原因 我的项目总是因链接错误而失败 我可以我自己不明白为什么或如何解决它 我仍在
  • 如何在Mysql中仅将不同的值从一个表复制到另一个表?

    我有一个大约 2 5GB 的 MySql 数据库 表 A 具有以下列 anoid query date item rank url 我刚刚创建了另一个仅包含列的表 b query and date 我想在查询列中插入所有不同的记录 及其各自
  • MySQL 使用 ALTER IGNORE TABLE 出现重复错误

    我的 MySQL 中有一个有重复项的表 我尝试删除重复项并保留一项 我没有主键 我可以通过以下方式找到重复项 select user id server id count as NumDuplicates from user server
  • InnoDB 因读未提交而死锁! - Java - Glassfish - EJB3(JPA/Hibernate)

    几天来 我在使用 Glassfish EJB3 和 Mysql InnoDB 的 Java 应用程序上遇到了死锁问题 配置 Mysql InnoDB Ver 14 12 Distrib 5 0 51a 适用于 debian linux gn
  • 如何正确转义mysql?

    我刚刚发现如果我写 select from tbl where name like foo 然后添加 foo 作为参数及其值 a 用户数据 它不会正确转义 我勒个去 它想要 a 即使我使用参数 我还是忍不住觉得我对 sql 注入持开放态度
  • 无法通过套接字“/var/lib/mysql/mysql.sock”连接到本地 MySQL 服务器 (2)

    当我尝试连接 mysql 时出现以下错误 Can t connect to local MySQL server through socket var lib mysql mysql sock 2 这个错误有解决办法吗 其背后的原因可能是什
  • MySQL 查询计算上个月

    我想计算上个月的订单总额 我收到了从当前日期获取当月数据的查询 SELECT SUM goods total AS Total Amount FROM orders WHERE order placed date gt date sub c
  • 将第三个表链接到多对多关联中的桥接表

    设计这个数据库的正确方法是什么 这是我设置表格的方式 我在名为 教师 的表和名为 仪器 的表之间存在多对多关系 然后我有一个连接两者的桥接表 我想将另一个表与 BRIDGE 表关联起来 意思是乐器 老师的组合 该表有 3 行 指定老师可以教
  • 免费 PHP 登录库 [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 比特纳米。重置mysql根密码

    我如何重置 MySQL 中的 root 密码和帐户 因为我按照如何为其他服务器授予权限的说明操作 并且意外地将 root 用户 Mysql 绑定到其他 IP 地址 现在看来我无法在 localhost 上以管理员身份登录 Thanks 您有
  • 如何在 Play java 中创建数据库线程池并使用该池进行数据库查询

    我目前正在使用 play java 并使用默认线程池进行数据库查询 但了解使用数据库线程池进行数据库查询可以使我的系统更加高效 目前我的代码是 import play libs Akka import scala concurrent Ex
  • 映射 mysql 中同一个表的多个值

    您好 我必须使用另一个表中的值 id 获取文本值 表 1 包含值 ID 表 2 包含名称和值 ID 表 1 SEVERITY OCCURENCE DETECTABILITY 2 3 4 表 2 id name value 1 Very Hi
  • 在 MySQL 中存储表情符号的编码问题:如何使用 Prisma ORM 在 NodeJS 中定义字符排序规则?

    亲爱的 Nodejs 专家和数据库专家 我们在 MySQL 数据库中存储表情符号和其他特殊字符时遇到问题 我们使用 Prisma 得到一个错误 这是我们使用的 ORM 参数无法从排序规则 utf8 general ci 转换为 utf8mb
  • 如何在mysql中选择具有相同值集的列?

    我的桌子是 patients pid name city disease did dname has disease did pid 我想列出具有相同疾病组的患者 pid 和 did 分别是患者和疾病表中的主键 并且是 has diseas
  • 连接 Netbeans 和 MySQL 但出现大整数错误

    所以我正在尝试向我的 Netbeans 数据库 即 MySQL 添加新连接 但我遇到了大整数转换错误 有人可以帮助我吗 详细地 我右键单击现有的MySQL 服务器位于 localhost 3306 root 已断开连接 gt gt 选择co
  • covertJSONtoSQL 在 NiFi 中返回空值

    我正在设计一项工作 使用以下命令将数据从 MySQL 中的数据库转移到另一个数据库 MySQL 执行SQL处理器随后将Avro转换为Json then 将Json转换为SQL then PutSQL如下流程图所示 将JSON转换为SQL返回
  • MySql 5.7 ORDER BY 子句不在 GROUP BY 子句中并且包含非聚合列

    我试图在不禁用 my ini 中的 only full group by 的情况下弄清楚 这是我的查询 SELECT p title COUNT t qty AS total FROM payments t LEFT JOIN produc
  • db:schema:load 与 db:migrate 使用 capistrano

    我有一个 Rails 应用程序 我正在将其移动到另一台服务器 我认为我应该使用 db schema load 来创建 mysql 数据库 因为这是推荐的 我的问题是我正在使用 capistrano 进行部署 并且它似乎默认为 rake db

随机推荐

  • 静电电容

    1 用电容进行ESD的防护只能用数pF到数百pF的小电容 这里关注的不是容量而是串联等效电感参数 静电放电极快 对应极高的频率 耐压的问题不用考虑 因为静电源内阻极高 能量很小 放电时电压跌落极快 2 理论上讲大电容并不会因为时间常数的增加
  • ❤echarts折线图完整使用及详细配置参数

    echarts折线图完整使用及详细配置参数 进入echarts官网 查看案例 下面说说一些echarts图的调节 一 配置echarts具体参数 01 基础版本的折线图 option xAxis type category data Mon
  • 将gif图转成静态图片显示canvas

    需求描述 仅一张gif动图 进入页面 呈现静态图片显示 点击 gif图显示 代码实现
  • uniapp全局分享以及指定页面分享禁用的设置

    1 创建share js文件 module exports onLoad 设置默认的转发参数 share title 默认为小程序名称 path 默认为当前页面路径 imageUrl 默认为当前页面的截图 白名单 const urlList
  • Apollo学习笔记

    Apollo学习笔记 Apollo课程 智能驾驶入门课程 无人驾驶概览 1 软件层分为三层 实时操作系统 RTOS 确保在给定时间内完成特定任务 实时时确保系统稳定性 驾驶安全性的重要要求 通过在Ubuntu Linux操作系统加入Apol
  • 带有Cookie功能的HTTP访问函数,GET,PUT/POST

    define AFX INET SERVICE FTP INTERNET SERVICE FTP define AFX INET SERVICE HTTP INTERNET SERVICE HTTP define AFX INET SERV
  • Oracle删除数据的三种方式

    Oracle删除数据的三种方法 删除表 记录和结构 的语句delete truncate drop drop命令 drop table 表名 例如 删除学生表 student drop table student 注意 1 用drop删除表
  • node.js学习——初始node,node基本介绍,环境安装,运行第一个node程序。

    node js学习 初始node node基本介绍 环境安装 运行第一个node程序 1 node基本介绍 为什么学习Node js 什么是node js Node js的特性 Node js能做什么 2 Node环境安装 环境安装 3 第
  • Oracle中connect by...start with...的使用

    一 语法 大致写法 select from some table where 条件1 connect by 条件2 start with 条件3 其中 connect by 与 start with 语句摆放的先后顺序不影响查询的结果 wh
  • android studio导入源码(来自github上下载的压缩包)

    Francis学习笔记之android studio解决系列一 andorid studio导入源码问题及android studio 中途出错解决办法 一 导入源码 首先看一下从github下载的压缩包解压后文件内容 从上面发现没有gra
  • 【深度长文】循序渐进解读Oracle AWR性能分析报告

    深度长文 循序渐进解读Oracle AWR性能分析报告 原创 2016 10 19 韩锋 DBAplus社群 http mp weixin qq com s biz MzI4NTA1MDEwNg mid 2650757102 idx 1 s
  • Android onNewIntent调用时机

    1 onNewIntent 首先看一下Activity 的生命周期 从图中可知 初次启动 Activity 时 调用顺序为 onCreate gt onStart gt onResume 那么 onNewIntent 是什么时候被触发的呢
  • 动态解析ipv6地址,实现域名访问家里网络

    前提已有IPv6地址 有阿里云的域名 非顶级域名便宜 一般几块一年 脚本实现方式 获取token 如果没有创建一个 获取阿里云AccessToken 修改脚本变量值 运行后运行脚本 即可在域名解析找到新增的记录 因为供应商提供dns不固定
  • 一文带你熟练掌握android的arm32汇编指令。

    1 ARM32的常见指令解析 ADC 带进位加法指令 ADD 加法指令 AND 逻辑与指令 B 分支指令 BIC 位清零指令 BL 带返回的分支指令 BLX 带返回和状态却换的分支指令 BX 带状态却换的分支指令 CDP 协处理器数据操作指
  • 内联函数inline和宏定义

    内联函数inline和宏定义 内联函数的优越性 一 inline定义的类的内联函数 函数的代码被放入符号表中 在使用时直接进行替换 像宏定义一样展开 没有了调用的开销 效率很高 二 类的内敛函数是一个真正的函数 三 使用内联函数inline
  • 【华为OD机试】 比赛的冠亚季军【2023 B卷

    华为OD机试 真题 点这里 华为OD机试 真题考点分类 点这里 题目描述 有N 3 N lt 10000 个运动员 他们的id为0到N 1 他们的实力由一组整数表示 他们之间进行比赛 需要决出冠亚军 比赛的规则是0号和1号比赛 2号和3号比
  • Python网络爬虫--项目实战(2)--起点小说爬取

    一 目标 爬取起点小说一本免费小说 并将所有章节名称和内容都保存到本地 我选择爬取 我真的好想打球 二 分析 2 1 网页分析 ctrl U 进入网页的源代码 输入任意章节名称 可以在代码中找到 初步判定该网页为静态加载的 2 2 反爬分析
  • [整理]Android屏幕适配(不同的屏幕分辨率和尺寸)

    Android屏幕适配 目录 Android屏幕适配 概念区分 换算关系 划分标准 Android手机常见尺寸和对应分辨率 部分Android测试机分析 补充9图的使用说明 在实际开发过程中 会遇到不同的机型 为了让控件和布局要在不同屏幕上
  • oracle-02 基本命令

    step1 eg 这一部分内容会保存到 test sql文件中 step2 step 3 当前用户有哪些表格 SQL gt desc user tables SQL gt select table name from user tables
  • 慢sql监控

    1 开启慢sql日志 1 1 windows window的mysql配置 编辑C ProgramData MySQL MySQL Server 5 7 my ini 添加如下 是否开启慢查询日志 1表示开启 0表示关闭 slow quer