Redis BGSAVE

<< SAVE LASTSAVE >>

Redis BGSAVE

개요 槪要 Outline

RDB(snapshot) 파일을 Async 방식으로 저장한다.   이 명령은 레디스 메모리에 있는 모든 데이터를 RDB 포멧으로 저장한다.   레디스 서버는 자식 프로세스(Child Process)를 생성(fork)해서 처리한다.   그러므로 실제 저장은 자식 프로세스가 한다.

설명 說明 Explanation

레디스 클라이언트에서 BGSAVE 명령을 수행하면 잠시 후 "Background saving started" 메시지를 내보내고 프롬프트가 뜬다.

클라이언트 명령

127.0.0.1:7000> bgsave
Background saving started
127.0.0.1:7000>
  • Bgsave가 이미 진행중이라면 "Background save already in progress" 메시지를 내보내고 중지한다.
  • AOF 다시쓰기(rewrite)가 진행중이면 "An AOF log rewriting in progress: can't BGSAVE right now. Use BGSAVE SCHEDULE in order to schedule a BGSAVE whenver possible." 메시지를 내보내고 중지한다.
  • AOF 다시쓰기가 완료된 후 Bgsave를 이어서 진행하고 싶으면 schedule 옵션을 사용한다.   "bgsave schedule", 그러면 "Background saving scheduled" 메시지를 남기고 스케줄 된다.   이 옵션은 3.2.0에서 추가되었다.

서버 로그

47168:M 01:46:12.241 * Background saving started by pid 48602
48602:C 01:46:23.992 * DB saved on disk
48602:C 01:46:24.021 * RDB: 0 MB of memory used by copy-on-write
47168:M 01:46:24.103 * Background saving terminated with success

다음은 slowlog와 latency monitor를 10ms로 설정했을 경우 잡힌 기록이다.
slowlog 조회 결과: 2 번째 항목이 발생(완료) 시각이고, 3 번재 항목 응답 시간(microseconds)이고, 네 번재 항목이 명령이다.

127.0.0.1:7000> slowlog get
1) 1) (integer) 3
2) (integer) 1475945172
3) (integer) 49564
4) 1) "bgsave"

latency 조회 결과: 1 번째 항목이 이벤트명(command)이고, 2 번째 항목이 발생(완료) 시각이고, 3 번째 항목 마지막 응답 시간(milliseconds)이고, 네 번째 항목이 최대(max) 응답 시간이다.
명령 처리 시각과 fork 시각이 같고, 응답 시간(ms)도 같다.   bgsave 명령은 자식 프로세스를 생성(fork)하는 것까지 처리(응답) 시간으로 잡힌다.   이후 작업은 자식 프로세스에서 하므로 bgsave 처리 시간에는 들어가지 않는다.

127.0.0.1:7000> latency latest
1) 1) "command"
2) (integer) 1475945172
3) (integer) 49
4) (integer) 11636
2) 1) "fork"
2) (integer) 1475945172
3) (integer) 49
4) (integer) 49

Timestamp를 일시로 변환해 보면 서버 로그의 첫 번째 메시지 시각과 같음을 알 수 있다.

# date -d @1475945172
2016. 10. 09. (일) 01:46:12 KST

info persistence의 rdb_last_save_time 시각과 lastsave의 시각이 같다.   이것은 서버 로그의 네 번째 메시지, 즉 RDB 저장 완료 시각과 같음을 알 수 있다.
slowlog와 latency monitor 시각은 fork 완료 시각이고, info, lastsave 시각은 RDB 저장 완료 시각이다.   다름에 유의하자.

127.0.0.1:7000> info persistence
rdb_last_save_time:1475945184
127.0.0.1:7000> lastsave
(integer) 1475945184
# date -d @1475945184
2016. 10. 09. (일) 01:46:24 KST

레디스 Persistence와 RDB에 대한 일반적인 내용이 궁금하면 Redis Persistence를 보세요.

Save 명령의 자세한 내부 구조는 RDB Bgsave를 보세요.

RDB 파일 format에 대한 자세한 설명은 RDB Format를 보세요.


명령문 Command

BGSAVE [schedule]

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


<< SAVE BGSAVE LASTSAVE >>

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

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