我的编程空间,编程开发者的网络收藏夹
学习永远不晚

关于long_query_time参数的一个测试

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

关于long_query_time参数的一个测试

创建测试表,其建表语句如下:

mysql> show create table test1;

+-------+----------------------------------------------------------------------------------------------------------------------------------------------------+

| Table | Create Table                                                                                                                                       |

+-------+----------------------------------------------------------------------------------------------------------------------------------------------------+

| test1 | CREATE TABLE `test1` (

  `a` int(10) DEFAULT NULL,

  `b` varchar(10) DEFAULT NULL,

  KEY `test_index_a` (`a`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8 |

+-------+----------------------------------------------------------------------------------------------------------------------------------------------------+

1 row in set (0.00 sec)


插入测试数据:

mysql> insert into test1 values (1,'a'),(2,'a'),(3,'a'),(4,'d'),(5,'e'),(6,'f'),(7,'g'),(8,'h'),(9,'i'),(10,'j'); 

Query OK, 10 rows affected (0.00 sec)

Records: 10  Duplicates: 0  Warnings: 0


mysql> select * from test1;

+------+------+

| a    | b    |

+------+------+

|    1 | a    |

|    2 | a    |

|    3 | a    |

|    4 | d    |

|    5 | e    |

|    6 | f    |

|    7 | g    |

|    8 | h    |

|    9 | i    |

|   10 | j    |

+------+------+

10 rows in set (0.00 sec)


数据库slow日志相关参数配置:

slow_query_log = 1

slow_query_log_file = /data/mysql/mysql3306/slow_statement.log

long_query_time = 0

log_queries_not_using_indexes = 0



session A:


mysql> set autocommit=0;

Query OK, 0 rows affected (0.00 sec)


mysql> update test1 set b='xx' where b='a';

Query OK, 3 rows affected (0.00 sec)

Rows matched: 3  Changed: 3  Warnings: 0


mysql> commit;

Query OK, 0 rows affected (0.01 sec)



session B:


mysql> update test1 set b='yy' where b='a';


Query OK, 0 rows affected (9.38 sec)

Rows matched: 0  Changed: 0  Warnings: 0


mysql> commit;

Query OK, 0 rows affected (0.00 sec)


慢日志记录:

# Time: 2018-03-30T02:42:16.027553Z

# User@Host: root[root] @ localhost []  Id:    47

# Query_time: 0.001280  Lock_time: 0.000310 Rows_sent: 0  Rows_examined: 10

SET timestamp=1522377736;

update test1 set b='xx' where b='a';

# Time: 2018-03-30T02:42:29.785509Z

# User@Host: root[root] @ localhost []  Id:    47

# Query_time: 0.008619  Lock_time: 0.000000 Rows_sent: 0  Rows_examined: 0

SET timestamp=1522377749;

commit;

# Time: 2018-03-30T02:42:29.785817Z

# User@Host: root[root] @ localhost []  Id:    48

# Query_time: 9.375238  Lock_time: 9.374875 Rows_sent: 0  Rows_examined: 11

SET timestamp=1522377749;

update test1 set b='yy' where b='a';


小结1:当参数long_query_time设置为0,则执行时长大于0s的语句都会记录到slowlog里面。


============================================================================



数据库slow日志相关参数配置:

slow_query_log = 1

slow_query_log_file = /data/mysql/mysql3306/slow_statement.log

long_query_time = 0.0001

log_queries_not_using_indexes = 0


session A:


mysql> set autocommit=0;

Query OK, 0 rows affected (0.00 sec)


mysql> update test1 set b='xx' where b='a';

Query OK, 3 rows affected (0.01 sec)

Rows matched: 3  Changed: 3  Warnings: 0


mysql> commit;

Query OK, 0 rows affected (0.01 sec)


session B;


mysql> set autocommit=0;

Query OK, 0 rows affected (0.00 sec)


mysql> update test1 set b='yy' where b='a';

Query OK, 0 rows affected (8.63 sec)

Rows matched: 0  Changed: 0  Warnings: 0


mysql> commit;

Query OK, 0 rows affected (0.00 sec)


慢日志记录:

# Time: 2018-03-30T02:52:11.214300Z

# User@Host: root[root] @ localhost []  Id:     3

# Query_time: 0.001435  Lock_time: 0.000561 Rows_sent: 0  Rows_examined: 10

SET timestamp=1522378331;

update test1 set b='xx' where b='a';

# Time: 2018-03-30T02:52:25.326360Z

# User@Host: root[root] @ localhost []  Id:     3

# Query_time: 0.007641  Lock_time: 0.000000 Rows_sent: 0  Rows_examined: 0

SET timestamp=1522378345;

commit;

# Time: 2018-03-30T02:52:25.327693Z

# User@Host: root[root] @ localhost []  Id:     4

# Query_time: 8.629981  Lock_time: 8.629332 Rows_sent: 0  Rows_examined: 11

SET timestamp=1522378345;

update test1 set b='yy' where b='a';


小结2:当参数long_query_time设置为0.0001,则执行时长大于0.0001s的语句都会记录到slowlog里面。


=============================================================================


数据库slow日志相关参数配置:

slow_query_log = 1

slow_query_log_file = /data/mysql/mysql3306/slow_statement.log

long_query_time = 1

log_queries_not_using_indexes = 0


session A:


mysql> set autocommit=0;

Query OK, 0 rows affected (0.00 sec)


mysql> update test1 set b='xx' where b='a';

Query OK, 3 rows affected (0.00 sec)

Rows matched: 3  Changed: 3  Warnings: 0


mysql> commit;

Query OK, 0 rows affected (0.00 sec)


session B:


mysql> set autocommit=0;

Query OK, 0 rows affected (0.00 sec)

mysql> update test1 set b='yy' where b='a';

Query OK, 0 rows affected (10.13 sec)

Rows matched: 0  Changed: 0  Warnings: 0


mysql> commit;

Query OK, 0 rows affected (0.00 sec)


慢日志记录:

# Time: 2018-03-30T02:56:32.433616Z

# User@Host: root[root] @ localhost []  Id:     5

# Query_time: 0.001227  Lock_time: 0.000149 Rows_sent: 1  Rows_examined: 1050

SET timestamp=1522378592;

SHOW VARIABLES LIKE 'pid_file';

/usr/local/mysql/bin/mysqld, Version: 5.7.20-log (MySQL Community Server (GPL)). started with:

Tcp port: 3306  Unix socket: /data/mysql/mysql3306/mysql3306.sock

Time                 Id Command    Argument


小结3:当参数long_query_time设置为1,则执行时长不大于1s的语句不会记录到slowlog里面。



总结:从上面3个实验可以发现,参数long_query_time影响了慢SQL在slowlog的记录。只有运行时长大于long_query_time参数的SQL,才会记录到slowlog。这个运行时长,是不包括由于事务锁等待消耗的时间的。

也就是说,exec_time= query_time - lock_time。 当exec_time >= long_query_time的SQL才会被记录到慢SQL里面。很多人会误认为只有query_time>= long_query_time就会记录到slowlog,需要纠正这个认知。


免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

关于long_query_time参数的一个测试

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

关于MySQL死锁检测机制参数innodb_deadlock_detect设置的一点思考

微信公众号中(这里)看到一个关于MySQL的innodb_deadlock_detect与并发相关的细节,觉得比较有意思,也即innodb_deadlock_detect这个参数的设置问题死锁检测是一个MySQL Server层的自动检测机制,可以及时发现两个
关于MySQL死锁检测机制参数innodb_deadlock_detect设置的一点思考
2020-06-09

细思极恐?关于in_array的第3个参数

使用 in_array () 判断数组中是否有某个值,如果省略了第 3 个参数,有时得到的结果可能毫无意义...例如下面这段代码:
2022-07-15

如果这10道关于数据库的测试题你都会,面试必过!

一、什么是数据库测试?数据库测试也称为后端测试。数据库测试分为四个不同的类别。[if !supportLists]· [endif]数据完整性测试[if !supportLists]· [endif]数据有效性测试[if !supportL
2023-06-05

Python创建二维数组实例(关于list的一个小坑)

0.目录 1.遇到的问题 2.创建二维数组的办法 3.1 直接创建法 3.2 列表生成式法 3.3 使用模块numpy创建 1.遇到的问题 今天写Python代码的时候遇到了一个大坑,差点就耽误我交作业了。。。 问题是这样的,我需要创建一个
2022-06-04

JavaScript如何返回数组中通过测试的第一个元素的值

这篇文章给大家分享的是有关JavaScript如何返回数组中通过测试的第一个元素的值的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。返回数组中通过测试(函数fn内判断)的第一个元素的值Array.prototype
2023-06-03

如何测试阿里云服务器配置参数是否正常一份详细的指南

如何测试阿里云服务器配置参数是否正常本篇文章将深入探讨如何测试阿里云服务器的配置参数是否正常,包括测试方法、测试工具和注意事项等。测试阿里云服务器配置参数是否正常是确保服务器稳定运行的关键步骤。这不仅可以帮助我们及时发现并解决潜在问题,还可以确保服务器的性能达到预期。下面是一些详细的测试方法和工具。1.基础硬件测
如何测试阿里云服务器配置参数是否正常一份详细的指南
2024-01-26

我的本地主机上的 websocket 连接数不能超过 28233 个(用于压力测试)| Go 客户端(大猩猩)

问题内容我正在尝试创建连接到同一 websocket 服务器(go 服务器)的客户端池,以测试性能和处理即将到来的请求的能力。例如,我想知道如何才能达到 100k 客户端,因为我看到当我达到 28233 个 gorilla 客户端(we
我的本地主机上的 websocket 连接数不能超过 28233 个(用于压力测试)| Go 客户端(大猩猩)
2024-02-06

在这个数组访问微基准测试中(相对于 GCC),Go 的性能损失了 4 倍,是什么原因造成的?

在这个数组访问微基准测试中(相对于GCC),Go的性能损失了4倍,是什么原因造成的?这个问题涉及到Go语言的运行时机制和编译器优化等多个方面。首先,Go语言在数组访问时使用了边界检查机制,即在每次访问数组元素时都会进行边界检查,这会带来一定
在这个数组访问微基准测试中(相对于 GCC),Go 的性能损失了 4 倍,是什么原因造成的?
2024-02-10

编程热搜

目录