通過慢查詢找到阻塞的命令

如何通過慢查詢找到阻塞的命令?針對這個問題,今天小編總結這篇有關redis阻塞的文章,希望幫助更多想學習redis的同學找到更加簡單易行的辦法。

蟠龍網(wǎng)站制作公司哪家好,找創(chuàng)新互聯(lián)公司!從網(wǎng)頁設計、網(wǎng)站建設、微信開發(fā)、APP開發(fā)、響應式網(wǎng)站設計等網(wǎng)站項目制作,到程序開發(fā),運營維護。創(chuàng)新互聯(lián)公司2013年開創(chuàng)至今到現(xiàn)在10年的時間,我們擁有了豐富的建站經(jīng)驗和運維經(jīng)驗,來保證我們的工作的順利進行。專注于網(wǎng)站建設就選創(chuàng)新互聯(lián)公司。

和MySQL一樣,Redis也有慢查詢記錄。當命令的執(zhí)行時間超過設定的值時,該命令就會記錄到慢查詢列表中。通過慢查詢,我們可以改進我們的程序。防止redis阻塞。

配置

慢查詢的配置參數(shù)有兩個:

  • slowlog-log-slower-than

  • slowlog-max-len

slowlog-log-slower-than用來設定一個閾值,單位為微妙,默認值為10000,即10毫秒。

  • 當值設置為小于0時,任何命令都不會記錄;

  • 當值等于0時,會記錄所有的命令。

slowlog-max-len表示最多記錄的條數(shù),默認為128,例如將它設為10,當有第11條慢查詢插入的話,那么隊頭的數(shù)據(jù)就會出列。

這兩個配置還支持動態(tài)配置,當項目剛剛開始時,訪問量不是很大時,可以將slow-log-slower-than的值設大些。當訪問量越來越大的時候,可能就需要將其值改小點。但我們不想停止redis服務,那么就可以動態(tài)的修改該配置。

127.0.0.1:6379> config set slowlog-log-slower-than 1000
OK  
# 在線修改配置
127.0.0.1:6379> config rewrite
OK
# 將修改的配置持久化到配置文件中

運維建議:當訪問量大的時候,一般我們建議將slowlog-log-slower-than設置為1000,或更小。當這個值為1000時,表示redis最多能支持1000個并發(fā)。

慢查詢查看

redis的慢查詢查看和mysql有區(qū)別,redis查看的話有專門的命令。

獲取慢查詢?nèi)罩?/strong>

slowlog get [n],n表示條數(shù),默認為10

127.0.0.1:6379> slowlog get
1) 1) (integer) 18004
   2) (integer) 1589424642
   3) (integer) 50
   4) 1) "slowlog"
      2) "get"
   5) "127.0.0.1:58364"
   6) ""
2) 1) (integer) 18003
   2) (integer) 1589423805
   3) (integer) 47
   4) 1) "slowlog"
      2) "get"
   5) "127.0.0.1:58364"
   6) ""
……
  • 第一個參數(shù)是日志標識id號

  • 第二個為發(fā)生時間戳

  • 第三個為命令執(zhí)行的時間(微妙)

  • 最后一個是命令及參數(shù)。

獲取慢查詢的長度

slowlog len

127.0.0.1:6379> slowlog len
(integer) 128

清空慢查詢列表

127.0.0.1:6379> slowlog reset
OK

將慢查詢?nèi)罩境志没絤ysql中

因為redis的長度有限制,所以在慢查詢很多的情況下,會出現(xiàn)丟失的情況。我們可以定時去redis取出慢查詢記錄列表,將其持久化到mysql中,防止這種情況發(fā)生。

偽代碼如下:

while (true) {
    $slowlen = $redis->slowlog('len');
    $slowlogs = $redis->slowlog('get',$slowlen);
    $insSql  = "INSERT INTO 
        slowlog(exec_time,run_time,command) VALUES";
     
    if (is_array($slowlogs) && count($slowlogs)) {
     
        foreach ($slowlogs as $slowlog) {
            $execTime = $slowlog[2];
            $runTime  = $slowlog[1];
            $command  = implode(' ', $slowlog[3]);
     
            $insSql .= "('$execTime', '$runTime','$command'),";
        }
     
        $flag = mysqli_query($mysqli, substr($insSql, 0, -1));
     
        if ($flag) {
            $redis->slowlog('reset');
        }
    }
    
    unsleep(10000);
}

以上就是通過慢查詢找到阻塞的命令的方法介紹,詳細使用情況還得要大家自己使用過才能知道具體要領。如果想閱讀更多相關內(nèi)容的文章,歡迎關注創(chuàng)新互聯(lián)行業(yè)資訊頻道!

當前題目:通過慢查詢找到阻塞的命令
轉載來于:http://bm7419.com/article2/psohoc.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供手機網(wǎng)站建設、企業(yè)網(wǎng)站制作、移動網(wǎng)站建設響應式網(wǎng)站、營銷型網(wǎng)站建設、做網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉載內(nèi)容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)