Redis BGREWRITEAOF

<< BIND SAVE >>

Redis BGREWRITEAOF

개요 槪要 Outline

AOF 파일(appendonly.aof)은 그대로 두면 계속 커진다.   따라서 적당한 시점에 디시쓰기(rewrite)를 해야한다.   redis.conf의 auto-aof-rewrite-percentage 파라미터로 크기가 증가면 자동으로 다시쓰기를 할 수 있다. 100으로 설정하면 이전 다시쓰기 후 100% 증가하면 메모리에 있는 전체 데이터를 다시쓰는 것이다.   수동으로 하는 방법은 bgrewriteaof 명령을 실행하는 것이다.   이 명령은 auto-aof-rewrite-percentage 파라미터를 0으로 설정해서 자동 다시쓰기를 사용하지 않거나, 설정했어도 필요에 따라서 직접 수행할 필요가 있을 때 사용한다.

설명 說明 Explanation

다시쓰기(rewrite)는 시간이 많이 걸리는 작업이므로 자식 프로세스(child process)를 생성(fork)해서 자식 프로세스가 담당한다. 자식 프로세스는 임시 파일을 만들어 메모리에 있는 전체 데이터를 쓴다.   쓰기 도중에 발생한 변경 분은 다시쓰기를 1차 완료한 다음 추가한다.   추가하는 도중에 발생한 데이터는 부모 프로세스가 모아두고 있다가 추가가 완료되면 파일을 받아서 부모 프로세스가 최종 추가한다.
다시쓰기 중에도 부모 프로세스는 평상시와 같이 원래 AOF 파일에 쓰고 있으므로 다시쓰기가 실패해도 데이터는 손실은 없다.

다시쓰기에 대한 자세한 내용은 AOF Rewrite를 보세요.

AOF와 RDB에 대한 전반적인 내용은 Redis Persistence를 보세요.

레디스 클라이언트에서 이 명령을 실행하면 완료될때까지 기다리지 않고 시작했다는 메시지를 보여주고, 바로 프롬프트를 보여준다.

127.0.0.1:7000> bgrewriteaof
Background append only file rewriting started
127.0.0.1:7000>

아래는 다시쓰기 시 서버 로그이다.   자식 프로세스가 끝났다고 완료된 것이 아니고 마지막 메시지 "Background AOF rewrite finished successfully"까지 나와야 완료된 것이다.

41768:M 12:16:58.500 * Background append only file rewriting started by pid 46914
41768:M 12:17:22.564 * AOF rewrite child asks to stop sending diffs.
46914:C 12:17:22.564 * Parent agreed to stop sending diffs. Finalizing AOF...
46914:C 12:17:22.564 * Concatenating 0.00 MB of AOF diff received from parent.
46914:C 12:17:22.564 * SYNC append only file rewrite performed
46914:C 12:17:22.594 * AOF rewrite: 0 MB of memory used by copy-on-write
41768:M 12:17:22.641 * Background AOF rewrite terminated with success
41768:M 12:17:22.641 * Residual parent diff successfully flushed to the rewritten AOF (0.00 MB)
41768:M 12:17:22.641 * Background AOF rewrite finished successfully

INFO persistence

INFO persistence 명령으로 다시쓰기 진행 상황 확인 방법

  • aof_rewrite_in_progress: 현재 다시쓰기가 진행중이면 1, 아니면 0
  • aof_rewrite_scheduled: AOF 다시쓰기를 시작해야 하나 현재 RDB 파일을 쓰고 있으면 두 가지를 동시에 진행하지 않고 RDB 파일 쓰기가 끝나면 AOF 다시쓰기를 시작한다.   이 경우 스케줄을 걸어놓고 1로 설정한다. 아니면 0이다.
  • aof_last_rewrite_time_sec: 지난 번 다시쓰기 소요 시간(초)이다. 한 번도 다시쓰기를 하지 않았을 경우는 -1이다.
  • aof_current_rewrite_time_sec: 현재 다시쓰기가 진행중이면 소요 시간(초)이 나온다. 완료되면 -1이 된다.
  • aof_last_bgrewrite_status: 지난 번 다시쓰기 상태이다. ok/err로 표시된다.
  • aof_current_size:1857464296   현재 AOF 파일 크기(바이트)이다.
  • aof_base_size:1438142675   지난 번 다시쓰기 후 파일 크기(바이트)이다.   다시쓰기를 하지 않았을 경우 서버 시작 시 파일 크기이다.


명령문 Command

BGREWRITEAOF

  • 이 명령은 version 1.0.0 부터 사용할 수 있다.
  • 이 문서는 버전 3.2.2를 기준으로 만들었다.
Clients for C Hiredis


<< BIND BGREWRITEAOF SAVE >>

질문하거나 댓글을 보려면 클릭하세요.  댓글수 :    조회수 :

Email 답글이 올라오면 이메일로 알려드리겠습니다.