먼저 롤 토토베이스를 채울 때 많은 양의 롤 토토를 삽입해야 할 수도 있습니다. 이 섹션은이 프로세스를 가능한 한 효율적으로 만드는 방법에 대한 몇 가지 제안이 포함되어 있습니다.
다중 사용시삽입
s, Autocommit을 끄고 끝에 커밋을 수행하십시오. (일반 SQL에서 이것은 발행을 의미합니다시작
시작시커밋
끝에. 일부 클라이언트 라이브러리는 등 뒤에서이 작업을 수행 할 수 있습니다.이 경우 라이브러리가 원할 때 라이브러리가 수행 해야하는지 확인해야합니다.) 각 삽입을 별도로 커밋하는 경우PostgreSQL추가 된 각 행에 대해 많은 작업을 수행하고 있습니다. 한 번의 트랜잭션에서 모든 삽입을 수행 할 때의 추가 이점은 한 행의 삽입이 실패하면 해당 지점까지 삽입 된 모든 행의 삽입이 롤백되므로 부분적으로로드 된 데이터가 고정되지 않을 것입니다..
COPY
useCOPY일련의 일련을 사용하는 대신 모든 행을 하나의 명령으로로드하려면삽입
명령. 그만큼COPY
명령은 많은 행을로드하는 데 최적화되었습니다. 보다 유연하지 않습니다.삽입
이지만 큰 롤 토토로드에 대해서는 오버 헤드가 상당히 덜 발생합니다. 부터COPY
단일 명령입니다.이 메소드를 사용하여 테이블을 채우는 경우 자동 커밋을 비활성화 할 필요가 없습니다.
사용할 수없는 경우COPY
, 사용에 도움이 될 수 있습니다준비준비된 생성삽입
statement, 그리고 사용execute
필요한만큼 여러 번. 이것은 반복적으로 구문 분석 및 계획의 오버 헤드를 피합니다삽입
. 다른 인터페이스는이 시설을 다양한 방식으로 제공합니다. 찾아보기“준비된 진술”인터페이스 문서에서.
많은 수의 행을 사용하여copy
사용하는 것보다 거의 항상 빠릅니다삽입
준비
사용되며 여러 삽입물이 단일 트랜잭션으로 배치됩니다.
copy
이전과 동일한 트랜잭션 내에서 사용될 때 가장 빠릅니다테이블 생성
또는Truncate
명령. 이러한 경우 WAL을 작성할 필요가 없습니다. 오류의 경우 새로로드 된 롤 토토를 포함하는 파일이 어쨌든 제거되므로 WAL은 작성할 필요가 없습니다. 그러나이 고려 사항은에만 적용됩니다.Wal_levelis최소
모든 명령이 WAL을 작성해야하기 때문에 분리되지 않은 테이블의 경우
새로 생성 된 테이블을로드하는 경우 가장 빠른 방법은 테이블을 작성하고 대량의 롤 토토를 사용하여를로드하는 것입니다.copy
, 그런 다음 테이블에 필요한 색인을 만듭니다. 기존 롤 토토에 대한 인덱스 생성은 각 행이로드 될 때 점진적으로 업데이트하는 것보다 빠릅니다.
기존 테이블에 많은 양의 롤 토토를 추가하는 경우 인덱스를 삭제하고 테이블을로드 한 다음 인덱스를 재현하는 것이 승리 할 수 있습니다. 물론 다른 사용자의 롤 토토베이스 성능은 인덱스가 누락 된 동안 어려움을 겪을 수 있습니다. 고유 한 인덱스를 삭제하기 전에 두 번 생각해야합니다. 인덱스가 누락 된 상태에서 고유 한 제약 조건이 손실되기 때문입니다.
인덱스와 마찬가지로 외래 키 제약 조건을 확인할 수 있습니다“대량”행으로보다 효율적으로. 따라서 외국의 주요 제약 조건을 삭제하고 롤 토토를로드하고 제약 조건을 다시 생성하는 것이 유용 할 수 있습니다. 다시 말하지만, 제약 조건이 누락 된 동안 롤 토토로드 속도와 오류 검사 손실 사이에는 상충 관계가 있습니다.
기존의 외국 키 제약 조건이있는 테이블에 데이터를로드 할 때 각 새 행에는 서버의 보류중인 트리거 이벤트 목록에 항목이 필요합니다 (행의 외래 키 제약 조건을 확인하는 트리거의 발사이기 때문에). 수백만 행을로드하면 트리거 이벤트 큐가 사용 가능한 메모리를 넘어서서 참을 수없는 스와핑 또는 명령의 실패가 발생할 수 있습니다. 따라서 일 수 있습니다.필요한많은 양의 롤 토토를로드 할 때 바람직하지 않은 외래 키를 삭제하고 다시 적용하는 것이 좋습니다. 제약 조건을 임시로 제거하는 것이 허용되지 않으면 다른 상환은로드 작업을 작은 트랜잭션으로 분할하는 것입니다.
maintending_work_mem
일시적으로 증가하는maintenance_work_mem구성 변수 다량의 롤 토토를로드 할 때 성능이 향상 될 수 있습니다. 이것은 속도를 높이는 데 도움이 될 것입니다색인 생성
명령 및Alter Table Add Foreign Key
명령. 그것은별로하지 않을 것입니다COPY
자체,이 조언은 위의 기술 중 하나 또는 둘 다를 사용할 때만 유용합니다.
max_wal_size
일시적으로 증가하는max_wal_size구성 변수는 큰 롤 토토로드를 더 빨리 만들 수 있습니다. 많은 양의 롤 토토를로드하기 때문입니다PostgreSQL정상 체크 포인트 주파수보다 자주 검사 점이 발생하게됩니다 (Checkpoint_Timeout
구성 변수). 체크 포인트가 발생할 때마다 모든 더러운 페이지가 디스크로 플러시되어야합니다. 증가함으로써max_wal_size
일시적으로 벌크 데이터로드 중에 필요한 체크 포인트 수를 줄일 수 있습니다.
WAL 아카이빙 또는 스트리밍 복제를 사용하는 설치에 다량의 데이터를로드 할 때 많은 양의 증분 월 데이터를 처리하는 것보다로드가 완료된 후에 새로운베이스 백업을 취하는 것이 더 빠를 수 있습니다. 로드하는 동안 증분 WAL 로깅을 방지하려면 설정하여 아카이브 및 스트리밍 복제를 비활성화합니다Wal_levelto최소
, archive_modetoOFF
및max_wal_senders~ 0. 그러나 이러한 설정을 변경하려면 서버가 다시 시작해야합니다.
Archiver 또는 WAL Sender가 WAL 데이터를 처리 할 시간을 피하는 것 외에도,이 작업을 수행하면 실제로 WAL을 작성하지 않도록 설계 되었기 때문에 실제로 특정 명령이 더 빨라집니다.Wal_level
is최소
. (그들은 충돌 안전을보다 저렴하게 보장 할 수 있습니다fsync
WAL을 작성하는 것보다 끝에서.) 이것은 다음 명령에 적용됩니다 :
선택 테이블 작성
색인 생성
(및 변형ALTER 테이블 기본 키 추가
)
ALTER 테이블 세트 테이블 스페이스
클러스터
COPY From
, 대상 테이블이 동일한 트랜잭션에서 일찍 생성되거나 잘린 경우
분석
나중에테이블 내에서 롤 토토 분포를 크게 변경할 때마다 실행 중분석강력히 권장됩니다. 여기에는 대량의 데이터가 많은 양의 데이터를 테이블에로드하는 것이 포함됩니다. 달리기분석
(또는진공 분석
)는 플래너가 표에 대한 최신 통계를 보장합니다. 통계 나 쓸모없는 통계가 없기 때문에 플래너는 쿼리 계획 중에 잘못된 결정을 내릴 수 있으며, 부정확하거나 존재하지 않는 통계가있는 테이블에서 성능이 저하 될 수 있습니다. Autovacuum 데몬이 활성화되면 실행될 수 있습니다분석
자동으로; 보다섹션 24.1.3and섹션 24.1.6자세한 내용은
덤프 스크립트에 의해 생성pg_dump위의 지침 중 몇 가지이지만 전부는 아니지만 자동으로 적용됩니다. a를 새로 고침하려면pg_dump가능한 빨리 덤프하면 수동으로 몇 가지 추가 작업을 수행해야합니다. (이 점이 적용되는 동안복원덤프, 덤프가 아닙니다생성IT. 텍스트 덤프를로드하는지 동일한 점이 적용PSQL또는 사용PG_RESTOREA에서로드하려면pg_dump아카이브 파일.)
기본적으로pg_dump용도COPY
및 완전한 스키마 및 데이터 덤프를 생성 할 때 인덱스 및 외래 키를 생성하기 전에 데이터를로드하는 것이 신중합니다. 따라서이 경우 몇 가지 지침이 자동으로 처리됩니다. 당신이해야 할 일은 다음과 같습니다.
적절한 설정 (예 : 정상보다 큰) 값maintenance_work_mem
andmax_wal_size
.
WAL 아카이빙 또는 스트리밍 복제를 사용하는 경우 복원 중에 비활성화하는 것을 고려하십시오. 그렇게하려면 설정archive_mode
toOFF
, Wal_level
to최소
및max_wal_senders
24279_24390
평행 덤프 실험 및 두 가지 모두의 복원 모드pg_dump및PG_RESTORE사용해야 할 최적의 동시 작업 수를 찾으십시오. |-j
옵션은 직렬 모드보다 훨씬 높은 성능을 제공해야합니다.
전체 덤프를 단일 트랜잭션으로 복원 해야하는지 고려하십시오. 그렇게하려면를 통과하십시오.-1
또는-스플리닝 전환
명령 줄 옵션PSQL또는PG_RESTORE. 이 모드를 사용할 때 가장 작은 오류조차도 전체 복원을 롤백하여 많은 시간의 처리를 폐기 할 수 있습니다. 데이터가 어떻게 관련되어 있는지에 따라 수동 정리에 바람직한 것처럼 보일 수 있습니다.COPY
단일 트랜잭션을 사용하고 WAL 아카이브를 끄면 명령이 가장 빠르게 실행됩니다.
롤 토토베이스 서버에서 여러 CPU를 사용할 수있는 경우 사용을 고려하십시오.PG_RESTORE's-jobs
옵션. 이를 통해 동시 데이터로드 및 인덱스 생성이 가능합니다.
run분석
나중에.
롤 토토 전용 덤프가 여전히 사용됩니다COPY
그러나 인덱스를 삭제하거나 재현하지 않으며 일반적으로 외국 키를 촉구하지 않습니다.[13]따라서 롤 토토 전용 덤프를로드 할 때는 해당 기술을 사용하려면 인덱스와 외래 키를 삭제하고 재현하는 것이 귀하에게 달려 있습니다. 여전히 유용합니다max_wal_size
롤 토토를로드하는 동안maintenance_work_mem
; 오히려, 당신은 그 후에도 인덱스와 외국 키를 수동으로 재현하면서 그렇게 할 것입니다. 그리고 잊지 마세요분석
당신이 끝났을 때; 보다섹션 24.1.3and섹션 24.1.6자세한 내용은
[13]당신은를 사용하여 외래 키를 비활성화하는 효과를 얻을 수 있습니다-disable-triggers
옵션 - 그러나 연기만으로는 외국의 주요 검증이 아니라 제거되는 것이 아니라 사용하면 잘못된 데이터를 삽입 할 수 있습니다..