redis慢查詢?nèi)罩镜脑L問(wèn)和管理方式
redis慢查詢?nèi)罩镜脑L問(wèn)和管理
通過(guò)一組命令來(lái)實(shí)現(xiàn)對(duì)慢查詢?nèi)罩镜脑L問(wèn)和管理
(1)獲取慢查詢?nèi)罩?/h3>
命令:slowlog get
127.0.0.1:6379> slowlog get 1) 1) (integer) 1 ? ?2) (integer) 1513709400 ? ?3) (integer) 11 ? ?4) 1) "slowlog" ? ? ? 2) "get" 2) 1) (integer) 0 ? ?2) (integer) 1513709398 ? ?3) (integer) 4 ? ?4) 1) "config" ? ? ? 2) "set" ? ? ? 3) "slowlog-log-slower-than" ? ? ? 4) "2"
(2)獲取慢查詢?nèi)罩玖斜懋?dāng)前的長(zhǎng)度
命令:slowlog len
127.0.0.1:6379> slowlog len (integer) 2
(3)慢查詢?nèi)罩局刂?/h3>
命令:slowlog reset
實(shí)際是對(duì)慢查詢?nèi)罩玖斜碜銮謇聿僮鳌?/p>
127.0.0.1:6379> slowlog len (integer) 6 127.0.0.1:6379> slowlog reset OK 127.0.0.1:6379> slowlog len (integer) 1 #為什么還有1個(gè),因?yàn)殚撝翟O(shè)的比較小,slowlog reset就屬于慢查詢
注意事項(xiàng)
慢查詢功能可以有效的幫助我們找到Redis可能存在的瓶頸,但在實(shí)際使用過(guò)程中要注意以下幾點(diǎn):
(1)slowlog-max-len配置建議:線上建議調(diào)大慢查詢列表,記錄慢查詢時(shí)Redis會(huì)對(duì)長(zhǎng)命令做截?cái)嗖僮?,并不?huì)占用大量?jī)?nèi)存。
增大慢查詢列表可以減緩慢查詢被剔除的可能。
(2)slowlog-log-slower-than配置建議:默認(rèn)值超過(guò)10毫秒判定為慢查詢,需要根據(jù)Redis并發(fā)量調(diào)整該值。
由于Redis采用單線程響應(yīng)命令,對(duì)于高流量的場(chǎng)景,如果命令執(zhí)行時(shí)間在1毫秒以上,那么Redis最多可以支撐OPS不到1000,因此對(duì)于高OPS的場(chǎng)景的Redis建議設(shè)置1毫秒。
(3)慢查詢只記錄命令執(zhí)行時(shí)間,并不包括命令排隊(duì)和網(wǎng)絡(luò)傳輸時(shí)間。因此客戶端執(zhí)行命令的時(shí)間會(huì)大于命令實(shí)際執(zhí)行的時(shí)間。
因?yàn)槊顖?zhí)行排隊(duì)機(jī)制,慢查詢會(huì)導(dǎo)致其他命令級(jí)聯(lián)阻塞,因此當(dāng)客戶端出現(xiàn)請(qǐng)求超時(shí),
需要檢查該時(shí)間點(diǎn)是否有對(duì)應(yīng)的慢查詢,從而分析出是否為慢查詢導(dǎo)致的命令級(jí)聯(lián)阻塞。
(4)由于慢查詢?nèi)罩臼且粋€(gè)先進(jìn)先出的隊(duì)列,也就是說(shuō)如果慢查詢比較多的情況下,可能會(huì)丟失部分慢查詢命令,
為了防止這種情況發(fā)生,可以定期執(zhí)行slowlog get命令將慢查詢?nèi)罩境志没狡渌鎯?chǔ)中(例如,MySQL),
然后可以制作出可視化界面進(jìn)行查詢。
Redis慢查詢總結(jié)
慢查詢分析
1、什么叫慢查詢?
類似于mysql中的慢查詢語(yǔ)句,當(dāng)查詢語(yǔ)句的執(zhí)行時(shí)間超過(guò)設(shè)置的時(shí)間閾值就是慢查詢語(yǔ)句,會(huì)放入慢查詢?nèi)罩局小?/p>
redis中慢查詢只統(tǒng)計(jì)命令生命周期中執(zhí)行命令的時(shí)間,所有沒(méi)有慢查詢并不代表客戶端沒(méi)有超時(shí)的問(wèn)題。(客戶端命令生命周期:發(fā)送命令,命令排隊(duì),命令執(zhí)行,命令返回)。
2、慢查詢的配置參數(shù)
redis提供了slowlog-log-slower-than和slowlog-max-len配置慢查詢。
1)使用slowlog-log-slower-than來(lái)設(shè)置執(zhí)行時(shí)間的閾值,默認(rèn)是 10000微妙;
備注:slowlog-log-slower-than=0記錄所有的命令,slowlog-log-slower-than<0對(duì)任何命令都不進(jìn)行記錄。
2)slowlog-max-len只是說(shuō)明了慢查詢?nèi)罩咀疃啻鎯?chǔ)多少條,實(shí)際上慢查詢命令存儲(chǔ)在列表上,slowlog-max-len就是這個(gè)列表的最大長(zhǎng)度。當(dāng)命令超過(guò)最大列表長(zhǎng)度,按照先進(jìn)先出算法,最早進(jìn)入對(duì)了的移除。
配置方式:可以通過(guò)配置文件配置:
也可以通過(guò)命令行客戶端發(fā)送 config set命令動(dòng)態(tài)修改:
config set slowlog-log-slower-than 20000 config set slowlog-max-len 1000
config rewrite(用來(lái)把配置的值持久化到本地配置文件中,啟動(dòng)時(shí)需指定配置文件,否則持久化失敗)
3、慢查詢?nèi)罩镜脑L問(wèn)和管理
- slowlog get獲取的日志分4個(gè)屬性:id,發(fā)生時(shí)間戳,執(zhí)行時(shí)間,執(zhí)行命令+參數(shù)
- slowlog reset 用于重置慢查詢?nèi)罩颈4媪斜恚褪乔闆r列表中的數(shù)據(jù)。
注意事項(xiàng):由于慢查詢是一個(gè)先進(jìn)先出的隊(duì)列,可能會(huì)丟失部分慢查詢命令,因此線上最好配置在1000以上,同時(shí)可以定期執(zhí)行slowlog get 命令將慢查詢?nèi)罩境志没狡渌鎯?chǔ)中(比如Mysql)。
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
redis的五大數(shù)據(jù)類型應(yīng)用場(chǎng)景分析
這篇文章主要介紹了redis的五大數(shù)據(jù)類型實(shí)現(xiàn)原理,本文給大家分享五大數(shù)據(jù)類型的應(yīng)用場(chǎng)景分析,需要的朋友可以參考下2021-08-08Redis實(shí)現(xiàn)優(yōu)惠券限一單限制詳解
這篇文章主要介紹了Redis解決優(yōu)惠券秒殺應(yīng)用案例,本文先講了搶購(gòu)問(wèn)題,指出其中會(huì)出現(xiàn)的多線程問(wèn)題,提出解決方案采用悲觀鎖和樂(lè)觀鎖兩種方式進(jìn)行實(shí)現(xiàn),然后發(fā)現(xiàn)在搶購(gòu)過(guò)程中容易出現(xiàn)一人多單現(xiàn)象,需要的朋友可以參考下2022-12-12Quarkus集成redis操作Redisson實(shí)現(xiàn)數(shù)據(jù)互通
這篇文章主要為大家介紹了Quarkus集成redis操作Redisson實(shí)現(xiàn)數(shù)據(jù)互通的示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步2022-02-02Govern Service 基于 Redis 的服務(wù)治理平臺(tái)安裝過(guò)程詳解
Govern Service 是一個(gè)輕量級(jí)、低成本的服務(wù)注冊(cè)、服務(wù)發(fā)現(xiàn)、 配置服務(wù) SDK,通過(guò)使用現(xiàn)有基礎(chǔ)設(shè)施中的 Redis 不用給運(yùn)維部署帶來(lái)額外的成本與負(fù)擔(dān),接下來(lái)通過(guò)本文給大家分享Govern Service 基于 Redis 的服務(wù)治理平臺(tái)的相關(guān)知識(shí),感興趣的朋友一起看看吧2021-05-05Redis實(shí)戰(zhàn)之Redis實(shí)現(xiàn)異步秒殺優(yōu)化詳解
這篇文章主要給大家介紹了Redis實(shí)戰(zhàn)之Redis實(shí)現(xiàn)異步秒殺優(yōu)化方法,文章通過(guò)圖片和代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作有一定的幫助,感興趣的同學(xué)可以自己動(dòng)手試一下2023-09-09