自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Redis性能瓶頸分析之慢查詢

存儲(chǔ) 存儲(chǔ)軟件
Redis數(shù)據(jù)庫(kù)是一個(gè)基于內(nèi)存的 key-value存儲(chǔ)系統(tǒng),現(xiàn)在redis最常用的使用場(chǎng)景就是存儲(chǔ)緩存用的數(shù)據(jù),在需要高速讀/寫(xiě)的場(chǎng)合使用它快速讀/寫(xiě),從而緩解應(yīng)用數(shù)據(jù)庫(kù)的壓力,進(jìn)而提升應(yīng)用處理能力。

由于Redis的單線程架構(gòu),所以需要每個(gè)命令能被快速執(zhí)行完,否則會(huì)存在阻塞Redis的可能,理解Redis單線程命令處理機(jī)制是開(kāi)發(fā)和運(yùn)維Redis的核心之一。

許多數(shù)據(jù)庫(kù)會(huì)提供慢查詢?nèi)罩編椭_(kāi)發(fā)和運(yùn)維人員定位系統(tǒng)存在的慢操作。所謂慢查詢?nèi)罩揪褪窍到y(tǒng)在命令執(zhí)行前后計(jì)算每條命令的執(zhí)行時(shí)間,當(dāng)然在數(shù)據(jù)庫(kù)中最常見(jiàn)的就是select這些sql語(yǔ)句了,當(dāng)超過(guò)預(yù)設(shè)閥值,就將這條命令的相關(guān)信息(例如:發(fā)生時(shí)間,耗時(shí),命令的詳細(xì)信息)記錄下來(lái),Redis也提供了類(lèi)似的功能。

那么如何使用Redis所提供的慢查詢功能呢?Redis主要提供了slowlog-log-slower-than和slowlog-max-len兩個(gè)配置參數(shù)來(lái)提供這項(xiàng)功能。兩項(xiàng)參數(shù)分別用來(lái)設(shè)置慢查詢的閾值以及存放慢查詢的記錄。首先對(duì)redis的這兩個(gè)配置進(jìn)行一個(gè)說(shuō)明 :

從字面意思就可以看出,可以通過(guò)slowlog-log-slower-than參數(shù)設(shè)置什么情況下是慢語(yǔ)句,只有redis命令執(zhí)行時(shí)間大于slowlog-log-slower-than的才會(huì)定義成慢查詢,才會(huì)被slowlog進(jìn)行記錄。它的單位是微秒(1秒=1000毫秒=1000000微秒),在初始情況下默認(rèn)值是10000,也就是10ms,假如執(zhí)行了一條比較慢的命令,如果它的執(zhí)行時(shí)間超過(guò)了 10ms ,那么它將被記錄在慢查詢?nèi)罩局小?如果slowlog-log-slower-than=0會(huì)記錄所有的命令,slowlog-log-slower than<0對(duì)于任何命令都不會(huì)進(jìn)行記錄)

從字面意思看,slowlog-max-len說(shuō)明了慢查詢?nèi)罩咀疃嗫梢源鎯?chǔ)多少條記錄,實(shí)際上Redis使用了一個(gè)列表來(lái)存儲(chǔ)慢查詢?nèi)罩?,slowlog-max-len就是列表的最大長(zhǎng)度,它自身是一個(gè)先進(jìn)先出隊(duì)列,當(dāng)slowlog超過(guò)設(shè)定的最大值后,會(huì)將最早的slowlog刪除。簡(jiǎn)而言之當(dāng)一個(gè)新的命令滿足慢查詢條件時(shí)會(huì)被插入到這個(gè)列表中,當(dāng)慢查詢?nèi)罩玖斜硪烟幱谄渥畲箝L(zhǎng)度時(shí),最早插入的一個(gè)命令將從列表中移出,例如slowlog-max-len設(shè)置為 50 ,當(dāng)有第51條慢查詢插入的話,那么隊(duì)頭的第一條數(shù)據(jù)就出列,第51條慢查詢就會(huì)入列。

接下來(lái)詳細(xì)介紹一下如何配置這兩個(gè)參數(shù),有兩種方式進(jìn)行配置,以下截圖全部使用了redis -5.0.5版本 :

方式一:通過(guò)配置redis.conf文件進(jìn)行配置。

通過(guò)修改redis .conf文件之后重啟redis服務(wù) , 配置即可生效 。

方式二:通過(guò)CONFIG命令進(jìn)行動(dòng)態(tài)配置

配置查詢時(shí)間超過(guò)1毫秒的命令進(jìn)行記錄

保存500條慢查記錄

通過(guò)config get命令確認(rèn)配置已生效

