一篇文章快速搞懂Redis的慢查詢分析

来源:https://www.cnblogs.com/heihaozi/archive/2020/04/21/12744856.html
-Advertisement-
Play Games

當Redis客戶端出現請求超時的時候,需要檢查該時間點是否有慢查詢,從而分析出由於慢查詢導致的命令級聯阻塞。 ...


什麼是慢查詢?

慢查詢,顧名思義就是比較慢的查詢,但是究竟是哪裡慢呢?首先,我們瞭解一下Redis命令執行的整個過程:

  1. 發送命令
  2. 命令排隊
  3. 命令執行
  4. 返回結果

在慢查詢的定義中,統計比較慢的時間段指的是命令執行這個步驟。沒有慢查詢,並不表示客戶端沒有超時問題,有可能網路傳輸有延遲,也有可能排隊的命令比較多。

因為Redis中命令執行的排隊機制,慢查詢會導致其他命令的級聯阻塞,所以當客戶端出現請求超時的時候,需要檢查該時間點是否有慢查詢,從而分析出由於慢查詢導致的命令級聯阻塞。

歡迎關註微信公眾號:萬貓學社,每周一分享Java技術乾貨。

什麼是慢查詢日誌?

慢查詢日誌是Redis服務端在命令執行前後計算每條命令的執行時長,當超過某個閾值是記錄下來的日誌。日誌中記錄了慢查詢發生的時間,還有執行時長、具體什麼命令等信息,它可以用來幫助開發和運維人員定位系統中存在的慢查詢。

如何獲取慢查詢日誌?

可以使用slowlog get命令獲取慢查詢日誌,在slowlog get後面還可以加一個數字,用於指定獲取慢查詢日誌的條數,比如,獲取3條慢查詢日誌:

> slowlog get 3
1) 1) (integer) 6107
   2) (integer) 1616398930
   3) (integer) 3109
   4) 1) "config"
      2) "rewrite"
2) 1) (integer) 6106
   2) (integer) 1613701788
   3) (integer) 36004
   4) 1) "flushall"
3) 1) (integer) 6105
   2) (integer) 1608722338
   3) (integer) 20449
   4) 1) "scan"
      2) "0"
      3) "MATCH"
      4) "*comment*"
      5) "COUNT"
      6) "10000"

從上面的例子中,可以看出每一條慢查詢日誌都有4個屬性組成:

  1. 唯一標識ID
  2. 命令執行的時間戳
  3. 命令執行時長
  4. 執行的命名和參數

歡迎關註微信公眾號:萬貓學社,每周一分享Java技術乾貨。

如何獲取慢查詢日誌的長度?

可以使用slowlog len命令獲取慢查詢日誌的長度,比如:

> slowlog len
(integer) 121

在上例中,當前Redis中有121條慢查詢日誌。

如何清理慢查詢日誌?

可以使用slowlog reset命令清理慢查詢日誌,比如:

> slowlog len
(integer) 121
> slowlog reset
OK
> slowlog len
(integer) 0

怎麼配置慢查詢的參數?

正如上面提到的,慢查詢需要如下兩個配置:

  1. 命令執行時長的指定閾值。
  2. 存放慢查詢日誌的條數。

Redis對應提供了兩個參數:slowlog-log-slower-than和slowlog-max-len,接下來我們詳細介紹一下這兩個參數。

歡迎關註微信公眾號:萬貓學社,每周一分享Java技術乾貨。

slowlog-log-slower-than

slowlog-log-slower-than的作用是指定命令執行時長的閾值,執行命令的時長超過這個閾值時就會被記錄下來。它的單位是微秒(1秒 = 1000毫秒 = 1000000微秒),預設是10000微秒。如果把slowlog-log-slower-than設置為0,將會記錄所有命令到日誌中。如果把slowlog-log-slower-than設置小於0,將會不記錄任何命令到日誌中。

在實際的生產環境中,需要根據Redis併發量來調整該配置。因為Redis採用單線程響應命令,如果命令執行時間在1000微秒以上,那麼Redis最多可支撐OPS不到1000,所以對於高併發場景的Redis建議設置為1000微秒

slowlog-max-len

slowlog-max-len的作用是指定慢查詢日誌最多存儲的條數。實際上,Redis使用了一個列表存放慢查詢日誌,slowlog-max-len就是這個列表的最大長度。當一個新的命令滿足滿足慢查詢條件時,被插入這個列表中。當慢查詢日誌列表已經達到最大長度時,最早插入的那條命令將被從列表中移出。比如,slowlog-max-len被設置為10,當有第11條命令插入時,在列表中的第1條命令先被移出,然後再把第11條命令放入列表。

