慢查詢?nèi)罩?/h1>

2018-02-23 16:24 更新

慢查詢?nèi)罩?/h2>

Redis 的慢查詢?nèi)罩竟δ苡糜谟涗泩?zhí)行時(shí)間超過給定時(shí)長(zhǎng)的命令請(qǐng)求, 用戶可以通過這個(gè)功能產(chǎn)生的日志來(lái)監(jiān)視和優(yōu)化查詢速度。

服務(wù)器配置有兩個(gè)和慢查詢?nèi)罩鞠嚓P(guān)的選項(xiàng):

  • slowlog-log-slower-than?選項(xiàng)指定執(zhí)行時(shí)間超過多少微秒(1?秒等于?1,000,000?微秒)的命令請(qǐng)求會(huì)被記錄到日志上。

    舉個(gè)例子, 如果這個(gè)選項(xiàng)的值為?100?, 那么執(zhí)行時(shí)間超過?100?微秒的命令就會(huì)被記錄到慢查詢?nèi)罩荆?如果這個(gè)選項(xiàng)的值為?500?, 那么執(zhí)行時(shí)間超過?500?微秒的命令就會(huì)被記錄到慢查詢?nèi)罩荆?諸如此類。

  • slowlog-max-len?選項(xiàng)指定服務(wù)器最多保存多少條慢查詢?nèi)罩尽?/p>

    服務(wù)器使用先進(jìn)先出的方式保存多條慢查詢?nèi)罩荆?當(dāng)服務(wù)器儲(chǔ)存的慢查詢?nèi)罩緮?shù)量等于?slowlog-max-len?選項(xiàng)的值時(shí), 服務(wù)器在添加一條新的慢查詢?nèi)罩局埃?會(huì)先將最舊的一條慢查詢?nèi)罩緞h除。

    舉個(gè)例子, 如果服務(wù)器?slowlog-max-len?的值為?100?, 并且假設(shè)服務(wù)器已經(jīng)儲(chǔ)存了?100?條慢查詢?nèi)罩荆?那么如果服務(wù)器打算添加一條新日志的話, 它就必須先刪除目前保存的最舊的那條日志, 然后再添加新日志。

讓我們來(lái)看一個(gè)慢查詢?nèi)罩竟δ艿睦樱?首先用?CONFIG_SET?命令將?slowlog-log-slower-than?選項(xiàng)的值設(shè)為?0?微秒, 這樣 Redis 服務(wù)器執(zhí)行的任何命令都會(huì)被記錄到慢查詢?nèi)罩局校?接著將?slowlog-max-len?選項(xiàng)的值設(shè)為?5?, 讓服務(wù)器最多只保存?5?條慢查詢?nèi)罩荆?/p>

redis> CONFIG SET slowlog-log-slower-than 0
OK

redis> CONFIG SET slowlog-max-len 5
OK

接著, 我們用客戶端發(fā)送幾條命令請(qǐng)求:

redis> SET msg "hello world"
OK

redis> SET number 10086
OK

redis> SET database "Redis"
OK

然后使用?SLOWLOG GET?命令查看服務(wù)器所保存的慢查詢?nèi)罩荆?/p>

redis> SLOWLOG GET
1) 1) (integer) 4               # 日志的唯一標(biāo)識(shí)符(uid)
   2) (integer) 1378781447      # 命令執(zhí)行時(shí)的 UNIX 時(shí)間戳
   3) (integer) 13              # 命令執(zhí)行的時(shí)長(zhǎng),以微秒計(jì)算
   4) 1) "SET"                  # 命令以及命令參數(shù)
      2) "database"
      3) "Redis"
2) 1) (integer) 3
   2) (integer) 1378781439
   3) (integer) 10
   4) 1) "SET"
      2) "number"
      3) "10086"
3) 1) (integer) 2
   2) (integer) 1378781436
   3) (integer) 18
   4) 1) "SET"
      2) "msg"
      3) "hello world"
4) 1) (integer) 1
   2) (integer) 1378781425
   3) (integer) 11
   4) 1) "CONFIG"
   2) "SET"
   3) "slowlog-max-len"
   4) "5"
5) 1) (integer) 0
   2) (integer) 1378781415
   3) (integer) 53
   4) 1) "CONFIG"
      2) "SET"
      3) "slowlog-log-slower-than"
      4) "0"

如果這時(shí)再執(zhí)行一條?SLOWLOG GET?命令, 那么我們將看到, 上一次執(zhí)行的?SLOWLOG GET?命令已經(jīng)被記錄到了慢查詢?nèi)罩局校?而最舊的、編號(hào)為?0?的慢查詢?nèi)罩疽呀?jīng)被刪除, 服務(wù)器的慢查詢?nèi)罩緮?shù)量仍然為?5?條:

redis> SLOWLOG GET
1) 1) (integer) 5
   2) (integer) 1378781521
   3) (integer) 61
   4) 1) "SLOWLOG"
      2) "GET"
2) 1) (integer) 4
   2) (integer) 1378781447
   3) (integer) 13
   4) 1) "SET"
      2) "database"
      3) "Redis"
3) 1) (integer) 3
   2) (integer) 1378781439
   3) (integer) 10
   4) 1) "SET"
      2) "number"
      3) "10086"
4) 1) (integer) 2
   2) (integer) 1378781436
   3) (integer) 18
   4) 1) "SET"
      2) "msg"
      3) "hello world"
5) 1) (integer) 1
   2) (integer) 1378781425
   3) (integer) 11
   4) 1) "CONFIG"
   2) "SET"
   3) "slowlog-max-len"
   4) "5"

以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)