한국어English日本語简体中文繁體中文DeutschไทยTiếng ViệtРусскийPortuguês (Brasil)EspañolBahasa Indonesia

게임 렉 백서 › L12 데이터베이스

긴 저장 주기로 인한 진행 유실 Periodic save window

원인 ID db-save-interval · 주 담당 게임개발팀·서버 개발 · 함께 인프라팀·DB 인프라

그림과 실험이 있는 원본 카드로 열기 →

부하를 줄이려 몇 분에 한 번만 저장하면, 그 사이 서버가 죽을 때 진행이 사라집니다.

왜 캐릭터 상태를 몇 분마다 한 번 저장 → 그러면 그 사이 서버 크래시·장애 발생 → 화면에서는 다시 접속하니 몇 분 전 상태(롤백)

증상
씹힘·롤백
요인
손실
누가 겪나
서버 전체, 특정 장소·채널
언제
가끔 무작위로
담당
주 담당 게임개발팀·서버 개발 · 함께 인프라팀·DB 인프라
게임개발팀 할 일
중요 이벤트(거래, 희귀 획득)는 즉시 저장, 변경 로그 기록.
인프라팀 할 일
저장 주기를 줄였을 때 늘어나는 쓰기를 감당할 DB의 IOPS·CPU 여유 확인.
그래프에서는
연결이 한꺼번에 끊김 · 접속 수, 롤백 신고 수
확인할 곳
크래시·장애 시각과, 롤백을 신고한 캐릭터의 마지막 저장 시각(게임 서버의 저장 로그나 DB의 수정 시각 컬럼)을 나란히 놓음
이러면 맞음
되돌아간 시점이 크래시 직전의 마지막 저장 시각과 일치하고 잃은 시간이 저장 주기보다 짧음
이러면 아님
게임 서버 로그에는 저장이 끝났다고 남아 있는데도 되돌아갔으면 DB 장애 전환의 데이터 유실(db-failover)이나 복제본에서 읽은 옛 값(db-replica-lag)
확인 수단
게임 서버·클라이언트의 로그·지표가 필요

출처

  1. Asynchronous Commit (PostgreSQL Documentation) PostgreSQL
    기록을 모아 늦게 내리면 처리량이 오르는 대신, 장애 때 가장 최근 트랜잭션이 사라질 수 있음(같은 맞바꿈)
  2. Redis persistence Redis
    RDB 스냅샷을 몇 분마다 만들면 비정상 종료 때 마지막 몇 분의 데이터를 잃을 각오를 해야 함

함께 보면 좋은 원인

같은 층: L12 데이터베이스

같은 증상(씹힘·롤백)의 다른 층 원인

그림과 실험이 있는 원본 카드 보기