博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Redis慢查询,redis-cli,redis-benchmark,info
阅读量:6445 次
发布时间:2019-06-23

本文共 8883 字,大约阅读时间需要 29 分钟。

一、慢查询:

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

2、慢查询的redis的配置参数:

slowlog-log-slower-than    慢查询预设阈值(单位是微秒1秒=1000000微秒)slowlog-max-len    慢查询最多存多少条

修改慢查询有两种方法:

1、直接在redis.conf上修改。2、在redis的shell里面修改:config set slowlog-log-slower-than 20000config set slowlog-man-len 1000config rewrite      #持久化写入到本地文件

慢查询日志是会存储在内存中, 没有文件存储慢查询日志内容. 所以在获取慢查询日志时候,会响应非常快. 对性能影响很小.

获取慢查询日志可以使用 slowlog get 命令, 将会所有的慢查询记录. 获取指定数量的慢查询使用:

slowlog get n

慢查询日志四个属性:

1、第一个字段是每个慢查询唯一标识。2、处理完命令后的时间戳3、执行改名了所需要的时间,单位微妙 4、命令的参数列表,是个数组类型每个慢查询实体的ID都是唯一的,而且不会被重新设置,只会在redis重启后才会重置它.

查看当前慢查询日志长度:

slowlog len

清空慢查询日志内容:

slowlog reset  

 二、Redis的shell详解:

1、redis-cli

1、-r   代表将命令重复执行多次./redis-cli -r 3 pingPONGPONGPONGping命令可用于检测redis实例是否存活,如果存活则显示PONG。2、-i  每隔几秒(如果想用ms,如10ms则写0.01)执行一次命令,必须与-r一起使用。./redis-cli -r 3 -i 1 pingPONGPONGPONG ./redis-cli -r 10 -i 1 info|grep used_memory_humanused_memory_human:2.95G.....................................used_memory_human:2.95G每隔1秒输出内存的使用量,一共输出10次。./redis-cli -h ip -p port info server|grep process_idprocess_id:999     #获取redis的进程号9993、-x  代表从标准输入读取数据作为该命令的最后一个参数。./echo "world" |redis-cli -x set helloOk4、-c  连接集群结点时使用,此选项可防止moved和ask异常。5、-a  如配置了密码,可用a选项。6、--scan和--pattern  用于扫描指定模式的键,相当于scan命令。7、--slave  当当前客户端模拟成当前redis节点的从节点,可用来获取当前redis节点的更新操作。合理利用可用于记录当前连接redis节点的一些更新操作,这些更新可能是实开发业务时需要的数据。8、--rdb  会请求redis实例生成并发送RDB持久化文件,保存在本地。可做定期备份。9、--pipe  将命令封装成redis通信协议定义的数据格式,批量发送给redis执行。10、--bigkeys  统计bigkey的分布,使用scan命令对redis的键进行采样,从中找到内存占用比较大的键,这些键可能是系统的瓶颈。11、--eval 用于执行lua脚本12、--latency  有三个选项,--latency、--latency-history、--latency-dist。它们可检测网络延迟,展现的形式不同。13、--stat  可实时获取redis的重要统计信息。info命令虽然比较全,但这里可看到一些增加的数据,如requests(每秒请求数)14、--raw 和 --no-raw --no-raw 要求返回原始格式。--raw 显示格式化的效果。

2、redis-server

检测当前系统是否提供1G内存给redis。

./redis-server --test-memory 1024

3、redis-benchmark

可以为redis做基准测试:

1、-c  客户端的并发数量(默认50)2、-n 客户端的请求总量(默认是100000)./redis-benchmark -c 100 -n 100000   #代表100个客户端同时请求redis,一共执行100000次,redis-benchmark会对各个数据类型结构命令进行测试====== PING_INLINE ======100000 requests completed in 0.97 seconds100 parallel clients3 bytes payloadkeep alive: 199.37% <= 1 milliseconds99.84% <= 2 milliseconds99.94% <= 3 milliseconds99.97% <= 4 milliseconds100.00% <= 4 milliseconds102880.66 requests per second3、-q  仅仅显示redis-benchmark的requests per second信息:PING_INLINE: 104602.52 requests per secondPING_BULK: 103842.16 requests per secondSET: 101010.10 requests per secondGET: 104712.05 requests per secondINCR: 105820.11 requests per secondLPUSH: 106157.12 requests per secondRPUSH: 102880.66 requests per secondLPOP: 102459.02 requests per secondRPOP: 103842.16 requests per secondSADD: 103199.18 requests per secondHSET: 105485.23 requests per secondSPOP: 98716.68 requests per second4、-r  在一个空的redis上执行redis-benchmark会发现有三个键,想要插入更多的键,执行-r选项,可以向redis插入更多的键。5、 -P 代表每个请求pipeline的数据量(默认为1)。6、 -k 代表客户端是否使用keeplive,1为使用,0为不使用,默认为17、-t 可以对指定命令进行基准测试。8、--csv 将结果按照csv格式输出,便于后续处理,入导到Excel等。

