안녕하세요. 다시 도움을 받고자 질문을 드리게 되었습니다.
문제의 원인은 아래 링크에서 확인하시면 됩니다.
http://database.sarang.net/index.php?inc=read&aid=9377&criteria=pgsql&subcrit=qna&id=&limit=20&keyword=&page=1
위 사항에 관한 진행 경과를 말씀드립니다.
예상대로 vacuum으로 해결이 안되었습니다. vacuum analyze 를 실행하여 남은 트랜잭션 수를 줄여 0까지 만들었지만.. 다음 vacuum에서 다시 40억으로 늘어난 숫자를 메시지로 보여 줍니다.
vacuum은 포기하고, 물리백업 (pg_start_backup, pg_stop_backup, rsync를 이용하여 백업)을 복구했습니다.
결과는 실패(동일한 메시지를 내보내며 dml, ddl 이 안됨)...
눈물을 흘리며 논리백업(pg_dump 했던 파일)으로 데이터베이스를 재생성 합니다.
1. $PGDATA 의 파일을 제거
2. 다른 테이블스페이스의 파일 제거
3. initdb
4. 논리백업(pg_dump 했던 파일)을 psql을 이용하여 실행.
반쯤... 실행되며... 거의 성공할 듯 합니다. 스키마 별로 백업을 했는데, 30여개의 스키마 중 2/3 가 성공했고... 나머지 크기가 큰 넘들만 남은 상태입니다.
현재 상황을 좀 자세히 기술하자면 아래와 같습니다.
CentOS 6.3 (64bit)
Postgresql-9.2
데이터베이스 크기는 약 4TB~5TB
데이터베이스 1개 아래에 30~40개 정도의 스키마.
autovacuum 은 실행중.
default_with_oids 는 off 로 설정되어 있음.
insert 이외의 dml은 극히 적은 상황.
이런 상황에서도 vacuum을 메뉴얼하게 해야 하는 걸까요?
크기가 좀 커져서 autovacuum으로는 부족하고 full vacuum을 주기적으로 실행해야 할 필요가 있는지 궁금합니다.
혹시 그런 판단을 할 만한 작업이 있는지도 궁금합니다.
또 한가지는...
현재 만일의 상황에 대비해서 일주일에 한번 논리백업(pg_dump), 하루에 한번 물리백업(pg_start_backup, pg_stop_backup, rsync를 이용하여 백업)을 수행했습니다.
보다 빠른 복구를 위해서 혹시 더 나은 백업정책이나 방법이 있을가요?
위의 오류가 발생했을 당시의 물리백업으로는 정상적인 복구가 안되는 것으로 판단되었습니다.
제 짧은 생각으로는 해당 데이터베이스 파일에 문제가 발생했던 것인데... 문제가 발생한 상태를 백업한 것을 그대로 복구했으니 정상적인 데이터베이스 상태를 만들지 못한것이라 예상됩니다.
제 생각이 맞는 걸까요?
선배님들의 조언 부탁드립니다.
|