2017-11-20 17 views
0

내 postgresql 환경에서 내 wal 동작을 이해하려고합니다. 내 월마트의 설정은 다음과 같습니다PostgreSQL 9.6 wals 관리

wal_keep_segments = 200 
max_wal_size = 3GB 
min_wal_size = 80MB 
archive_command = 'cp %p /PostgreSQL-wal/9.6/pg_xlog/wal_archives/%f' 
archive_timeout = 10 
#checkpoint_flush_after = 256kB 
#checkpoint_completion_target = 0.5 

내 wals 디렉토리는 /PostgreSQL-wal/9.6/pg_xlog/하고 내 아카이브 디렉토리는 PostgreSQL을 - 월마트/9.6/pg_xlog/wal_archives입니다. 지난 밤 내 wals 디렉토리에 저장 (그들은 같은 FS에 또한 아카이브 디렉토리이기 때문에 ..) L 전체 얻었다

내 wal`s 디렉토리에 지금 211 wals 있습니다

ls -l /PostgreSQL-wal/9.6/pg_xlog/ | wc -l 
212 

유일한을 밤 동안 달리던 일은 우리의 모니터링 에이전트에서만 선택됩니다. wal_keep_segments가 높기 때문에 archive_timeout이 매우 낮았 기 때문에 wal이 만들어 졌다고 생각합니다. 오늘 아침에 wal_keep_segments를 100으로 설정하고 archive_timeout을 6 분으로 설정했습니다. 이제 설정을 완료하고 클러스터를 시작한 후 wals 스위치가 제대로 작동하고 많은 왈이 만들어 졌음을 알지 못했습니다. 그러나 오래된 왈은 자동으로 삭제되어서는 안됩니까? 보관 파일을 안전하게 삭제할 수 있습니까?

답변

2

max_wal_size은 엄격한 제한 사항이 아닙니다.

한계를 초과하면 다음 체크 포인트에서 PostgreSQL이 이전 WAL 세그먼트를 재활용하는 대신 삭제합니다. 따라서 pg_xlog은 다음 검사 점까지 계속 커질 수 있습니다.

3GB의 설정은 19235 WAL 세그먼트에 해당하며 이는 wal_keep_segments 설정보다 낮습니다. 그래서 PostgreSQL은 WAL 세그먼트가 3.125 GB가 될 때까지 재활용하거나 삭제하기 시작하지 않습니다.

이러한 설정을 낮추거나 WAL 아카이브의 디스크 공간을 늘려야합니다.

데이터베이스 활동으로 인해 새 WAL 세그먼트로 전환되거나 pg_switch_wal() 함수가 수동으로 수행 할 때까지 기다리거나 둘 중 하나를 수행 할 수 있습니다. 그런 다음 검사 점을 기다리거나 수동으로 CHECKPOINT을 실행하십시오. 그런 다음 WAL 세그먼트의 수가 감소하면 표시됩니다.

+0

wal_keep_segments를 100으로 설정했습니다. 지금은 3.360G를 의미하는 212 개의 월이 있습니다. 그래서, 그것은 어떤 wal을 삭제하기 시작해야하지 않습니까? 아카이브에 관해서는, 그것들을 삭제하는 것이 안전할까요? 지금 데이터베이스를 복원 할 의도가 없다면? – Mariel

+0

'pg_xlog' 파일을 절대로 삭제하면 데이터베이스가 손상 될 수 있습니다. 나는'pg_xlog'의 크기를 줄이는 방법을 추가했습니다. –

+0

너는 나를 이해하지 못했다. 아카이브에 관해서는 archive_command로 생성 된 파일에 대해 이야기하고 있습니다. – Mariel