개요
이중화 사용시 발생할 수 있는 현상인 give-up과 give-up이 미치는 영향에 대해 설명합니다.
적용버전
- ALTIBASE HDB 6.3.1 을 기준으로 작성 되었습니다.
- 추가사항 또는 업데이트가 필요한 경우 http://support.altibase.com/kr/ 또는 이 페이지에 댓글로 요청 글 남겨주세요.
Replication과 로그파일
알티베이스 이중화는 log_based replication 방법을 사용하고 있습니다.
즉, active쪽에서 생성된 로그들을 standby 쪽으로 전송함으로써 양 서버간의 데이타 일치를 보장하는 방법입니다.
알티베이스에서 로그파일들은 일정 수만큼의 로그파일들만 생성하여 이를 circular하게 재생성하는 것이 아니라 로그가 생기는 만큼 계속적으로 로그파일들이 자동으
로 생성하는 방식입니다. 그렇기 때문에 불필요한 로그파일들은 주기적으로 삭제되어야만 disk full을 방지할 수 있습니다.
로그파일의 삭제는 checkpoint 수행시 이루어지며, 다음과 같은 조건에 있는 로그파일들은 삭제될 수 없습니다.
(1) 현재 진행 중인 트랜잭션이 참조하고 있는 로그파일
(2) 이중화 전송이 안되어 이중화에서 참조해야 하는 로그파일
(3) CLR(Compensation Log Record의 약자이며 트랜잭션 롤백시 생성되는 로그 레코드의 타입) 로그가 참조하고 있는 로그 화일
따라서, 어떠한 이유로 인해 이중화 데이타 전송이 느려지면 로그파일이 삭제가 되지 않아 disk full이 발생할 수 있습니다.
이중화 give-up이란
이중화 문제로 인해 로그파일이 삭제되지 않는 경우 disk full을 방지하기 위해 이중화에서 최대 유지할 수 있는 로그파일의 갯수를 지정할 수 있습니다.
삭제되지 않은 로그파일의 갯수가 이 갯수를 초과하게 되면 비록 이중화 데이타가 전송되지 않았더라도 이러한 이중화 데이타를 포기하고 로그파일을 삭제하여 disk full을 방지하게 됩니다.
이처럼 이중화 데이타가 전송되지 않았음에도 불구하고 이중화에 필요한 로그파일을 삭제하는 현상을 이중화 give-up이라 합니다.
give-up 발생시 미치는 영향
이중화 give-up이 발생하면 active와 standby 양 서버간의 데이타 불일치 현상이 발생되어, 심각한 문제를 초래할 수도 있습니다.
give-up 방지방법
이중화 give-up을 막으려면 이중화 성능에 영향을 미칠 수 있는 네트워크 속도가 항상 안정된 상태임을 보장해야 합니다.
그리고, 정전이나 네트워크 단절 등 비정상적인 상태에서도 give-up 현상을 피하려면 최악의 상황을 고려하여 give-up이 발생하지 않도록 프로퍼티의 값을 늘려서 수정해주어야 합니다.
REPLICATION_MAX_LOGFILE = 400
이 프로퍼티의 단위는 로그파일 갯수를 의미하며 위의 예와 같이 400으로 설정된 경우, 현재 삭제되지 않은 로그파일의 갯수가 400개 이상이면 이중화 give-up이 발생하게 됩니다.
give-up 발생시 이중화 진행여부 설정(자동)
REPLICATION_MAX_LOGFILE 프로퍼티로 설정된 값을 초과하여 이중화가 잠시 중단된 이후, 다시 시작하는 방식을 설정할수 있습니다.
REPLICATION_SENDER_START_AFTER_GIVING_UP = 1 (default)
0으로 설정된 경우에는, 이중화 "재시작 SN" (즉 SYS_REPLICATIONS_ 메타 테이블의 XSN 컬럼의 값)이 -1로 초기화되며, 이중화는 중지된다. 그리고, SYS_REPLICATIONS_ 메타 테이블의 IS_STARTED 컬럼의 값이 0으로 바뀐다.
1로 설정된 경우, 이중화 "재시작 SN" 값은 현재 로그 파일의 마지막 (가장 큰) SN으로 변경되고, 이중화는 이 "재시작 SN" 부터 다시 수행된다.
give-up 확인주기
give-up을 수행해야 하는지 여부의 검사는 checkpoint가 수행될 때 이루어집니다.
로그파일의 삭제가 checkpoint시 수행되기 때문입니다.
give-up 발생 여부의 확인
give-up이 발생하면 이중화 메타테이블에 give-up 시간이 기록됩니다.
REPLICATION_NAME : 이중화 이름
IS_STARTED : 이중화 시작 여부 (start 1, stop 0)
GIVE_UP_TIME : 가장 최근에 이중화를 포기한 일시