2016-12-14 15 views
1

PostgreSQL 9.6 데이터베이스를 구성하여 pg_xlog 폴더의 크기를 제한하려고합니다. 이 문제 또는 유사한 문제에 관해 많은 스레드를 읽었지 만 도움을 요청한 것은 없습니다.pg_xlog 자동 청소 활성화 방법

PostgreSQL 9.6 서비스 인스턴스에 대한 설정 스크립트를 작성했습니다. initdb를 실행하고, Windows 서비스를 등록하고, 시작하고, 빈 데이터베이스를 만들고, 데이터베이스에 덤프를 복원합니다. 스크립트가 완료된 후 데이터베이스 구조는 훌륭하지만 데이터는 있지만 xlog 폴더에는 이미 55 개의 파일 (880MB)이 포함되어 있습니다.

폴더 크기를 줄이기 위해 wal_keep_segments를 0 또는 1로 설정하고 max_wal_size를 200MB로 설정하고 checkpoint_timeout을 줄이거 나 archive_mode를 off로 설정하고 archive_command를 빈 문자열로 설정해 보았습니다. pg_settings를 쿼리 할 때 속성이 올바르게 설정되었는지 확인할 수 있습니다.

그런 다음 SQL을 통해 체크 포인트를 강제 실행하고 데이터베이스를 비우고 Windows 서비스를 다시 시작한 다음 pg_archivecleanup을 시도했지만 아무 것도 실제로 작동하지 않았습니다. 내 xlog 폴더는 50 개의 파일 (800 MB)로 축소되었으며, 설정에서 설정 한 200 MB 한계 근처에 없었습니다.

나는 다른 것을 시도 할 실마리가 없습니다. 누군가 내가 잘못하고있는 것을 말할 수 있다면, 나는 매우 감사 할 것입니다. 더 많은 정보가 필요하다면, 나는 그것을 제공하게되어 기쁩니다.

많은 감사

답변

0

PostgreSQL을 적극적으로 max_wal_size 1GB의 기본 값 때 이미 할당 된 WAL 세그먼트를 제거하지 않습니다.

WAL 세그먼트가 가득 차서 재활용해야 할 때마다 점차 감소가 발생합니다. 그런 다음 PostgreSQL은 파일을 삭제할 것인지 (max_wal_size가 초과하는 경우) 또는 나중에 사용할 수 있도록 새 WAL 세그먼트로 이름을 바꿉니다.

길어서 기다리지 않으려면 pg_switch_xlog() 함수를 호출하여 많은 수의 WAL 스위치를 강제로 사용하면 pg_xlog의 파일 수를 줄여야합니다.

+0

인내심이 필요한 것 같습니다. 데이터베이스를 생성하기 전에 'ALTER SYSTEM SET max_wal_size = 20'을 포함하도록 설치 스크립트를 수정했습니다. 이렇게하면 px_log 폴더가 320MB를 초과하지 않습니다. 당신의 대답이 올바른 길로 나를 보내므로 확인했습니다. – Ggilmann

+0

그냥 SQL을 통해 구성을 다시로드해야한다는 것을 깨닫게되었습니다 'SELECT pg_reload_conf()' – Ggilmann