데이터베이스에 55GB SQL 파일을 쓰려고 합니다. 매번 충돌이 발생했습니다. 로그를 삭제하고 정리 작업을 수행하여 서버를 실행했지만 트랜잭션이 완료되지 않았습니다. 나중에 쓰고 있던 모든 테이블을 비웠지만(백업이 있었습니다) 그 이후에도 SQL 파일에 쓰려고 하면 일련의 성공적인 삽입 후에 이 오류가 발생했습니다. 파일을 쓸 수 없습니다. " 오프셋 106496의 pg_subtrans" /14C6": 장치에 남은 공간이 없습니다.
이 문제를 해결할 방법이 있나요? 정리해야 할 PGSQL 관련 로그가 있나요? pg_xlog를 옮기는 것이 도움이 될 수 있다는 것을 읽었습니다. 이걸 시도해 봐야 할까요?
어떤 도움이라도 대단히 감사하겠습니다.
감사해요!
df -h
가독성을 위해 주석 출력 형식을 다시 지정했습니다.
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/vg_zarkin-lv_root 574G 540G 4.3G 100% /
/dev/sda1 194M 35M 150M 19% /boot
tmpfs 5.9G 928K 5.9G 1% /dev/shm
/dev/mapper/smeidc0-smeisky0 7.2T 5.2T 2.0T 73% /smeidc/sky0
/dev/md0 7.2T 6.5T 400G 95% /smeidc/backup
답변1
데이터베이스에 55GB SQL 파일을 쓰려고 합니다. [...] 장치에 남은 공간이 없습니다. 이 문제를 해결할 방법이 있나요?
아니요.
로드하기 전에 애플리케이션에 충분한 양의 데이터를 제공해야 합니다.
이 답변이 약간 간결하다는 것을 알고 있으므로 아래에 초보자 수준의 팁을 추가하세요.
내 디스크 공간은 어디로 갔나요?
Postgres 테이블에서 사용하는 총 디스크 공간은 다음을 포함하는 물리적 모델의 결과입니다.
- 테이블 행을 포함하는 테이블 블록
- 인덱스 블록(인덱싱된 경우)
- 트랜잭션 로그(일명 WAL 또는 xlog, 잠시 후 사라짐)
테이블 행의 물리적 크기는 데이터 유형과 데이터 압축 정도에 따라 달라집니다. 대략 있습니다. 행당 22바이트의 오버헤드가 있으므로 약 100바이트의 원시 압축 데이터가 있는 경우 행은 약 122바이트를 차지합니다.
인덱스의 물리적 크기는 예측하기 어렵고 인덱스 필드와 인덱스 유형에 따라 달라집니다.
일괄 업데이트 중에 디스크 사용량을 줄이는 방법은 무엇입니까?
디스크 오버헤드를 최소화하려면 PostgreSQL 설명서의 공식 성능 팁을 따르세요.
일괄 업데이트 후 디스크 사용량을 줄이는 방법은 무엇입니까?
다음은 PostgreSQL 데이터베이스의 크기를 줄이는 데 도움이 되는 몇 가지 팁입니다.
전체 테이블을 지우고 싶다면 SQL을 참고하세요.
DELETE
파일이 항상 정리되는 것은 아닙니다. 사용TRUNCATE
DELETE
, 테이블 내용을 완전히 삭제 하지 마십시오 .테이블을 완전히 지울 수 없고 행의 큰 하위 집합(50% 이상)을 삭제해야 하는 경우 다음 명령을 실행하는 것이 유용합니다.
VACUUM FULL
또는CLUSTER
DELETE 이후의 명령은 테이블을 축소하는 데 사용됩니다.트랜잭션 로그(pg_xlog 디렉터리)에 보관되는 데이터의 양은 다음을 통해 제어할 수 있습니다.포스트그레스 서버 설정
사용되지 않는 데이터베이스, 테이블 및 인덱스는 다음 명령을 사용하여 감지할 수 있습니다.시스템 보기(pg_stat_database, pg_stat_user_tables, pg_stat_user_indexes)