MySQL日志(一)—— 慢查询日志slow log

article/2025/10/1 7:24:29

一、慢查询日志(slow log)

慢查询日志,就是查询超过一定的时间没有返回结果的时候,MySQL会将执行的SQL记录到日志中,这个日志,就称为慢查询日志。通过分析慢查询日志,可以快速找出执行慢的SQL语句,然后进行优化。

慢查询主要的参数如下,后面会具体说明这几个参数:

+---------------------------------------+----------------------------------+---------------------------------------------
| Variable_name                         | Value                            | Content                                     
+---------------------------------------+----------------------------------+---------------------------------------------
| slow_query_log                        | OFF                              |开启慢查询                                   
| long_query_time                       | 10.000000                        |慢查询时间阈值,执行时间超过阈值的SQL才会记录
| log_output                            | FILE                             |慢查询日志存储形式:FILE、TABLE              
| slow_query_log_file                   | /var/lib/mysql/hostname-slow.log |慢日志存放位置                               
| log_queries_not_using_indexes         | OFF                              |记录任何不使用索引的sql                      
| log_throttle_queries_not_using_indexes| 0                                |每分钟允许记录到slow log的且未使用索引的SQL语句次数
+---------------------------------------+----------------------------------+---------------------------------------------

二、慢查询日志相关参数

1、是否启用慢查询日志(slow_query_log)

默认情况下,MySQL并不开启慢查询日志,需要手动开启

show variables like 'slow_query_log';
mysql> show variables like 'slow_query_log';
+----------------+-------+
| Variable_name  | Value |
+----------------+-------+
| slow_query_log | OFF    |
+----------------+-------+
1 row in set (0.02 sec)

通过修改MySQL配置文件开启慢查询日志 

 

2、记录慢查询SQL时间(long_query_time)

慢查询日志还有一个重要参数 long_query_time,MySQL默认慢查询日志时间为10秒,通过修改long_query_time这个阈值来修改默认大小。 设置long_query_time的值后,MySQL数据库会记录执行时间超过该值的所有SQL语句,执行时间正好等于long_query_time的SQL语句并不会被记录下来。

mysql> show variables like 'long_query_time';
+-----------------+-----------+
| Variable_name   | Value     |
+-----------------+-----------+
| long_query_time | 10.000000 |
+-----------------+-----------+
1 row in set (0.00 sec)
slow_query_log=on            --开启慢查询日志
slow_query_log_file=slow-log --指定保存路径及文件名,默认为数据文件目录,hostname-slow.log
long_query_time=1            --指定多少秒返回查询的结果为慢查询

重启MySQL,再次查询:

mysql> show variables like 'slow_query_log';
+----------------+-------+
| Variable_name  | Value |
+----------------+-------+
| slow_query_log | ON    |
+----------------+-------+
1 row in set (0.02 sec)mysql> show variables like 'long_query_time';
+-----------------+----------+
| Variable_name   | Value    |
+-----------------+----------+
| long_query_time | 1.000000 |
+-----------------+----------+
1 row in set (0.00 sec)

此时,MySQL的数据目录会生成慢查询日志文件:

-rw-r----- 1 mysql mysql       180 Sep 11 16:33 slow-log

我们执行一条耗时比较长的SQL,然后查看慢查询日志文件

[root@jeespring mysql]# mysqldumpslow slow-log Reading mysql slow query log from slow-log
Count: 1  Time=25.13s (25s)  Lock=0.00s (0s)  Rows=1.0 (1), root[root]@[223.70.230.100]SELECT * FROM `t_user1` where email='S'

3、是否记录没有使用索引的SQL(log_queries_not_using_indexes)

另一个和慢查询日志有关的参数是log_queries_not_using_indexes,如果运行的SQL语句没有使用索引,则MySQL数据库同样会将这条SQL语句记录到慢查询日志文件。

mysql> show variables like 'log_queries_not_using_indexes';
+-------------------------------+-------+
| Variable_name                 | Value |
+-------------------------------+-------+
| log_queries_not_using_indexes | OFF   |
+-------------------------------+-------+
1 row in set (0.00 sec)

开启没有使用索引记录慢查询日志的阈值 

mysql> set global log_queries_not_using_indexes=1;
Query OK, 0 rows affected (0.00 sec)mysql> show variables like 'log_queries_not_using_indexes';
+-------------------------------+-------+
| Variable_name                 | Value |
+-------------------------------+-------+
| log_queries_not_using_indexes | ON    |
+-------------------------------+-------+
1 row in set (0.00 sec)

执行一条简单的没有使用到索引的SQL,执行完后,查看慢查询日志,这条SQL便被记录下下来。

