Redis慢查詢,redis-cli,redis-benchmark,info

1、慢查詢:

一、慢查詢的做用:經過慢查詢分析,找到有問題的命令進行優化。git

二、慢查詢的redis的配置參數:redis

slowlog-log-slower-than    慢查詢預設閾值(單位是微秒1秒=1000000微秒)
slowlog-max-len    慢查詢最多存多少條

修改慢查詢有兩種方法:shell

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

慢查詢日誌是會存儲在內存中, 沒有文件存儲慢查詢日誌內容. 因此在獲取慢查詢日誌時候,會響應很是快. 對性能影響很小.數據庫

獲取慢查詢日誌可使用 slowlog get 命令, 將會全部的慢查詢記錄. 獲取指定數量的慢查詢使用:api

slowlog get n數組

慢查詢日誌四個屬性:緩存

一、第一個字段是每一個慢查詢惟一標識。
二、處理完命令後的時間戳
三、執行更名了所須要的時間,單位微妙
四、命令的參數列表,是個數組類型 每一個慢查詢實體的ID都是惟一的,並且不會被從新設置,只會在redis重啓後纔會重置它.

查看當前慢查詢日誌長度:服務器

slowlog len網絡

清空慢查詢日誌內容:架構

slowlog reset  

 2、Redis的shell詳解:

一、redis-cli

一、-r   表明將命令重複執行屢次
./redis-cli -r 3 ping
PONG
PONG
PONG
ping命令可用於檢測redis實例是否存活,若是存活則顯示PONG。
二、-i  每隔幾秒(若是想用ms,如10ms則寫0.01)執行一次命令,必須與-r一塊兒使用。
./redis-cli -r 3 -i 1 ping
PONG
PONG
PONG
./redis
-cli -r 10 -i 1 info|grep used_memory_human used_memory_human:2.95G ..................................... used_memory_human:2.95G 每隔1秒輸出內存的使用量,一共輸出10次。 ./redis-cli -h ip -p port info server|grep process_id process_id:999 #獲取redis的進程號999 三、-x 表明從標準輸入讀取數據做爲該命令的最後一個參數。 ./echo "world" |redis-cli -x set hello Ok 四、-c 鏈接集羣結點時使用,此選項可防止moved和ask異常。 五、-a 如配置了密碼,可用a選項。 六、--scan和--pattern 用於掃描指定模式的鍵,至關於scan命令。 七、--slave 噹噹前客戶端模擬成當前redis節點的從節點,可用來獲取當前redis節點的更新操做。合理利用可用於記錄當前鏈接redis節點的一些更新操做,這些更新多是實開發業務時須要的數據。 八、--rdb 會請求redis實例生成併發送RDB持久化文件,保存在本地。可作按期備份。 九、--pipe 將命令封裝成redis通訊協議定義的數據格式,批量發送給redis執行。 十、--bigkeys 統計bigkey的分佈,使用scan命令對redis的鍵進行採樣,從中找到內存佔用比較大的鍵,這些鍵多是系統的瓶頸。 十一、--eval 用於執行lua腳本 十二、--latency 有三個選項,--latency、--latency-history、--latency-dist。它們可檢測網絡延遲,展示的形式不一樣。 1三、--stat 可實時獲取redis的重要統計信息。info命令雖然比較全,但這裏可看到一些增長的數據,如requests(每秒請求數) 1四、--raw 和 --no-raw --no-raw 要求返回原始格式。--raw 顯示格式化的效果。

二、redis-server

檢測當前系統是否提供1G內存給redis。

./redis-server --test-memory 1024

三、redis-benchmark

能夠爲redis作基準測試:

一、-c  客戶端的併發數量(默認50)
二、-n 客戶端的請求總量(默認是100000)
./redis-benchmark -c 100 -n 100000   #表明100個客戶端同時請求redis,一共執行100000次,redis-benchmark會對各個數據類型結構命令進行測試
====== PING_INLINE ======
100000 requests completed in 0.97 seconds
100 parallel clients
3 bytes payload
keep alive: 1

99.37% <= 1 milliseconds
99.84% <= 2 milliseconds
99.94% <= 3 milliseconds
99.97% <= 4 milliseconds
100.00% <= 4 milliseconds
102880.66 requests per second
三、-q  僅僅顯示redis-benchmark的requests per second信息:
PING_INLINE: 104602.52 requests per second
PING_BULK: 103842.16 requests per second
SET: 101010.10 requests per second
GET: 104712.05 requests per second
INCR: 105820.11 requests per second
LPUSH: 106157.12 requests per second
RPUSH: 102880.66 requests per second
LPOP: 102459.02 requests per second
RPOP: 103842.16 requests per second
SADD: 103199.18 requests per second
HSET: 105485.23 requests per second
SPOP: 98716.68 requests per second
四、-r  在一個空的redis上執行redis-benchmark會發現有三個鍵,想要插入更多的鍵,執行-r選項,能夠向redis插入更多的鍵。
五、 -P 表明每一個請求pipeline的數據量(默認爲1)。
六、 -k 表明客戶端是否使用keeplive,1爲使用,0爲不使用,默認爲1
七、-t 能夠對指定命令進行基準測試。
八、--csv 將結果按照csv格式輸出,便於後續處理,入導到Excel等。

3、info命令:

info server 服務端信息
redis_version     #Redis服務器版本
redis_git_sha1   #Git SHA1
redis_git_dirty   #Git髒標誌
os               #Redis服務器的宿主操做系統
arch_bits    #架構(32或64位)
multiplex_api    #Redis所使用的事件處理機制
gcc_version    #編譯Redis時所使用的GCC版本
process_id     #服務器進程的PID
run_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 #是否開啓了aof aof_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網絡入口kps instantaneous_output_kbps:31.33 #redis網絡出口kps rejected_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 slave connected_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 slave master_host:192.168.64.102 #此節點對應的master的ip master_port:9021 #此節點對應的master的port master_link_status:up #slave端可查看它與master之間同步狀態,當複製斷開後表示down master_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的數,平均存活時間
相關文章
相關標籤/搜索