We are seeing loads of IO from redis-server despite our save operations being set to occur once every 15 minutes only.
The workload is a "full page cache"; we store blobs of compressed HTML. The HTML can be re-created on the fly if necessary, we don't therefore need up-to-the-minute backups / persistence.
Server specs:
2x Hex Core Intel Xeon E5-2640 2.5GHz
128GB RAM
2x 400GB Intel SSDs in RAID 1
IO:
# pidstat -d | grep redis
05:01:35 PM PID kB_rd/s kB_wr/s kB_ccwr/s Command
05:01:35 PM 23450 0.01 3981.60 0.00 redis-server
redis save config:
redis 127.0.0.1:6379> config get save
1) "save"
2) "900 10000"
redis appendfsync config:
redis 127.0.0.1:6379> config get appendfsync
1) "appendfsync"
2) "no"
From the manual
RDB maximizes Redis performances since the only work the Redis parent process needs to do in order to persist is forking a child that will do all the rest. The parent instance will never perform disk I/O or alike.
I would therefore only expect high IO from Redis when the temporary child process exists to execute the background save operation.
From our Redis log, regarding background saves:
# tail /var/log/redis/redis.log
[23450] 27 Aug 16:43:20 * 10000 changes in 900 seconds. Saving...
[23450] 27 Aug 16:43:20 * Background saving started by pid 47396
[47396] 27 Aug 16:44:28 * DB saved on disk
[23450] 27 Aug 16:44:29 * Background saving terminated with success
[23450] 27 Aug 16:59:30 * 10000 changes in 900 seconds. Saving...
[23450] 27 Aug 16:59:30 * Background saving started by pid 4722
[4722] 27 Aug 17:00:40 * DB saved on disk
[23450] 27 Aug 17:00:40 * Background saving terminated with success
This runs every 900 seconds (15 mins) and takes approximately 1 minute to execute.
How can I debug this further?