mysql> SELECT * FROM `account` account where name ='user1';
+----+-------+-------+---------------+-------+
| id | name  | money | account       | level |
+----+-------+-------+---------------+-------+
|  1 | user1 |   500 | user1@163.com | 1     |
+----+-------+-------+---------------+-------+
[root@jeespring mysql]# mysqldumpslow slow-log Reading mysql slow query log from slow-log
Count: 1  Time=25.13s (25s)  Lock=0.00s (0s)  Rows=1.0 (1), root[root]@[223.70.230.166]SELECT * FROM `t_user1` where email='S'Count: 3  Time=0.00s (0s)  Lock=0.00s (0s)  Rows=1.0 (3), root[root]@localhostSELECT * FROM `account` account where name ='S'

4、log_throttle_queries_not_using_indexes

MySQL 5.6.5版本开始新增了一个参数log_throttle_queries_not_using_indexes,用来表示每分钟允许记录到slow log的且未使用索引的SQL语句次数。该值默认为0,表示没有限制。在生产环境下,若没有使用索引,此类SQL语句会频繁地被记录到slow log,从而导致slow log文件的大小不断增加。

mysql> show variables like 'log_throttle_queries_not_using_indexes';
+----------------------------------------+-------+
| Variable_name                          | Value |
+----------------------------------------+-------+
| log_throttle_queries_not_using_indexes | 0     |
+----------------------------------------+-------+
1 row in set (0.00 sec)

生产上的一般采用的配置如下: 

 

5、log_output(不推荐修改)

慢查询的日志记录另外一种存储形式就是表。慢查询表默认在mysql数据库,表名为slow_log,其表结构定义如下: 

mysql> show create table slow_log\G
*************************** 1. row ***************************Table: slow_log
Create Table: CREATE TABLE `slow_log` (`start_time` timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6),`user_host` mediumtext NOT NULL,`query_time` time(6) NOT NULL,`lock_time` time(6) NOT NULL,`rows_sent` int(11) NOT NULL,`rows_examined` int(11) NOT NULL,`db` varchar(512) NOT NULL,`last_insert_id` int(11) NOT NULL,`insert_id` int(11) NOT NULL,`server_id` int(10) unsigned NOT NULL,`sql_text` mediumblob NOT NULL,`thread_id` bigint(21) unsigned NOT NULL
) ENGINE=CSV DEFAULT CHARSET=utf8 COMMENT='Slow log'
1 row in set (0.00 sec)

log_output参数指定了慢查询输出的格式,默认为FILE,可以将它设为TABLE,慢查询的SQL将被存储到mysql数据库中的slow_log表里面。

mysql> show variables like 'log_output';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| log_output    | FILE  |
+---------------+-------+
1 row in set (0.00 sec)mysql> set global log_output='TABLE';
Query OK, 0 rows affected (0.00 sec)mysql> show variables like 'log_output';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| log_output    | TABLE |
+---------------+-------+
1 row in set (0.00 sec)

二、mysqldumpslow的使用

[root@jeespring mysql]# 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

1、查询执行时间最长的10条SQL语句

mysqldumpslow -s al -n 10 slow-log 

2、访问次数最多的10条SQL

mysqldumpslow -s c -t 10 slow-log 


http://chatgpt.dhexx.cn/article/tUO80OMD.shtml

相关文章

【OpenCv3】 VS C++ (五):SLIC超像素分割算法

下一节地址:https://blog.csdn.net/qq_40515692/article/details/102788157 OpenCv专栏:https://blog.csdn.net/qq_40515692/article/details/102885061 超像素(SuperPixel),就是把原本多个像素点,组合成一…

superpixels(超像素)

superpixels(超像素) 1.理解: 超像素不是在普通的像素基础上继续微观细分,超像素是一系列像素的集合,这些像素具有类似的颜色、纹理等特征,距离也比较近。其中超像素比较常用的一种方法是SLIC Semantic Segmentatio…

Seeds超像素分割

#%% SEED超像素分割 import cv2 import numpy as np import imageio # print(dir(cv2.ximgproc))img imageio.imread(rE:\Vaihingen\data\orginalimages\top_mosaic_09cm_area31.tif)[:,:,::-1] converted_img cv2.cvtColor(img, cv2.COLOR_BGR2HSV)# print(type(img_feature…

Python实现超像素分割

目录 一、什么是超像素?二、超像素具有哪些特点?三、Simple Linear Iterative Clustering (SLIC)算法实现步骤四、SLIC算法代码实现五、效果展示和分析六、基于超像素的边缘检测代码七、基于超像素的边缘检测效果展示与分析八、思维扩展参考资料注意事项…

基于Matlab的SLIC超像素分割算法分析

SLIC超像素分割算法分析 1:导入原始照片,初始化聚类中心,按照设定的超像素个数,在图像内均匀的分配聚类中心。假设图片总共有 N 个像素点,预分割为 s 个相同尺寸的超像素,那么每个超像素的大小为N/ s &…

超像素分割算法————综述

