一、慢查詢:
1、慢查詢的作用:通過慢查詢分析,找到有問題的命令進行優化。
2、慢查詢的redis的配置參數:
slowlog-log-slower-than 慢查詢預設閾值(單位是微秒1秒=1000000微秒) slowlog-max-len 慢查詢最多存多少條
修改慢查詢有兩種方法:
1、直接在redis.conf上修改。 2、在redis的shell里面修改: config set slowlog-log-slower-than 20000 config set slowlog-man-len 1000 config 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 ping PONG PONG PONG ping命令可用於檢測redis實例是否存活,如果存活則顯示PONG。 2、-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 3、-x 代表從標准輸入讀取數據作為該命令的最后一個參數。 ./echo "world" |redis-cli -x set hello Ok 4、-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 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 3、-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 4、-r 在一個空的redis上執行redis-benchmark會發現有三個鍵,想要插入更多的鍵,執行-r選項,可以向redis插入更多的鍵。 5、 -P 代表每個請求pipeline的數據量(默認為1)。 6、 -k 代表客戶端是否使用keeplive,1為使用,0為不使用,默認為1 7、-t 可以對指定命令進行基准測試。 8、--csv 將結果按照csv格式輸出,便於后續處理,入導到Excel等。
三、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的數,平均存活時間
