redis AOF檔案過大

2022-09-23 12:15:09 字數 2121 閱讀 3233

最近新安裝了一台redis,版本為redis-3.2.5

資料盤用的是固態硬碟。

之前用的是普通硬碟,redis日誌天天報

asynchronous aof fsync is taking too long (disk is busy?). writing the aof buffer without waiting for fsync to complete, this may slow down redis.

換了固態硬碟,就沒報了。

用了3天,發現aof檔案越來越大。

-rw-r–r– 1 root root 136672283898 dec 9 08:50 appendonly_6379.aof

-rw-r–r– 1 root root 5200941168 dec 7 18:09 temp-rewriteaof-26452.aof

本身redis用了19g記憶體,但是aof檔案達到了128g

每天早上起床都要把磁碟擴容一次才行,不然磁碟就滿了,煩死了。

可是這樣下去,不能解決問題,畢竟是雲伺服器,每天加錢擴容也不好。

後來在網上,發現有乙個命令bgrewriteaof,可以優化aof檔案

步驟如下:

先進入redis

redis-cli -p 6379 -h 127.0.0.1

127.0.0.1:6379>bgrewriteaof

再去檢視aof檔案的目錄,發現多了乙個檔案

-rw-r–r– 1 root root 136672283898 dec 9 08:51 appendonly_6379.aof

-rw-r–r– 1 root root 5851018456 dec 9 08:51 temp-rewriteaof-1927.aof

-rw-r–r– 1 root root 5200941168 dec 7 18:09 temp-rewriteaof-26452.aof

等待幾分鐘

再次檢視aof檔案

-rw-r–r– 1 root root 22477825463 dec 9 09:11 appendonly_6380.aof

-rw-r–r– 1 root root 5200941168 dec 7 18:09 temp-rewriteaof-26452.aof

已經明顯減少了

再把temp-rewriteaof-26452.aof檔案刪除,它已經沒有用了

我突然發現乙個問題

執行了bgrewriteaof之後,temp-rewriteaof之類的檔案,就再也沒有產生了,好神奇。

引用相關解釋:

bgrewriteaof

執行乙個 aof檔案 重寫操作。重寫會建立乙個當前 aof 檔案的體積優化版本。

即使 bgrewriteaof 執行失敗,也不會有任何資料丟失,因為舊的 aof 檔案在 bgrewriteaof 成功之前不會被修改。

重寫操作只會在沒有其他持久化工作在後台執行時被觸發,也就是說:

如果 redis 的子程序正在執行快照的儲存工作,那麼 aof 重寫的操作會被預定(scheduled),等到儲存工作完成之後再執行 aof 重寫。在這種情況下, bgrewriteaof 的返回值仍然是 ok ,但還會加上一條額外的資訊,說明 bgrewriteaof 要等到儲存操作完成之後才能執行。在 redis 2.6 或以上的版本,可以使用 info 命令檢視 bgrewriteaof 是否被預定。

如果已經有別的 aof 檔案重寫在執行,那麼 bgrewriteaof 返回乙個錯誤,並且這個新的 bgrewriteaof 請求也不會被預定到下次執行。

從 redis 2.4 開始, aof 重寫由 redis 自行觸發, bgrewriteaof 僅僅用於手動觸發重寫操作。

我都已經3.2.5,貌似redis沒有自動觸發bgrewriteaof

算了,還是每天定期的去執行一次

寫了乙個指令碼

brgewriteaof.sh

內容如下:

/usr/local/redis/redis-cli -p 6379 -h 127.0.0.1 bgrewriteaof

新增許可權

chmod 755 brgewriteaof.sh

設定任務計畫,每天凌晨2點跑一次

0 2 * * * /opt/brgewriteaof.sh

解決redis aof檔案過大的問題

執行bgrewriteaof命令對redis的aof進行重寫 redis cli bgrewriteaof redis的aof機制有點類似於mysql binlog,是redis的提供的一種持久化方式 另一種是rdb 它會將所有的寫命令按照一定頻率 no,always,every seconds 寫...

MDF LDF檔案過大

use ivms8100 go object storedprocedure dbo clearmemory script date 04 13 2010 14 28 39 set ansi nulls on goset quoted identifier on go start 強制釋放記憶體 c...

Redis aof備份恢復

aof 的配置 auto aof rewrite percentage 100 aof檔案大小比起上次重寫時的大小,增長率100 時,重寫 auto aof rewrite min size 64mb aof檔案,至少超過64m時,重寫注 在dump rdb 過程中,aof 如果停止同步 會不會丟失...