記錄慢查詢是Redis會對長命令進行截斷,不會大量占用大量記憶體。在實際的生產環境中,為了減緩慢查詢被移出的可能和更方便地定位慢查詢,建議將慢查詢日誌的長度調整的大一些。比如可以設置為1000以上

歡迎關註微信公眾號:萬貓學社,每周一分享Java技術乾貨。

如何進行配置

在Redis中有兩個修改配置的方法:

  1. 修改Redis配置文件。比如,把slowlog-log-slower-than設置為1000,slowlog-max-len設置為1200:
slowlog-log-slower-than 1000
slowlog-max-len 1200
  1. 使用config set命令動態修改。比如,還是把slowlog-log-slower-than設置為1000,slowlog-max-len設置為1200:
> config set slowlog-log-slower-than 1000
OK
> config set slowlog-max-len 1200
OK
> config rewrite
OK

如果要Redis把配置持久化到本地配置文件,需要執行config rewrite命令。

總結

慢查詢指的是命令執行時長比較長的查詢。通過slowlog get命令獲取慢查詢日誌;通過slowlog len命令獲取慢查詢日誌的長度;通過slowlog reset命令清理慢查詢日誌。通過slowlog-log-slower-than配置命令執行時長的閾值;通過slowlog-max-len配置慢查詢日誌最多存儲的條數。

微信公眾號:萬貓學社

微信掃描二維碼

獲得更多Java技術乾貨


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 一、nginx版本 開源版本主要有: mainline--含最新特性和及時的bug修複,以及一些試驗性的組件和一些新bug; stable--不含最新特性,但含有重要的bug修複並跟隨移植到相關的mainline版本。推薦生產環境使用。 二、安裝方式: (1)使用預編譯的二進位包:此種方式最快捷; ...
  • 在sqlserver中,幾年之前就註意到一個現象:sqlserver中對一個大表創建索引或者rebuild索引的過程中,會引起記憶體劇烈的動蕩,究其原因為何,這種現象到底正不正常,是不是sqlserver記憶體管理存在缺陷?另外,最近剛好想到跟MySQL對比一下類似操作引起的記憶體變化,測試MySQL會不 ...
  • 一、Win10 下載、安裝 Navicat 15 1、關閉安全中心的實時保護 因為 註冊機 可能會被系統判定為 有害文件,可能會自動刪除,所以先將實時保護關閉,再去使用註冊機激活,激活後,再打開實時保護。 Step1:打開 Window 安全中心。 Step2:點擊病毒和威脅防護,併進入管理設置頁面 ...
  • 通過寫SQL查詢,我們可以發現很多簡單查詢語句主要就是由一些算術操作、欄位操作、函數還有各種子句構成的,今天我們從這個角度對MySQL單表查詢的基礎知識進行一個彙總。 __計算:__ 計算欄位 算術操作符 算術計算 欄位拼接 格式化顯示 __函數:__ 統計函數 其他常用函數 __子句:__ 排序 ...
  • 筆者大學所學電腦專業,讀書時接觸過Oracle、mysql和SQL SERVER,一度坐井觀天覺得資料庫應該也就這些了,但自筆者畢業進入數據倉庫這個行業,接觸的第一個商業資料庫即是Teradata,亦是接觸到的第一個MPP體系架構,先簡單談談個人對Teradata的認識吧 產品特點: 1.MPP架 ...
  • MySQL安裝 1.先去官網下載安裝包 官網: http://www.mysql.com 要下載社區版(community) 選對系統,選對你要的安裝包版本 點擊後就可以下載mysql了 2.下載完壓縮包之後解壓,並把解壓後的文件放到自己要放的文件夾中(最好不要出現中文目錄), 找到該文件夾下的bi ...
  • Redis介紹: Redis 是完全開源免費的,遵守BSD協議,是一個高性能的key-value資料庫。 Redis 與其他 key - value 緩存產品有以下三個特點: Redis支持數據的持久化RDB和AOF,可以將記憶體中的數據保存在磁碟中,重啟的時候可以再次載入進行使用。 Redis不僅僅 ...
  • MySQL Structured Query Language SQL簡介 SQL (Structured Query Language) 是具有數據操 縱和數據定義等多種功能的資料庫語言,這種語言具有交互性特點,能為用戶提供極大的便利,資料庫管理系統應充分利用SQL語言提高電腦應用系統的工作質量 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...