关于AOF日志重写问题
来源:4-8 持久化方式之AOF以及混合模式(合成)
不考过程序员不改名字
2021-07-12
老师您讲的第三点,往新的AOF中同步增量变动具体过程是怎样的。在子进程把新的AOF写到一个临时文件里的同时,主进程将新的变动写到内存和原来的AOF中,那这时系统中的变动在临时文件和旧的AOF文件中都会记录对吧,最后新的AOF文件同步变动的时候是将旧的AOF文件中的内容同步压缩到新的AOF文件中还是其他的操作?
写回答
1回答
-
翔仔
2021-07-13
同学好,
AOF重写并不是在主线程中,而是redis会fork一个bgrewriteaof子进程,这样就不会阻塞主线程执行了。
fork子进程的过程是要在主线程中执行的,这时候主线程需要拷贝内存页表,这个页表记录了虚拟内存和物理内存的映射关系,如果内存很大,拷贝过程花费的时间就会很大,而这个拷贝过程中主线程是阻塞的。
fork子进程完成后,主线程和bgrewriteaof子进程使用的是同一块儿内存空间,这时如果有新的写请求到来,并且写命令是已经存在的key,主线程会使用CopyOnWrite的方式,为这个key申请新的内存空间,进行写操作。
00
相似问题