From 9ca306d874a02409cdef6ff873e684a0e5cc3078 Mon Sep 17 00:00:00 2001 From: antirez Date: Wed, 3 Apr 2013 18:55:38 +0200 Subject: [PATCH] AOF: sync data on disk every 32MB when rewriting. This prevents the kernel from putting too much stuff in the output buffers, doing too heavy I/O all at once. So the goal of this commit is to split the disk pressure due to the AOF rewrite process into smaller spikes. Please see issue #1019 for more information. --- src/aof.c | 1 + src/redis.h | 1 + 2 files changed, 2 insertions(+) diff --git a/src/aof.c b/src/aof.c index c629bed4..ac50d572 100644 --- a/src/aof.c +++ b/src/aof.c @@ -855,6 +855,7 @@ int rewriteAppendOnlyFile(char *filename) { } rioInitWithFile(&aof,fp); + rioSetAutoSync(&aof,REDIS_AOF_AUTOSYNC_BYTES); for (j = 0; j < server.dbnum; j++) { char selectcmd[] = "*2\r\n$6\r\nSELECT\r\n"; redisDb *db = server.db+j; diff --git a/src/redis.h b/src/redis.h index 4ace7eb3..76e6172e 100644 --- a/src/redis.h +++ b/src/redis.h @@ -106,6 +106,7 @@ #define REDIS_INLINE_MAX_SIZE (1024*64) /* Max size of inline reads */ #define REDIS_MBULK_BIG_ARG (1024*32) #define REDIS_LONGSTR_SIZE 21 /* Bytes needed for long -> str */ +#define REDIS_AOF_AUTOSYNC_BYTES (1024*1024*32) /* fdatasync every 32MB */ /* Hash table parameters */ #define REDIS_HT_MINFILL 10 /* Minimal hash table fill 10% */ -- GitLab