Redis的慢查询日志功能用于记录执行时间超过给定时长的命令请求,用户可以通过这个功能产生的日志来监视和优化查询速度。
服务器配置有两个和慢查询日志相关的选项:
- slowlog-log-slower-than选项指定执行时间超过多少微秒(1秒等于1000000微秒)的命令请求会被记录到日志上。
举个例子,如果这个选项的值为100,那么执行时间超过100微秒的命令就会被记录到慢查询日志; 如果这个选项的值为500,那么执行时间超过500微秒的命令就会被记录到慢查询日志。
- slowlog-max-len选项指定服务器最多保存多少条慢查询日志。
服务器使用先进先出的方式保存多条慢查询日志,当服务器存储的慢查询日志数量等于slowlog-max-len选项的值时,服务器在添加一条新的慢查询日志之前,会先将最旧的一条慢查询日志删除。
服务器状态中包含了几个和慢查询日志功能有关的属性:
slowlog_entry_id 属性的初始值为0,每当创建一条新的慢查询日志时,这个属性的值就会用作新日志的id值,之后程序会对这个属性的值增一。
slowlog链表保存了服务器中的所有慢查询日志,链表中的每个节点都保存了一个slowlogEntry结构,每个slowlogEntry结构代表一条慢查询日志:
图23-2展示了服务器状态中和慢查询功能有关的属性:
打印和删除慢查询日志可以通过遍历 slowlog 链表来完成。slowlog链表的长度就是服务器所保存慢查询日志的数量。新的慢查询日志会被添加到slowlog 链表的表头,如果日志的数量超过slowlog-max-len选项的值,那么多出来的日志会被删除。
我们可以使用 slowlog get
命令查询慢查询日志信息,可以通过 config set slowlog-log-slower-than 微秒
命令来设置超时时间阈值,同时可以通过 config set slowlog-max-len 日志数量
来执行最大保存慢查询日志数量。