Redis分析慢查询操作的实例教程

什么是慢查询

慢查询的作用:通过慢查询分析,找到有问题的命令进行优化。

和mysql的慢SQL日志分析一样,redis也有类似的功能,来帮助定位一些慢查询操作。

Redis slowlog是Redis用来记录查询执行时间的日志系统。

查询执行时间指的是不包括像客户端响应(talking)、发送回复等IO操作,而单单是执行一个查询命令所耗费的时间。

另外,slow log保存在内存里面,读写速度非常快,因此你可以放心地使用它,不必担心因为开启slow log而损害Redis的速度。

慢查询日志四个属性:

1、第一个字段是每个慢查询唯一标识。

2、处理完命令后的时间戳

3、执行改名了所需要的时间,单位微妙

4、命令的参数列表,是个数组类型

每个慢查询实体的ID都是唯一的,而且不会被重新设置,只会在redis重启后才会重置它.

慢查询参数

首先来关注下慢日志分析对应的两个参数:

1、slowlog-log-slower-than:预设阀值,即记录超过多少时间的记录,默认为10000微秒,即10毫秒。

2、slowlog-max-len:记录慢查询的条数,默认为128条,当超过设置的条数时最早进入队列的将被移除。线上建议增大数值,如:1000,这样可减少队列移除的频率。

127.0.0.1:6379> config get slowlog-log-slower-than
1) "slowlog-log-slower-than"
2) "10000"
127.0.0.1:6379> config get slowlog-max-len
1) "slowlog-max-len"
2) "128"

可以用config set对这两个参数进行调整,或者在配置文件中设置。

################################## SLOW LOG ###################################

# The Redis Slow Log is a system to log queries that exceeded a specified
# execution time. The execution time does not include the I/O operations
# like talking with the client, sending the reply and so forth,
# but just the time needed to actually execute the command (this is the only
# stage of command execution where the thread is blocked and can not serve
# other requests in the meantime).
#
# You can configure the slow log with two parameters: one tells Redis
# what is the execution time, in microseconds, to exceed in order for the
# command to get logged, and the other parameter is the length of the
# slow log. When a new command is logged the oldest one is removed from the
# queue of logged commands.

# The following time is expressed in microseconds, so 1000000 is equivalent
# to one second. Note that a negative number disables the slow log, while
# a value of zero forces the logging of every command.
slowlog-log-slower-than 10000

# There is no limit to this length. Just be aware that it will consume memory.
# You can reclaim memory used by the slow log with SLOWLOG RESET.
slowlog-max-len 128

慢查询命令

语法:slowlog subcommand [argument]

如,进行查询慢查询、获取慢查询记录的数量、重置慢查询日志等操作:

192.168.10.38:9001> slowlog get
(empty list or set)
192.168.10.38:9001> slowlog get 10
(empty list or set)
192.168.10.38:9001> slowlog len
(integer) 0
192.168.10.38:9001> slowlog reset
OK

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对我们的支持。

(0)

