# 慢查詢記錄的保存
服務器狀態中包含了幾個和慢查詢日志功能有關的屬性:
~~~
struct redisServer {
// ...
// 下一條慢查詢日志的 ID
long long slowlog_entry_id;
// 保存了所有慢查詢日志的鏈表
list *slowlog;
// 服務器配置 slowlog-log-slower-than 選項的值
long long slowlog_log_slower_than;
// 服務器配置 slowlog-max-len 選項的值
unsigned long slowlog_max_len;
// ...
};
~~~
`slowlog_entry_id`?屬性的初始值為?`0`?, 每當創建一條新的慢查詢日志時, 這個屬性的值就會用作新日志的?`id`?值, 之后程序會對這個屬性的值增一。
比如說, 在創建第一條慢查詢日志時,?`slowlog_entry_id`?的值?`0`?會成為第一條慢查詢日志的 ID , 而之后服務器會對這個屬性的值增一; 當服務器再創建新的慢查詢日志的時候,?`slowlog_entry_id`?的值?`1`?就會成為第二條慢查詢日志的 ID , 然后服務器再次對這個屬性的值增一, 以此類推。
`slowlog`?鏈表保存了服務器中的所有慢查詢日志, 鏈表中的每個節點都保存了一個?`slowlogEntry`?結構, 每個?`slowlogEntry`?結構代表一條慢查詢日志:
~~~
typedef struct slowlogEntry {
// 唯一標識符
long long id;
// 命令執行時的時間,格式為 UNIX 時間戳
time_t time;
// 執行命令消耗的時間,以微秒為單位
long long duration;
// 命令與命令參數
robj **argv;
// 命令與命令參數的數量
int argc;
} slowlogEntry;
~~~
舉個例子, 對于以下慢查詢日志來說:
~~~
1) (integer) 3
2) (integer) 1378781439
3) (integer) 10
4) 1) "SET"
2) "number"
3) "10086"
~~~
圖 23-1 展示的就是該日志所對應的?`slowlogEntry`?結構。


圖 23-2 展示了服務器狀態中, 和慢查詢功能有關的屬性:
* `slowlog_entry_id`?的值為?`6`?, 表示服務器下條慢查詢日志的?`id`?值將為?`6`?。
* `slowlog`?鏈表包含了?`id`?為?`5`?至?`1`?的慢查詢日志, 最新的?`5`?號日志排在鏈表的表頭, 而最舊的?`1`?號日志排在鏈表的表尾, 這表明`slowlog`?鏈表是使用插入到表頭的方式來添加新日志的。
* `slowlog_log_slower_than`?記錄了服務器配置?`slowlog-log-slower-than`?選項的值?`0`?, 表示任何執行時間超過?`0`?微秒的命令都會被慢查詢日志記錄。
* `slowlog-max-len`?屬性記錄了服務器配置?`slowlog-max-len`?選項的值?`5`?, 表示服務器最多儲存五條慢查詢日志。
> 注意
> 因為版面空間不足的緣故, 所以圖 23-2 展示的各個?`slowlogEntry`?結構都省略了?`argv`?數組。
- 介紹
- 前言
- 致謝
- 簡介
- 第一部分:數據結構與對象
- 簡單動態字符串
- SDS 的定義
- SDS 與 C 字符串的區別
- SDS API
- 重點回顧
- 參考資料
- 鏈表
- 鏈表和鏈表節點的實現
- 鏈表和鏈表節點的 API
- 重點回顧
- 字典
- 字典的實現
- 哈希算法
- 解決鍵沖突
- rehash
- 漸進式 rehash
- 字典 API
- 重點回顧
- 跳躍表
- 跳躍表的實現
- 跳躍表 API
- 重點回顧
- 整數集合
- 整數集合的實現
- 升級
- 升級的好處
- 降級
- 整數集合 API
- 重點回顧
- 壓縮列表
- 壓縮列表的構成
- 壓縮列表節點的構成
- 連鎖更新
- 壓縮列表 API
- 重點回顧
- 對象
- 對象的類型與編碼
- 字符串對象
- 列表對象
- 哈希對象
- 集合對象
- 有序集合對象
- 類型檢查與命令多態
- 內存回收
- 對象共享
- 對象的空轉時長
- 重點回顧
- 第二部分:單機數據庫的實現
- 數據庫
- 數據庫鍵空間
- 重點回顧
- RDB 持久化
- RDB 文件結構
- 重點回顧
- AOF 持久化
- AOF 持久化的實現
- 重點回顧
- 事件
- 文件事件
- 重點回顧
- 參考資料
- 客戶端
- 客戶端屬性
- 重點回顧
- 服務器
- 命令請求的執行過程
- 重點回顧
- 第三部分:多機數據庫的實現
- 復制
- 舊版復制功能的實現
- 重點回顧
- Sentinel
- 啟動并初始化 Sentinel
- 重點回顧
- 參考資料
- 集群
- 節點
- 重點回顧
- 第四部分:獨立功能的實現
- 發布與訂閱
- 頻道的訂閱與退訂
- 重點回顧
- 參考資料
- 事務
- 事務的實現
- 重點回顧
- Lua 腳本
- 創建并修改 Lua 環境
- 重點回顧
- 排序
- SORT <key> 命令的實現
- 重點回顧
- 二進制位數組
- GETBIT 命令的實現
- 重點回顧
- 慢查詢日志
- 慢查詢記錄的保存
- 慢查詢日志的閱覽和刪除
- 添加新日志
- 重點回顧
- 監視器
- 成為監視器
- 向監視器發送命令信息
- 重點回顧
- 源碼、相關資源和勘誤