안녕하세요.
WAL, Archive 관련해서 많은 테스트를 해보고 있습니다.
Table을 하나 만들어서 generate_series를 이용하여 계속 트랜잭션을 발생시켰습니다.
pg_xlog에 WAL이 계속 쌓였고, archived_mode=on이었기 때문에 archive파일 또한 쌓였습니다.
pg_xlog의 archive_status 디렉토리에서도 .done 파일들을 확인할 수 있었습니다.
이 상황에서 WAL에 문제가 생겼을 때, 트랜잭션이 발생하느냐를 알아보기 위해 간단한 테스트를 진행했습니다.
가장 마지막에 쓰여진 WAL 파일을 rm명령으로 삭제하고, insert문을 발행했습니다.
오라클db의 경우 alert 메시지가 뜨는데, 이상하게도 PostgreSQL은 정상적으로 데이터가 들어가는 것입니다.
그리고 WAL도 그 다음 번호로 건너뛰어서 기록을 하고 있었습니다.
하지만 여기서 문제가 하나 발생했는데, WAL을 삭제한 시점부터 archive파일이 쌓이지 않습니다.
로그 파일을 살펴 봤더니,
00000: 2016-11-25 00:04:02 KST [5350]: [2623-1] user = ,db = ,remote = app = LOG: archive command failed with exit code 1
00000: 2016-11-25 00:04:02 KST [5350]: [2624-1] user = ,db = ,remote = app = DETAIL: The failed archive command was: "/opt/fsepv95server64/bin/pgx_xlogcopy.cmd" "pg_xlog/0000000100000000000000C1" "/postgres/backup/backup/archived_xlog/0000000100000000000000C1" discard "/postgres/data/waldiscard.txt"
01000: 2016-11-25 00:04:02 KST [5350]: [2625-1] user = ,db = ,remote = app = WARNING: archiving transaction log file "0000000100000000000000C1" failed too many times, will try again later
삭제한 WAL 파일에 대해서 계속 아카이빙을 할 수 없다고 메시지가 수도 없이 발생합니다.
또한, 프로세스를 보아도 알 수 있습니다.
postgres 5350 5342 0 Nov24 ? 00:00:02 postgres: archiver process failed on 0000000100000000000000C1
구글링을 찾아봤더니, pg_archivecleanup을 하면된다해서 해봤는데도 archive가 되지 않습니다.
그리고 pg_xlog의 archive_status 디렉토리를 보면
0000000100000000000000C1.ready 0000000100000000000000DD.ready 0000000100000000000000E9.ready 0000000100000000000000F5.ready 000000010000000100000001.ready
0000000100000000000000D2.ready 0000000100000000000000DE.ready 0000000100000000000000EA.ready 0000000100000000000000F6.ready 000000010000000100000002.ready
삭제된 WAL인 C1이후로 .done이 되지않고 .ready 상태입니다.
해결 방법 조언 부탁 드립니다.
감사합니다. |