要注意通過(guò)config命令配置的為動(dòng)態(tài)生效 , 一旦服務(wù)重啟則會(huì)重新恢復(fù)為默認(rèn)設(shè)置 , 所以建議在排查問(wèn)題時(shí)通過(guò)config這種方式進(jìn)行配置 , 但是服務(wù)穩(wěn)定后通過(guò)修改配置文件方式進(jìn)行最終確認(rèn) (可以通過(guò)config rewrite命令持久化到本地文件 , 但要主要啟動(dòng)redis時(shí)要指定redis . conf文件 該命令才可以生效)。

相關(guān)的參數(shù)已經(jīng)設(shè)置完成了 , 那么如何查看記錄的信息呢 ?要想查看所記錄的日志 , 主要使用 SLOWLOG GET 或者 SLOWLOG GET number 命令,前者將會(huì)輸出所有的 slow log ,最大長(zhǎng)度取決于 slowlog-max-len 選項(xiàng)的值,而 SLOWLOG GET number 則只打印指定數(shù)量的日志。

查看當(dāng)前日志數(shù)量: 使用SHOW LEN命令查看日志數(shù)量。

因?yàn)槲沂切掳惭b的redis , 所以現(xiàn)在還沒(méi)有耗時(shí)長(zhǎng)日志 , 所以條數(shù)是 0,如果日志條數(shù)過(guò)多,還可以使用slowlog reset命令進(jìn)行日志清空 。

為了方便演示 ,我將所有的執(zhí)行命令都記錄了下來(lái),以第一條為例,

1、(integer) 1 # 唯一性(unique)的日志標(biāo)識(shí)符

2、(integer) 1562075522 # 被記錄命令的執(zhí)行時(shí)間點(diǎn),以 UNIX 時(shí)間戳格式表示

3、(integer) 93 # 查詢執(zhí)行時(shí)間,以微秒為單位

4、1."CONFIG" # 執(zhí)行的命令,以數(shù)組的形式排列

5、"GET"

6、" " # 這里完整的命令是 CONFIG GET

慢查詢功能可以有效地幫助我們找到Redis可能存在的瓶頸,但在實(shí)際使用過(guò)程中要注意以下幾點(diǎn):

  • slowlog-max-len配置建議:線上建議調(diào)大慢查詢列表,記錄慢查詢時(shí) Redis會(huì)對(duì)長(zhǎng)命令做截?cái)嗖僮?,并不?huì)占用大量?jī)?nèi)存。增大慢查詢列表可以減緩慢查詢被剔除的可能,例如線上可設(shè)置為 2000 以上(5.0.5版本默認(rèn)為128)。
  • 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毫秒(OPS指每秒操作次數(shù))。
  • 慢查詢只記錄命令執(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)阻塞。
  • 由于慢查詢?nèi)罩臼且粋€(gè)先進(jìn)先出的隊(duì)列,也就是說(shuō)如果慢查詢比較多的情況下,可能會(huì)丟失部分慢查詢命令,為了防止這種情況發(fā)生,可以定期執(zhí)行slow get命令將慢查詢?nèi)罩境志没狡渌鎯?chǔ)中,然后可以進(jìn)行相關(guān)的監(jiān)控、告警、分析工作。
責(zé)任編輯:華軒 來(lái)源: twt企業(yè)IT社區(qū)
相關(guān)推薦

2019-09-11 10:23:58

Redis性能存儲(chǔ)

2019-09-18 08:06:08

Redis數(shù)據(jù)庫(kù)命令

2019-10-31 11:50:19

MySQL數(shù)據(jù)庫(kù)Windows

2019-05-10 11:13:19

分析工具Java

2023-04-17 08:04:15

Redis性能內(nèi)存

2017-02-15 09:40:38

JavaScript分析解決

2020-09-09 10:00:41

JavaScript前端瓶頸

2019-05-23 08:08:33

MySQL數(shù)據(jù)庫(kù)DBA

2024-02-02 15:21:08

工具頁(yè)面性能

2023-06-09 12:59:52

Python性能分析

2020-12-29 15:00:46

PerfVTune工具

2009-01-17 15:26:05

2013-02-22 18:28:18

容錯(cuò)服務(wù)器、

2024-11-25 07:00:00

2020-12-07 06:30:34

Redis性能命令

2020-11-11 10:00:13

NAT性能內(nèi)核

2023-05-06 18:37:43

2024-04-01 08:04:05

JProfilerJVM工具

2018-09-13 09:42:30

數(shù)據(jù)庫(kù)Redis慢查詢

2010-07-21 09:33:09

VMware View
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)