Redis 的慢查询讲解

许多存储系统(例如MySQL)提供慢查询日志帮助开发和运维人员定位系统存在的慢操作。所谓慢查询日志就是系统在命令执行前后计算每条命令的执行时间,当超过预设阈值,就将这条命令的相关信息(例如:发生时间、耗时、命令的详细信息)记录下来,Redis也提供了类似的功能。


Redis 命令的执行过程

请添加图片描述

慢查询日志的参数

slowlog-log-slower-than:指定执行时间超过多少微秒(1秒等于1000000微秒) 的命令请求会被记录到日志上。

举个栗子:如果这个选项值为100,那么执行时间超过100微秒的命令就会被记录到慢查询日志;如果这个选项值为500,那么执行时间超过500微秒的命令就会被记录到慢查询日志。


slowlog-max-len:指定服务器最多保存多少条慢查询操作,服务器先进先出的方式保存多条慢查询日志,当服务器存储的慢查询数量等于slowlog-log-len选项值时,服务器在添加一条新的慢查询日志之前,会先将对旧的一条慢日志先删除。

举个栗子:如果服务器 slowlog-log-len 的值为100,并且假设服务器已经存储了100条慢查询日志,那么如果服务器打算添加一条新的慢查询日志的话,他就必须先删除目前保存的最旧的那条日志,然后在添加新日志。

实际现象如下:

先使用config set命令将 slow-log-slower-than 参数的设置为0微秒,这样 redis 服务器执行的任何命令都会记录到慢查询日志中。接着把 slowlog-max-len 参数的值设置的5,让服务器最多只保存5条慢查询记录

127.0.0.1:6379> config set slowlog-log-slower-than 0
OK
127.0.0.1:6379> config set slowlog-max-len 5
OK
127.0.0.1:6379>

下面我们使用redis客户端发送几个请求:

127.0.0.1:6379> set msg "hello world"
OK
127.0.0.1:6379> set number 10086
OK
127.0.0.1:6379> set database "Redis"
OK
127.0.0.1:6379> set sql mysql
OK
127.0.0.1:6379> set nosql memcache
OK
127.0.0.1:6379>

然后使用slowlog get来查看服务器所保存的慢查询日志:

127.0.0.1:6379> slowlog get
1) 	1) (integer) 6			 #日志的唯一标识符
	2) (integer) 1610158493  #命令执行时的Unix时间戳
	3) (integer) 11 		 #命令执行的时长,以微秒计算
	4) 	1) "set" 			 #命令以及命令参数
		2) "nosql"
		3) "memcache"
		5) "127.0.0.1:40024"
		6) ""
2) 	1) (integer) 5
	2) (integer) 1610158478
	3) (integer) 10
	4) 	1) "set"
		2) "sql"
		3) "mysql"
		5) "127.0.0.1:40024"
		6) ""
3) 	1) (integer) 4
	2) (integer) 1610158457
	3) (integer) 9
	4) 	1) "set"
		2) "database"
		3) "Redis"
		5) "127.0.0.1:40024"
		6) ""
4) 	1) (integer) 3
	2) (integer) 1610158437
	3) (integer) 20
	4) 	1) "set"
		2) "number"
		3) "10086"
		5) "127.0.0.1:40024"
		6) ""
5) 	1) (integer) 2
	2) (integer) 1610158422
	3) (integer) 21
	4) 	1) "set"
		2) "msg"
		3) "hello world"
		5) "127.0.0.1:40024"
		6) ""
127.0.0.1:6379>

慢查询日志的保存

服务器状态中包含了几个慢查询日志功能有关的属性:

struct redisServer {

	//...
	//下一个慢查询日志的ID
	long long slowlog_entry_id;
	
	//保存了所有查询日志的链表
	list *slowlog;
	
	//服务器配置slowlog-log-slower-than选项的值
	long long slowlog_log_slower_than;
	
	//服务器配置slowlog-max-len的值
	unsigned long slowlog_max_len;
	
	//...
	
}

slowlog_entry_id 属性的初始值为0,每当创建一天新的慢查询日志时,这个属性值就会作用到新日志的 id 值,之后程序会对这个属性的值增一。请添加图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值