参考:超像素—学习笔记 什么是超像素?评价标准?SLIC、SEED、ETPS算法 比较的指标:图像边界的粘附性、算法速度、存储效率、分割性能 超像素算法:将像素组合成感知有意义的原子区域( atomic regions),其可…

超像素分割 SLIC算法 使用示例

参考博客 介绍超像素分割 & SLIC算法 SLIC超像素分割详解(一):简介_计算机视觉life的博客-CSDN博客_slic超像素分割 机器学习:simple linear iterative clustering (SLIC) 算法_Matrix_11的博客-CSDN博客_简单线性迭代聚类…

图像处理: 超像素(superpixels)分割 SLIC算法

原理 超像素概念是2003年Xiaofeng Ren提出和发展起来的图像分割技术,是指具有相似纹理、颜色、亮度等特征的相邻像素构成的有一定视觉意义的不规则像素块。它利用像素之间特征的相似性将像素分组,用少量的超像素代替大量的像素来表达图片特征,很大程度上降低了图像…

超像素SLIC算法源码阅读

超像素SLIC算法源码阅读 超像素SLIC算法源码阅读SLIC简介源码阅读实验结果其他超像素算法对比 超像素SLIC算法源码阅读 SLIC简介 SLIC的全称Simple Linear Iterative Clustering,即简单线性迭代聚类,论文和代码链接如下: 论文传送门&#x…

python 超像素分割

SILC算法超像素分割(源码实现) 主体代码来自github.com/laixintao/slic-python-implementation 原代码中只有分割之后的小方块 即1.png 没有明显边界 没有继续进行图像分割 源码修改: 1.向Cluster类添加了label属性,以便于标记…

超像素分割学习笔记

学习目标 掌握超像素分割的原理、超像素分割方法的推导过程以及实现方法 1.1 超像素 超像素是指将具有相似纹理、颜色、亮度等特征的相邻像素聚合成某一个像素块,结合超像素的思想,这样可以使少量的像素块代替原本大量的像素。 目前超像素广泛应用于图…

SLIC超像素算法

原文出自:https://blog.csdn.net/Fighting_Dreamer/article/details/77170859 SLIC与目前最优超像素算法的比较 Radhakrishna Achanta, Appu Shaji, Kevin Smith, Aurelien Lucchi, Pascal Fua, and Sabine Susstrunk 摘要 近年来,计算机视觉应用越来…

超像素池化全监督语义分割

Efficient semantic image segmentation with superpixel pooling 摘要 在这项工作中,我们评估了超像素池化层在深层网络结构中用于语义分割的应用。超像素池化是一种灵活有效的方法,可以替代其他包含空z间先验信息的池策略。我们提出了一个简单而高效…

SLIC超像素分割算法

SLIC超像素分割算法 《SLIC Superpixels》 摘要 超像素在计算机视觉应用中越来越受欢迎。然而,很少有算法能够输出所需数量的规则、紧凑的超级像素,并且计算开销低。我们介绍了一种新的算法,将像素聚类在组合的五维颜色和图像平面空间中&a…

matlab 超像素合并,超像素区域合并

应广大学术同行的请求,将以往研究的一些代码进行整理,特发布一个学术版本的小软件工具:SuperpixelMerge, 基本功能:实现超像素的区域合并 参数说明:共7个参数,分别为图像路径、超像素分割标记图像路径、输出结果路径、合并准则、合并后区域个数、形状参数、紧凑度参数。详…

超像素—学习笔记

文章目录 概念超像素判别条件超像素初始化的方法超像素算法SLIC算法 参考资料 概念 超像素由一系列位置相邻且颜色、亮度、纹理等特征相似的像素点组成的小区域。这些小区域大多保留了进一步进行图像分割的有效信息,且一般不会破坏图像中物体的边界信息。 超像素是…

超像素采样网络(英伟达)

Superpixel Sampling Networks 摘要 超像素为图像数据提供了一种高效的低/中层次的表示,大大减少了后续视觉任务的图像基元数量。现有的超像素算法是不可微的,这使得它们很难集成到其他端到端可训练的深度神经网络中。我们开发了一种新的超像素采样可微…

超像素、语义分割、实例分割、全景分割

图像分割(Image segmentation)就是根据某些规则把图像中的像素分成不同的部分(打上不同的标签)。 1. 超像素(superpixels) 超像素并不是在普通的像素基础上继续像微观细分,恰恰相反的是&#…

超像素

《超像素》   超像素是一种以聚类思想为初衷的方法,目的是为了对较大像素的图像进行区域划分,来帮助理解,本文介绍了一个开源项目在火灾检测场景使用超像素,比较巧妙,虽然效果不是很理想,但是提供了一个…

超像素学习笔记(1)——概念及判别条件

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、超像素的概念二、超像素判别条件:一般参考三个指标1.Undersegmentation Error(UE)——欠分割误差2.Boundary Recall&…