PostgreSQL : pg_dump, pg_restore 성능 향상
시작했을 때 pg_dump
기본 일반 형식을 사용했습니다. 나는 깨닫지 못했다.
연구 결과 pg_dump -Fc | gzip -9 -c > dumpfile.gz
. 나는 깨달았다.
데이터베이스를 새로 만들 때가되면
# create tablespace dbname location '/SAN/dbname';
# create database dbname tablespace dbname;
# alter database dbname set temp_tablespaces = dbname;
% gunzip dumpfile.gz # to evaluate restore time without a piped uncompression
% pg_restore -d dbname dumpfile # into a new, empty database defined above
나는 깨닫지 못했다고 느꼈다. 복원은 데이터베이스를 만드는 데 12 시간이 걸렸다.
# select pg_size_pretty(pg_database_size('dbname'));
47 GB
이 데이터베이스가 몇 테라 바이트가 될 것이라는 예측이 있기 때문에 지금 성능 향상을 살펴 봐야합니다.
제발 계몽 해주세요.
먼저 디스크 설정에서 적절한 IO 성능을 얻고 있는지 확인하십시오. 그런 다음 PostgreSQL 설치가 적절하게 조정되었는지 확인합니다. 특히 shared_buffers
올바르게 설정 maintenance_work_mem
되어야하며, 복원 중에는 증가해야하며, 복원 full_page_writes
중에는 꺼져 있어야하며, 복원 wal_buffers
중에는 16MB checkpoint_segments
로 증가해야하며, 복원 중에는 16과 같은 값으로 증가해야하며, 불합리한 로그온이 없어야합니다. (실행 된 모든 명령문을 로깅하는 것과 같이) auto_vacuum
복원 중에는 비활성화해야합니다.
8.4를 사용중인 경우 병렬 복원도 실험 해보고 pg_restore에 대한 --jobs 옵션을 사용합니다.
두 가지 문제 / 아이디어 :
-Fc를 지정하면 pg_dump 출력이 이미 압축되어 있습니다. 압축은 최대가 아니므로 "gzip -9"를 사용하여 약간의 공간 절약을 찾을 수 있지만 백업의 -Fc 버전을 압축 및 압축 해제하는 데 사용되는 추가 시간 (및 I / O)을 보장하는 것으로는 충분하지 않습니다. .
PostgreSQL 8.4.x를 사용하는 경우 새로운 pg_restore 명령 줄 옵션 "-j n"을 사용하여 -Fc 백업에서 복원 속도를 높일 수 있습니다. 여기서 n은 복원에 사용할 병렬 연결 수입니다. 이렇게하면 pg_restore가 둘 이상의 테이블 데이터를로드하거나 동시에 둘 이상의 인덱스를 생성 할 수 있습니다.
pg 덤프 및 복원 개선
PG_DUMP | 항상 -j
옵션 과 함께 형식 디렉토리 사용
time pg_dump -j 8 -Fd -f /tmp/newout.dir fsdcm_external
PG_RESTORE | 항상 -j
옵션을 사용하여 형식 디렉토리와 함께 postgres.conf에 튜닝을 사용하십시오.
work_mem = 32MB
shared_buffers = 4GB
maintenance_work_mem = 2GB
full_page_writes = off
autovacuum = off
wal_buffers = -1
time pg_restore -j 8 --format=d -C -d postgres /tmp/newout.dir/`
더 많은 정보를 위해서
https://github.com/YanarAssaf/PostgreSQL/wiki/Improve-pg-dump%7Crestore
데이터베이스의 주요 업그레이드가 아니라 백업이 필요하다고 가정합니다.
대형 데이터베이스의 백업을 위해 당신은 설정해야 지속적인 보관 대신을 pg_dump
.
예를 들어
psql template1 -c "select pg_start_backup('
'date + % F- % T' ' 를 사용하여 매일 기본 백업을 만듭니다. "
복원은 pg_start_backup
백업 위치에서 시간이 지나지 않은 데이터베이스 및 WAL 로그를 복원 하고 Postgres를 시작 하는 것처럼 간단 합니다. 그리고 훨씬 빨라질 것입니다.
zcat dumpfile.gz | pg_restore -d db_name
현재 병목 현상 인 디스크에 압축되지 않은 데이터의 전체 쓰기를 제거합니다.
백업을 압축하면 성능이 더 빨라진다는 사실만으로 짐작할 수 있듯이 백업은 I / O 바운드입니다. 백업이 거의 항상 I / O 바운드이기 때문에 이것은 놀라운 일이 아닙니다. 데이터를 압축하면 I / O로드가 CPU로드와 교환되며 대부분의 CPU는 몬스터 데이터 전송 중에 유휴 상태이므로 압축이 순이익으로 나옵니다.
따라서 백업 / 복원 시간을 단축하려면 더 빠른 I / O가 필요합니다. 하나의 거대한 단일 인스턴스가되지 않도록 데이터베이스를 재구성하는 것 외에는 거의 모든 작업을 수행 할 수 있습니다.
참고 URL : https://stackoverflow.com/questions/2094963/postgresql-improving-pg-dump-pg-restore-performance
'IT박스' 카테고리의 다른 글
django-rest-framework 3.0 중첩 직렬 변환기에서 생성 또는 업데이트 (0) | 2020.11.02 |
---|---|
XML 속성과 요소 (0) | 2020.11.02 |
GC로 또는 GC로 (0) | 2020.11.02 |
iOS7 반투명 탐색 막대에서 올바른 색상을 얻으십시오. (0) | 2020.11.02 |
JObject.Parse 대 JsonConvert.DeserializeObject (0) | 2020.11.02 |