postgresql에서 디스크 공간이 가득 찬 경우


14

postgresql 9.3.10 백엔드 (Linux OS에 앉아 있음)가있는 Django 웹 응용 프로그램이 있습니다. 디스크 가득 참 오류가 발생하여 테이블을 자르려고해도 정렬 오류가 발생합니다.

ERROR:  could not extend file "base/30137/33186048": No space left on device
HINT:  Check free disk space.

서버에 디스크 공간을 쉽게 추가하거나이 VM에서 항목을 삭제할 수 없습니다. 그러나 잘릴 후보 테이블이 여러 개 있지만 지금은 잘릴 수 없습니다.

누구든지 내가 여기서 할 수있는 일에 대해 조언 해 줄 수 있습니까? 이것은 프로덕션 서버에 큰 타격을 입히고 있으며 우연히 우연한 DBA입니다.


인덱스를 (일시적으로) 삭제하고 테이블을 자른 다음 다시 만들 수 있으면 공간을 확보 할 수 있습니다.
joanolo

답변:


9

PostgreSQL은 테이블을 변경하기 전에 WAL을 작성해야하므로 사물을 삭제하고 더 많은 디스크 공간을 해제하려면 사용 가능한 디스크 공간이 필요합니다.

디스크를 가득 채우면 PostgreSQL 내에서 복구 할 수 없습니다. 심지어 TRUNCATE여전히 WAL에 기록한다.

그래서 당신은 해야한다 볼륨에 약간의 공간을 확보하거나, 볼륨을 확장합니다. PostgreSQL 로그 파일이 pg_log데이터 디렉토리에 있으면 해당 파일 중 일부를 안전하게 제거하고 Pg를 다시 시작할 수 있습니다.

마십시오 하지 삭제 pg_xlog또는 pg_clog. 이들은 서버 오류 로그가 아니며 데이터베이스, 트랜잭션 로그 및 커밋 로그의 중요한 부분입니다.


TRUNCATE월마트에 글을 써야합니까? WAL에서 해당 항목은 어떻게 생겼습니까?
에반 캐롤 1

"잘라내 기는 전체 데이터를 기록하지 않고 잘림이 발생한 사실 만 기록합니다. 롤백 할 수 있도록 기본 파일은 트랜잭션 커밋까지 유지됩니다." [source] ( postgresql.org/message-id/… 벽에있는 잘림의 항목은 매우 작고 바이트입니다. 필요한 공간로드가 전부 rm -rf /tmp/*라면 vimrc를 가져 오거나 삭제할 수 있습니다.
Evan Carroll

@EvanCarroll rm -rf /tmp/*... 응용 프로그램 소켓 등과 같이 원하는 항목을 삭제할 수 있습니다. 더 선택적인 것이 좋습니다. 필요한 공간에 관해서는, 당신은 옳습니다. 최소한 8k 빈 테이블 + 자르기, xid 할당, 커밋 레코드 등을위한 몇 kb의 WAL 항목
Craig Ringer
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.