처음있을 때 많은 양의 데이터를 삽입해야 할 수도 있습니다. 토토 캔를 채우고 있습니다. 이 섹션에는 몇 가지 제안이 포함되어 있습니다 이 프로세스를 가능한 한 효율적으로 만드는 방법.
다중 사용시삽입s, 회전 Autocommit에서 벗어나 마지막에 커밋을 수행하십시오. (평범한 SQL, 이것은 발행을 의미합니다시작at 시작 및커밋끝에. 일부 클라이언트 라이브러리는 등 뒤에서이 작업을 수행 할 수 있습니다. 원할 때 라이브러리가 수행해야합니다. 완료.) 각 삽입이 별도로 커밋되면postgresql많은 일을하고 있습니다 추가 된 각 행에 대해 작동합니다. 추가 혜택 한 번의 트랜잭션의 모든 삽입은 한 줄은 실패한 다음 모든 행의 삽입이 삽입되었습니다. 그 시점까지 롤백 될 것이므로 갇히지 않을 것입니다. 부분적으로로드 된 데이터.
usePostgreSQL : 문서 : 9.1 : 젠 토토모든 행을로드하려면 일련의를 사용하는 대신 하나의 명령삽입명령. 그만큼copy명령은 크게로드하기 위해 최적화되었습니다 행의 수; 보다 유연하지 않습니다.삽입이지만 오버 헤드가 상당히 덜 발생합니다 큰 토토 캔로드. 부터COPYis 단일 명령, 당신이 가면 자동 커밋을 비활성화 할 필요가 없습니다. 이 방법을 사용하여 테이블을 채우십시오.
사용할 수없는 경우COPY사용 도움말PostgreSQL : 문서 : 9.1 : 범퍼카 토토생성 a 준비삽입진술 사용execute필요한만큼 여러 번. 이것은 반복적으로 구문 분석의 일부를 피하고 계획삽입. 다른 인터페이스 이 시설을 다양한 방식으로 제공하십시오. 찾아보기"준비된 진술"인터페이스에서 선적 서류 비치.
많은 행을 사용하여 많은 행을로드하는COPY사용하는 것보다 거의 항상 빠릅니다삽입준비가 사용되고 여러 삽입이 있습니다 단일 거래로 배치되었습니다.
COPY내에서 사용하면 가장 빠릅니다 이전과 동일한 거래생성 테이블또는Truncate명령. ~ 안에 그러한 경우 WAL이 작성할 필요는 없습니다. 오류, 새로로드 된 토토 캔가 포함 된 파일은 다음과 같습니다. 어쨌든 제거되었습니다. 그러나이 고려 사항은에만 적용됩니다.Wal_levelis최소모든 명령이 작성해야합니다 WAL 그렇지 않으면.
새로 생성 된 테이블을로드하는 경우 가장 빠릅니다. 메소드는 테이블을 작성하고 대량으로로드하여 테이블의 토토 캔를 사용하여COPY, 필요한 색인을 만듭니다 테이블 용. 기존 토토 캔에 대한 인덱스 생성은 다음과 같습니다 각 행처럼 점진적으로 업데이트하는 것보다 빠릅니다 짐을 실은.
기존에 많은 양의 데이터를 추가하는 경우 테이블, 인덱스를 삭제하고 테이블을로드하는 것은 승리 일 수 있습니다. 그런 다음 인덱스를 재현하십시오. 물론 토토 캔 다른 사용자의 성능은 인덱스가 누락되었습니다. 또한 전에 두 번 생각해야합니다 오류 검사가 제공 한 이후 고유 인덱스 삭제 인덱스가있는 동안 독특한 제약이 손실됩니다. 없어진.
인덱스와 마찬가지로 외국의 주요 제약 조건은 점검"대량"보다 효율적으로 줄보다. 따라서 외국 키를 떨어 뜨리는 것이 유용 할 수 있습니다 제약,로드 토토 캔 및 제약 조건을 다시 창출합니다. 다시, 토토 캔로드 속도와 오류 손실 사이에 상충 관계가 있습니다. 제약 조건이 누락 된 상태에서 확인합니다.
기존이있는 테이블에 데이터를로드 할 때 외국의 주요 제약 조건, 각 새 행에 항목이 필요합니다. 서버의 보류중인 트리거 이벤트 목록 (발사이기 때문에 행의 외국 키 제약 조건을 확인하는 트리거). 수백만 행을로드하면 트리거 이벤트 대기열이 발생할 수 있습니다. 사용 가능한 메모리를 넘어서서 참을 수없는 스와핑으로 이어집니다 또는 명령의 명백한 실패조차도. 따라서 일 수 있습니다.필요한크게로드 할 때 외국 키를 떨어 뜨리고 다시 적용하는 것이 바람직합니다. 토토 캔 양. 일시적으로 제약 조건을 제거하는 경우는 그렇지 않습니다 허용되는 유일한 다른 의지는 부하를 분할하는 것입니다. 더 작은 거래로의 운영.
일시적으로 증가하는Maintenance_Work_mem구성 변수 다량의 토토 캔를로드 할 때 성능 향상으로 이어집니다. 이것은 속도를 높이는 데 도움이 될 것입니다색인 생성명령 및ALTER 테이블 외국 키 추가명령. 그렇지 않습니다 에 대해 많은 일을하십시오COPY자체 조언은 하나 또는 둘 다를 사용할 때만 유용합니다. 위의 기술.
일시적으로 증가하는Checkpoint_segments구성 변수는 큰 토토 캔로드를 더 빨리 만들 수 있습니다. 많은 양의 토토 캔를로드하기 때문입니다PostgreSQL원인이 될 것입니다 체크 포인트는 일반 체크 포인트보다 더 자주 발생합니다 주파수 (에 의해 지정됨Checkpoint_Timeout구성 변수). 체크 포인트가 발생할 때마다 모든 더러운 페이지를 플러시해야합니다. 디스크에. 증가함으로써Checkpoint_segments일시적으로 벌크 데이터 중 하중, 필요한 체크 포인트 수는 줄인.
많은 양의 데이터를 설치에로드 할 때 WAL 아카이빙 또는 스트리밍 복제를 사용하면 더 빠를 수 있습니다. 로드가 완료된 후 새로운베이스 백업을 수행하려면 많은 양의 증분 월 데이터를 처리하십시오. 방지하기 위해 로드하는 동안 증가하는 WAL 로깅, 아카이브 비활성화 및 스트리밍 복제, 설정Wal_levelto최소, archive_modetoOFF및max_wal_senders0까지. 그러나 이러한 설정을 변경하려면 a가 필요합니다 서버 재시작.
아카이버 또는 월 발신자의 시간을 피하는 것 외에
WAL 데이터를 처리하려면이 작업을 수행하면 실제로 확인할 수 있습니다.
WAL을 작성하지 않도록 설계 되었기 때문에 더 빨리 명령
모두 ifWal_levelis최소. (그들은 충돌 안전을 더 보장 할 수 있습니다
저렴하게fsync
at
Wal을 작성하는 것보다 끝납니다.) 이것은 다음에 적용됩니다.
명령 :
테이블을 선택하여
색인 생성(그리고 그러한 변형 처럼Alter Table 추가 기본 열쇠)
ALTER 테이블 세트 테이블 스페이스
클러스터
COPY From, 대상 일 때 테이블이 동일하게 일찍 생성되거나 잘 렸습니다. 거래
분포를 크게 변경할 때마다 테이블 내 토토 캔, 실행분석강력하게 권장됩니다. 이것 대량의 토토 캔가 많은 양의 토토 캔를 테이블에 포함시킵니다. 달리기분석(또는진공 분석)는 플래너에 보장합니다 표에 대한 최신 통계. 통계가 없거나 구식 통계에 따르면 플래너는 잘못된 결정을 내릴 수 있습니다 쿼리 계획 중에는 성능 저하로 이어집니다 부정확하거나 존재하지 않는 통계가있는 테이블. IF에 유의하십시오 autovacuum 데몬이 활성화되고 실행될 수 있습니다분석자동으로; 보다섹션 23.1.3및섹션 23.1.5더 많은 정보.
덤프 스크립트에 의해 생성pg_dump자동으로 몇 가지를 적용하지만 위의 지침 중 하나는 아닙니다. a를 새로 고침하려면pg_dump가능한 빨리 덤프하십시오 수동으로 몇 가지 추가 작업을 수행해야합니다. (이 점들을 참조하십시오 적용 중복원덤프, 덤프가 아닙니다생성IT. 같은 점 텍스트 덤프로드에 적용PSQL또는 사용PG_RESTOREA에서로드하려면pg_dump아카이브 파일.)
기본적으로pg_dump용도COPY, 그리고 그것이 생성 될 때 a 스키마 및 데이터 덤프 완전한 데이터를로드하는 것이 신중합니다 인덱스와 외국 키를 만들기 전에. 이 경우 여러 지침이 자동으로 처리됩니다. 남은 것 당신은 다음과 같습니다.
적절한 설정 (정상보다 큰) 값maintenance_work_memandCheckpoint_segments.
WAL 아카이빙 또는 스트리밍 복제를 사용하는 경우, 복원 중에 비활성화하는 것을 고려하십시오. 그렇게하려면 설정archive_modetoOFF, Wal_levelto최소및max_wal_senders로드하기 전에 0으로 덤프. 그 후 올바른 값으로 다시 설정하십시오 신선한베이스 백업을 취하십시오.
전체 덤프가 단일 거래. 그렇게하려면를 통과하십시오.-1또는-스플리닝 전환명령 줄 옵션PSQL또는PG_RESTORE. 이 모드를 사용할 때도 가장 작은 오류는 전체 복원을 롤백하며 많은 시간의 처리를 폐기 할 수 있습니다. 에 따라 데이터가 얼마나 상호 관련되어 있는지, 그것은 바람직한 것처럼 보일 수 있습니다. 수동 정리 여부.COPY단일 트랜잭션을 사용하면 명령이 가장 빠르게 실행됩니다. 그리고 WAL 아카이빙을 끄 셨습니다.
토토 캔 서버에서 여러 CPU를 사용할 수있는 경우 사용 고려PG_RESTORE's-jobs옵션. 이것은 동시 데이터를 허용합니다 로딩 및 색인 생성.
run분석나중에.
토토 캔 전용 덤프가 여전히 사용됩니다COPY그러나 인덱스를 삭제하거나 재현하지는 않습니다. 그리고 그것은 일반적으로 외국 열쇠를 만지지 않습니다.[1]따라서 토토 캔 전용 덤프를로드 할 때 인덱스와 외국 키를 삭제하고 재현하는 데 도움이됩니다. 당신은 이러한 기술을 사용하고 싶습니다. 여전히 유용합니다Checkpoint_segments로드하는 동안 토토 캔이지만 증가하지 마십시오Maintenance_Work_mem; 오히려, 당신은 그렇게 할 것입니다 그 후에 인덱스와 외국 키를 수동으로 재현하는 동안. 그리고 잊지 마세요분석언제 당신은 끝났습니다. 보다섹션 23.1.3and섹션 23.1.5더 많은 정보.
[1] |
사용하여 외래 키를 비활성화하는 효과를 얻을 수 있습니다. 그만큼-disable-triggers옵션 - 그러나 연기가 아니라 제거한다는 것을 깨달았습니다. 외국 키 검증이므로 나쁜 삽입이 가능합니다. 사용하는 경우 데이터. |