Redis數(shù)據(jù)庫是一個(gè)基于內(nèi)存的 key-value存儲(chǔ)系統(tǒng),現(xiàn)在redis最常用的使用場景就是存儲(chǔ)緩存用的數(shù)據(jù),在需要高速讀/寫的場合使用它快速讀/寫,從而緩解應(yīng)用數(shù)據(jù)庫的壓力,進(jìn)而提升應(yīng)用處理能力。
許多數(shù)據(jù)庫會(huì)提供慢查詢?nèi)罩編椭_發(fā)和運(yùn)維人員定位系統(tǒng)存在的慢操作。所謂慢查詢?nèi)罩揪褪窍到y(tǒng)在命令執(zhí)行前后計(jì)算每條命令的執(zhí)行時(shí)間,當(dāng)然在數(shù)據(jù)庫中最常見的就是select這些sql語句了,當(dāng)超過預(yù)設(shè)閥值,就將這條命令的相關(guān)信息(例如:發(fā)生時(shí)間,耗時(shí),命令的詳細(xì)信息)記錄下來,其實(shí)Redis也提供了類似的功能。
一、相關(guān)參數(shù)
Redis主要提供了slowlog-log-slower-than和slowlog-max-len兩個(gè)配置參數(shù)來提供這項(xiàng)功能。兩項(xiàng)參數(shù)分別用來設(shè)置慢查詢的閾值以及存放慢查詢的記錄。
slowlog-log-slower-than參數(shù)設(shè)置什么情況下是慢語句,只有redis命令執(zhí)行時(shí)間大于slowlog-log-slower-than的才會(huì)定義成慢查詢,才會(huì)被slowlog進(jìn)行記錄。它的單位是微秒(1秒=1000毫秒=1000000微秒),在初始情況下默認(rèn)值是10000,也就是10ms,假如執(zhí)行了一條比較慢的命令,如果它的執(zhí)行時(shí)間超過了 10ms ,那么它將被記錄在慢查詢?nèi)罩局小?如果slowlog-log-slower-than=0會(huì)記錄所有的命令,slowlog-log-slower than<0對于任何命令都不會(huì)進(jìn)行記錄)
slowlog-max-len說明了慢查詢?nèi)罩咀疃嗫梢源鎯?chǔ)多少條記錄,實(shí)際上Redis使用了一個(gè)列表來存儲(chǔ)慢查詢?nèi)罩?,slowlog-max-len就是列表的最大長度,它自身是一個(gè)先進(jìn)先出隊(duì)列,當(dāng)slowlog超過設(shè)定的最大值后,會(huì)將最早的slowlog刪除。簡而言之當(dāng)一個(gè)新的命令滿足慢查詢條件時(shí)會(huì)被插入到這個(gè)列表中,當(dāng)慢查詢?nèi)罩玖斜硪烟幱谄渥畲箝L度時(shí),最早插入的一個(gè)命令將從列表中移出,例如slowlog-max-len設(shè)置為 50 ,當(dāng)有第51條慢查詢插入的話,那么隊(duì)頭的第一條數(shù)據(jù)就出列,第51條慢查詢就會(huì)入列。
二、設(shè)置Redis慢查詢
1、臨時(shí)配置:CONFIG命令進(jìn)行動(dòng)態(tài)配置
注意通過config命令配置的為動(dòng)態(tài)生效 , 一旦服務(wù)重啟則會(huì)重新恢復(fù)為默認(rèn)設(shè)置 , 所以建議在排查問題時(shí)通過config這種方式進(jìn)行配置 , 但是服務(wù)穩(wěn)定后通過修改配置文件方式進(jìn)行最終確認(rèn) (可以通過config rewrite命令持久化到本地文件 , 但要主要啟動(dòng)redis時(shí)要指定redis.conf文件 該命令才可以生效)。
2. 永久配置:配置redis.conf文件
三、查看Redis慢查詢記錄
要想查看所記錄的日志 ,主要使用 SLOWLOG GET 或者 SLOWLOG GET number 命令,前者將會(huì)輸出所有的 slow log ,最大長度取決于 slowlog-max-len 選項(xiàng)的值,而 SLOWLOG GET number 則只打印指定數(shù)量的日志。
查看當(dāng)前日志數(shù)量: 使用slowlog len命令查看日志數(shù)量。
如果日志條數(shù)過多,還可以使用slowlog reset命令進(jìn)行日志清空 。
部分記錄說明:
【責(zé)任編輯:趙寧寧 TEL:(010)68476606】