三、info命令:

info server   服务端信息redis_version     #Redis服务器版本redis_git_sha1   #Git SHA1redis_git_dirty   #Git脏标志os               #Redis服务器的宿主操作系统arch_bits    #架构(32或64位)multiplex_api    #Redis所使用的事件处理机制gcc_version    #编译Redis时所使用的GCC版本process_id     #服务器进程的PIDrun_id      #Redis的服务器的随机标识符(用于前哨和集群)tcp_port     #TCP / IP监听端口uptime_in_seconds    #自动Redis服务器启动以来,经过的秒数uptime_in_days      #自动Redis服务器启动以来,经过的天数lru_clock     #以分钟为单位进行自增的时钟,用于LRU管理info clients 客户端信息connected_clients    #已连接客户端的数量(不包括通过从属性服务器连接的客户端)client_longest_output_list   #当前连接的客户端当中,最长的输出列表client_longest_input_buf     #当前连接的客户端当中,最大输入缓存blocked_clients     #正在等待阻塞命令(BLPOP,BRPOP,BRPOPLPUSH)的客户端的数量 info memory   内存信息used_memory    #由Redis分配器分配的内存总量,以字节(byte)为单位used_memory_human    #以人类可读的格式返回Redis分配的内存总量used_memory_rss    #从操作系统的角度,返回Redis已分配的内存总量(俗称常驻集大小)。这个值和 top, ps等命令的输出一致。used_memory_peak   #Redis的内存消耗峰值(以字节为单位)used_memory_peak_human    #以人类可读的格式返回Redis的内存消耗峰值used_memory_lua    #Lua引擎所使用的内存大小(以字节为单位)mem_fragmentation_ratio   # used_memory_rss和 used_memory之间的比率mem_allocator    #在编译时指定的,Redis所使用的内存分配器。可以是libc,jemalloc或者tcmalloc。info persistence RDB和AOF的持久化相关信息loading:0                                                    #服务器是否正在载入持久化文件rdb_changes_since_last_save:28900855 #离最近一次成功生成rdb文件,写入命令的个数,即有多少个写入命令没有持久化rdb_bgsave_in_progress:0                  #服务器是否正在创建rdb文件rdb_last_save_time:1482358115        #离最近一次成功创建rdb文件的时间戳。当前时间戳 - rdb_last_save_time=多少秒未成功生成rdb文件rdb_last_bgsave_status:ok                   #最近一次rdb持久化是否成功rdb_last_bgsave_time_sec:2                #最近一次成功生成rdb文件耗时秒数rdb_current_bgsave_time_sec:-1        #如果服务器正在创建rdb文件,那么这个域记录的就是当前的创建操作已经耗费的秒数aof_enabled:1                                          #是否开启了aofaof_rewrite_in_progress:0                     #标识aof的rewrite操作是否在进行中aof_rewrite_scheduled:0              info rewrite  任务计划,当客户端发送bgrewriteaof指令,如果当前rewrite子进程正在执行,那么将客户端请求的bgrewriteaof变为计划任务,待aof子进程结束后执行rewrite aof_last_rewrite_time_sec:-1            #最近一次aof rewrite耗费的时长aof_current_rewrite_time_sec:-1      #如果rewrite操作正在进行,则记录所使用的时间,单位秒aof_last_bgrewrite_status:ok             #上次bgrewriteaof操作的状态aof_last_write_status:ok                     #上次aof写入状态aof_current_size:4201740                 #aof当前尺寸aof_base_size:4201687                    #服务器启动时或者aof重写最近一次执行之后aof文件的大小aof_pending_rewrite:0                       #是否有aof重写操作在等待rdb文件创建完毕之后执行?aof_buffer_length:0                             #aof buffer的大小aof_rewrite_buffer_length:0              #aof rewrite buffer的大小aof_pending_bio_fsync:0                  #后台I/O队列里面,等待执行的fsync调用数量aof_delayed_fsync:0                          #被延迟的fsync调用数量info stats   一般统计信息total_connections_received:209561105 #新创建连接个数,如果新创建连接过多,过度地创建和销毁连接对性能有影响,说明短连接严重或连接池使用有问题,需调研代码的连接设置total_commands_processed:2220123478  #redis处理的命令数instantaneous_ops_per_sec:279                  #redis当前的qps,redis内部较实时的每秒执行的命令数total_net_input_bytes:118515678789          #redis网络入口流量字节数total_net_output_bytes:236361651271       #redis网络出口流量字节数instantaneous_input_kbps:13.56                  #redis网络入口kpsinstantaneous_output_kbps:31.33               #redis网络出口kpsrejected_connections:0                                   #拒绝的连接个数,redis连接个数达到maxclients限制,拒绝新连接的个数sync_full:1                                                          #主从完全同步成功次数sync_partial_ok:0                                             #主从部分同步成功次数sync_partial_err:0                                            #主从部分同步失败次数expired_keys:15598177                                #运行以来过期的key的数量evicted_keys:0                                                 #运行以来剔除(超过了maxmemory后)的key的数量keyspace_hits:1122202228                          #命中次数keyspace_misses:577781396                     #没命中次数pubsub_channels:0                                       #当前使用中的频道数量pubsub_patterns:0                                         #当前使用的模式的数量latest_fork_usec:15679                                 #最近一次fork操作阻塞redis进程的耗时数,单位微秒migrate_cached_sockets:0                          #info replication  主从信息,master上显示的信息role:master                               #实例的角色,是master or slaveconnected_slaves:1              #连接的slave实例个数slave0:ip=192.168.64.104,port=9021,state=online,offset=6713173004,lag=0 #lag从库多少秒未向主库发送REPLCONF命令master_repl_offset:6713173145  #主从同步偏移量,此值如果和上面的offset相同说明主从一致没延迟repl_backlog_active:1                   #复制积压缓冲区是否开启repl_backlog_size:134217728    #复制积压缓冲大小repl_backlog_first_byte_offset:6578955418  #复制缓冲区里偏移量的大小repl_backlog_histlen:134217728   #此值等于 master_repl_offset - repl_backlog_first_byte_offset,该值不会超过repl_backlog_size的大小info replication 主从信息,slave上显示的信息role:slave                                        #实例的角色,是master or slavemaster_host:192.168.64.102       #此节点对应的master的ipmaster_port:9021                          #此节点对应的master的portmaster_link_status:up                   #slave端可查看它与master之间同步状态,当复制断开后表示downmaster_last_io_seconds_ago:0  #主库多少秒未发送数据到从库?master_sync_in_progress:0        #从服务器是否在与主服务器进行同步slave_repl_offset:6713173818   #slave复制偏移量slave_priority:100                          #slave优先级slave_read_only:1                         #从库是否设置只读connected_slaves:0                      #连接的slave实例个数master_repl_offset:0         repl_backlog_active:0                  #复制积压缓冲区是否开启repl_backlog_size:134217728   #复制积压缓冲大小repl_backlog_first_byte_offset:0 #复制缓冲区里偏移量的大小repl_backlog_histlen:0           #此值等于 master_repl_offset - repl_backlog_first_byte_offset,该值不会超过repl_backlog_size的大小info CPU CPU计算量统计信息used_cpu_sys:96894.66             #将所有redis主进程在核心态所占用的CPU时求和累计起来used_cpu_user:87397.39           #将所有redis主进程在用户态所占用的CPU时求和累计起来used_cpu_sys_children:6.37     #将后台进程在核心态所占用的CPU时求和累计起来used_cpu_user_children:52.83 #将后台进程在用户态所占用的CPU时求和累计起来info commandstats 各种不同类型的命令的执行统计信息cmdstat_get:calls=1664657469,usec=8266063320,usec_per_call=4.97  #call每个命令执行次数,usec总共消耗的CPU时长(单位微秒),平均每次消耗的CPU时长(单位微秒)info cluster 集群相关信息cluster_enabled:1   #实例是否启用集群模式info keyspace 数据库相关的统计信息db0:keys=194690,expires=191702,avg_ttl=3607772262 #db0的key的数量,以及带有生存期的key的数,平均存活时间

 

转载于:https://www.cnblogs.com/chimeiwangliang/p/7776968.html

你可能感兴趣的文章
shell实例-判断apache是否正常启动
查看>>
Android studio之签名配置
查看>>
聊聊EIGRP的自动汇总与手工汇总
查看>>
SharedPreferences存储复杂对象解决方案
查看>>
Office 365之SkyDrive Pro
查看>>
脑残式网络编程入门(二):我们在读写Socket时,究竟在读写什么?
查看>>
无缝滚动实现原理分析【公告栏】
查看>>
Java Web 高性能开发
查看>>
redis-cli 命令总结
查看>>
CentOS 4.4双网卡绑定,实现负载均衡
查看>>
GitHub页面使用方法
查看>>
Python爬虫综述(笔记)
查看>>
Scala之柯里化和隐式转换
查看>>
wmic命令
查看>>
Merge and BottomUpSort
查看>>
reids 安装记录
查看>>
获取androdmanifest里面的meta-data
查看>>
Centos 6.3编译安装nagios
查看>>
如何实现7*24小时灵活发布?阿里技术团队这么做
查看>>
iSCSI
查看>>