相关推荐

  • Node.js操作redis实现添加查询功能

    在实际开发中,免不了要操作mysql,mongodb,redis等数据存储服务器.这里先简单介绍如何操作redis. 一个例子 关于redis服务端的安装这里不再介绍,重点不在这里.感兴趣的可以自行安装. 对于一个新的模块,我们需要在我们的项目中先安装redis模块才能用. 命令 cnpm install redis 新建一个redis.js的文件,代码如下: //引入redis var redis = require("redis"); //创建redis客户端 var client

  • 在ssm项目中使用redis缓存查询数据的方法

    在项目中常常需要后台程序的持久层查询数据库来获取数据,然后将数据交给服务层.控制层,最后才交给视图层.如果数据访问缓慢,就会影响程序的运行. 为了加快程序的运行,可以将数据放入缓存中,包括数据缓存和页面缓存. 所谓缓存,就是将程序或系统经常要调用的对象存在内存中,一遍其使用时可以快速调用,不必再去创建新的重复的实例.这样做可以减少系统开销,提高系统效率. 其中页面缓存主要是oscache,可以整页或者指定网页某一部分缓存,同时指定他的过期时间,这样在此时间段里面访问的数据都是一样的 . 数据缓存

  • Spring AOP实现Redis缓存数据库查询源码

    应用场景 我们希望能够将数据库查询结果缓存到Redis中,这样在第二次做同样的查询时便可以直接从redis取结果,从而减少数据库读写次数. 需要解决的问题 操作缓存的代码写在哪?必须要做到与业务逻辑代码完全分离. 如何避免脏读? 从缓存中读出的数据必须与数据库中的数据一致. 如何为一个数据库查询结果生成一个唯一的标识?即通过该标识(Redis中为Key),能唯一确定一个查询结果,同一个查询结果,一定能映射到同一个key.只有这样才能保证缓存内容的正确性 如何序列化查询结果?查询结果可能是单个实体

  • Redis分析慢查询操作的实例教程

    什么是慢查询 慢查询的作用:通过慢查询分析,找到有问题的命令进行优化. 和mysql的慢SQL日志分析一样,redis也有类似的功能,来帮助定位一些慢查询操作. Redis slowlog是Redis用来记录查询执行时间的日志系统. 查询执行时间指的是不包括像客户端响应(talking).发送回复等IO操作,而单单是执行一个查询命令所耗费的时间. 另外,slow log保存在内存里面,读写速度非常快,因此你可以放心地使用它,不必担心因为开启slow log而损害Redis的速度. 慢查询日志四个

  • MongoDB 查询操作的实例详解

    MongoDB 查询操作的实例详解 使用find或findOne进行查询.并可以进行范围查询.数据集查询.不等式查询,以及其他的一些查询. 查询将会返回DBcursor 游标只有在你需要的时候返回文档 针对游标返回的文档(结果集) 进行操作 例如:忽略一定数量的结果,或者返回结果的数量,以及对结果的排序. 1.指定需要返回的键 有时候仅仅对文档的某几个键值感兴趣,可以屏蔽返回的不感兴趣的键值,返回感兴趣的键值 mongos> db.blog.find({},{"name":1})

  • Vue.js进行查询操作的实例详解

    Vue.js进行查询操作的实例详解 实例代码: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <script src="../lib/vue.min.js" type="text/javascript" ></script> <title>字符转换</title> </head>

  • php mysql PDO 查询操作的实例详解

    php mysql PDO 查询操作的实例详解 <?php $dbh = new PDO('mysql:host=localhost;dbname=access_control', 'root', ''); $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $dbh->exec('set names utf8'); /*添加*/ //$sql = "INSERT INTO `user` SET `log

  • MySQL使用正则表达式进行查询操作经典实例总结

    本文实例总结了MySQL使用正则表达式进行查询操作.分享给大家供大家参考,具体如下: 字符"^"匹配特定字符 SELECT * FROM fruits WHERE f_name REGEXP '^b'; 字符'$'特定字符结尾 SELECT * FROM fruits WHERE f_name REGEXP 'y$'; 字符"."代替字符串中的任意一个字符 SELECT * FROM fruits WHERE f_name REGEXP 'a.g'; 星号"

  • MySQL中列子查询与行子查询操作的学习教程

    MySQL 列子查询及 IN.ANY.SOME 和 ALL 操作符的使用 MySQL 列子查询 列子查询是指子查询返回的结果集是 N 行一列,该结果通常来自对表的某个字段查询返回. 一个列子查询的例子如下: SELECT * FROM article WHERE uid IN(SELECT uid FROM user WHERE status=1) 列子查询中使用 IN.ANY.SOME 和 ALL 操作符 由于列子查询返回的结果集是 N 行一列,因此不能直接使用 = > < >= &l

  • python针对Oracle常见查询操作实例分析

    本文实例讲述了python针对Oracle常见查询操作.分享给大家供大家参考,具体如下: 1.子查询(难): 当进行查询的时候,发现需要的数据信息不明确,需要先通过另一个查询得到, 此查询称为子查询: 执行顺序:先执行子查询得到结果以后返回给主查询 组成部分: 1).主查询部分 2).子查询部分 [注意事项]: 子查询一定需要被定义/包裹在小括号内部,可以认为是显示的提升了代码执行的优先级 需求1: 查询薪资比Abel的高的有谁? 分析: ①.先查询出Abel的薪资是多少? ②.将过滤条件定义为

  • mysql多表联合查询操作实例分析

    本文实例讲述了mysql多表联合查询操作.分享给大家供大家参考,具体如下: MySQL多表联合查询是MySQL数据库的一种查询方式,下面就为您介绍MySQL多表联合查询的语法,供您参考学习之用. MySQL多表联合查询语法: 复制代码 代码如下: SELECT * FROM 插入表 LEFT JOIN 主表 ON t1.lvid=t2.lv_id select * from mytable,title where 表名1.name=表名2.writer ; mysql版本大于4.0,使用UNIO

  • tp5(thinkPHP5框架)时间查询操作实例分析

    本文实例讲述了tp5(thinkPHP5框架)时间查询操作.分享给大家供大家参考,具体如下: 在项目中 可能会遇到 跨月份进行查询 比如在 当输入201809 会获取当月的开始时间$start_month 和 结束时间 $end_month 会查询2018年9月份的数据 但是当其中的一个数据是在201809到201810 ,数据库的字段是 start_time end_time 这时候 Db::name("表名")->where('start_time','<= time'

  • tp5.1框架数据库子查询操作实例分析

    本文实例讲述了tp5.1框架数据库子查询操作.分享给大家供大家参考,具体如下: 首先构造子查询SQL,可以使用下面三种的方式来构建子查询. 使用fetchSql方法 fetchSql方法表示不进行查询而只是返回构建的SQL语句,并且不仅仅支持select,而是支持所有的CURD查询. $subQuery = Db::table('think_user') ->field('id,name') ->where('id', '>', 10) ->fetchSql(true) ->

随机推荐