Redis APPENDFSYNC Parameter

<< APPENDFILENAME NO-APPENDFSYNC-ON-REWRITE >>

Redis appendfsync parameter

레디스 설정 파일인 redis.conf 에 있는 appendfsync 파라미터에 대한 설명입니다.  

설명

appendfsync는 appendonly 파일에 데이터가 쓰여지는 시점을 정하는 파라미터이다.   세 가지 옵션(always, everysec, no)이 있다.
이 세가지 옵션을 살펴보기 전에 데어터가 클라이언트에서 부터 디스크로 쓰여지는 과정을 보자.
  • Step 1: 클라이언트가 레디스 서버로 데이터를 보내다. 데이터는 현재 클라이언트 메모리에 있다.
  • Step 2: 레디스 서버가 데이터를 받는다. 데이터는 서버 메모리에 있다.
  • Step 3: 레디스 서버가 데이터를 디스크에 쓰는 write() 시스템 콜을 호출한다. 데이터는 커널 버퍼에 있다.
  • Step 4: 운영체제(OS)는 fsync() 시스템 콜을 호출해서 버퍼에 있는 데이터를 디스크 제어기(controller)에 쓴다. 데이터는 디스크 케시(cache)에 있다.
  • Step 5: 디스크 제어기는 물리적으로 디스크에 기록한다.
레디스 서버는 Step 3에서 write() 데이터를 디스크에 쓰기 위해 fsync() 시스템 콜을 호출한다.   이 fsync()는 Step 4를 제어한다. Step 5는 일반적으로 디스크 제어기가 알아서 한다.   Appendfsync 파라미터는 fsync()를 호출하는 시점을 정한다.

이제 세 가지 옵션에 대해서 알아보자.
  • always: 레디스 명령이 실행될 때 마다 디스크에 쓴다. 성능이 매우 떨어진다. 아주 특별한 경우가 아니면 권하지 않는다.
  • everysec: 데이터를 모아서 1초 마다 디스크에 쓴다. Write()와 fsync() 시스템 콜 호출의 지연 시간에 따라서 최대 2초 이내의 데이터를 잃어 버릴 수 있지만, 성능과 데이터 보존 양 측면에서 적절한 값이다.   기본값이다.
  • no: 디스크에 쓰는 시점을 운영체제(리눅스)에 맡긴다.   대부분의 리눅스 시스템에서는 30초 마다 디스크에 저장된다. 그러므로 운이 나쁠 경우 최대 30초간의 데이터를 유실할 수 있다.
디스크 기록 시점에 대한 자세한 내용은 Salvatore 블로그를 참조하세요.

사용 방법

appendfsync always
appendfsync everysec   <기본값>
appendfsync no



<< APPENDFILENAME APPENDFSYNC NO-APPENDFSYNC-ON-REWRITE >>

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

Email 返事がかかってなれば、メールでお知らせします。