처음 배트맨 토토베이스를 채울 때 많은 양의 배트맨 토토를 삽입해야 할 수도 있습니다. 이 섹션에는 이 프로세스를 최대한 효율적으로 만드는 방법에 대한 몇 가지 제안 사항이 포함되어 있습니다.
여러개 사용시삽입s, 자동 커밋을 끄고 마지막에 커밋 하나만 수행하세요. (일반 SQL에서는 발행을 의미합니다.시작시작 시 및커밋마지막에. 일부 클라이언트 라이브러리는 뒤에서 이 작업을 수행할 수 있으며, 이 경우 작업이 완료되기를 원할 때 라이브러리가 이를 수행하는지 확인해야 합니다.) 각 삽입이 별도로 커밋되도록 허용하는 경우,PostgreSQL추가된 각 행에 대해 많은 작업을 수행하고 있습니다. 하나의 트랜잭션에서 모든 삽입을 수행할 때의 추가 이점은 한 행 삽입이 실패할 경우 해당 지점까지 삽입된 모든 행의 삽입이 롤백되므로 부분적으로 로드된 데이터로 인해 문제가 발생하지 않는다는 것입니다.
복사 #사용복사일련의 명령을 사용하는 대신 하나의 명령으로 모든 행을 로드합니다.삽입명령.복사명령은 많은 수의 행을 로드하는 데 최적화되어 있습니다. 다음보다 유연성이 떨어집니다.삽입, 그러나 대규모 데이터 로드의 경우 오버헤드가 훨씬 적습니다. 이후복사은 단일 명령이므로 이 방법을 사용하여 테이블을 채우는 경우 자동 커밋을 비활성화할 필요가 없습니다.
사용할 수 없는 경우복사, 사용하는 것이 도움이 될 수 있습니다준비준비된 생성하기삽입문을 작성한 후 사용실행필요한 만큼 여러 번. 이렇게 하면 반복적으로 구문 분석하고 계획하는 데 따른 오버헤드가 일부 방지됩니다.삽입. 다양한 인터페이스는 다양한 방식으로 이 기능을 제공합니다. 찾아보세요“준비된 진술”인터페이스 문서에 있습니다.
다음을 사용하여 많은 수의 행을 로드한다는 점에 유의하세요.복사사용하는 것보다 거의 항상 빠릅니다.삽입, 비록준비이 사용되고 여러 삽입이 단일 트랜잭션으로 일괄 처리됩니다.
복사이전과 동일한 트랜잭션 내에서 사용될 때 가장 빠릅니다테이블 생성또는잘라내기명령. 이러한 경우에는 WAL을 작성할 필요가 없습니다. 오류가 발생하면 새로 로드된 데이터가 포함된 파일이 제거되기 때문입니다. 그러나 이 고려사항은 다음 경우에만 적용됩니다.wal_levelis최소그렇지 않으면 모든 명령이 WAL을 작성해야 하기 때문입니다.
새로 생성된 테이블을 로드하는 경우 가장 빠른 방법은 테이블을 생성하고 다음을 사용하여 테이블의 데이터를 대량 로드하는 것입니다.복사, 그런 다음 테이블에 필요한 인덱스를 생성합니다. 기존 데이터에 인덱스를 만드는 것이 각 행이 로드될 때마다 증분식으로 업데이트하는 것보다 빠릅니다.
기존 테이블에 많은 양의 데이터를 추가하는 경우 인덱스를 삭제하고 테이블을 로드한 다음 인덱스를 다시 생성하는 것이 유리할 수 있습니다. 물론 인덱스가 누락되는 동안 다른 사용자의 데이터베이스 성능이 저하될 수 있습니다. 또한 고유 인덱스를 삭제하기 전에 두 번 생각해야 합니다. 인덱스가 누락된 동안 고유 제약 조건에 의해 제공되는 오류 검사가 손실되기 때문입니다.
인덱스와 마찬가지로 외래 키 제약 조건을 확인할 수 있습니다.“대량”행 단위보다 더 효율적입니다. 따라서 외래 키 제약 조건을 삭제하고, 배트맨 토토를 로드하고, 제약 조건을 다시 만드는 것이 유용할 수 있습니다. 다시 말하지만, 제약 조건이 누락된 동안 배트맨 토토 로드 속도와 오류 검사 손실 간에는 상충 관계가 있습니다.
게다가 기존 외래 키 제약 조건이 있는 테이블에 데이터를 로드할 때 각각의 새 행에는 서버의 보류 중인 트리거 이벤트 목록에 항목이 필요합니다(행의 외래 키 제약 조건을 확인하는 트리거가 실행되기 때문입니다). 수백만 개의 행을 로드하면 트리거 이벤트 큐가 사용 가능한 메모리를 오버플로하게 되어 허용할 수 없는 스와핑이 발생하거나 심지어 명령이 완전히 실패할 수도 있습니다. 그러므로 그럴 수도 있다필요함, 많은 양의 배트맨 토토를 로드할 때 외래 키를 삭제하고 다시 적용하는 것이 바람직할 뿐만 아니라. 제약 조건을 일시적으로 제거하는 것이 허용되지 않는 경우 유일한 다른 방법은 로드 작업을 더 작은 트랜잭션으로 분할하는 것입니다.
maintenance_work_mem #일시적으로 증가maintenance_work_mem많은 양의 데이터를 로드할 때 구성 변수를 사용하면 성능이 향상될 수 있습니다. 속도를 높이는 데 도움이 됩니다.색인 생성명령 및테이블 변경 외래 키 추가명령. 별로 도움이 되지 않을 것입니다복사자체이므로 이 조언은 위 기술 중 하나 또는 둘 다를 사용할 때만 유용합니다.
max_wal_size #일시적으로 증가max_wal_size구성 변수를 사용하면 대용량 데이터를 더 빠르게 로드할 수도 있습니다. 이는 많은 양의 데이터를 로드하기 때문입니다.포스트그레SQL체크포인트가 일반 체크포인트 빈도보다 더 자주 발생하게 됩니다(다음으로 지정됨checkpoint_timeout구성 변수). 체크포인트가 발생할 때마다 모든 더티 페이지를 디스크로 플러시해야 합니다. 증가시켜서max_wal_size일시적으로 대량 데이터 로드 중에 필요한 체크포인트 수가 줄어들 수 있습니다.
WAL 아카이브 또는 스트리밍 복제를 사용하는 설치에 대량의 데이터를 로드할 때 대량의 증분 WAL 데이터를 처리하는 것보다 로드가 완료된 후 새 기본 백업을 수행하는 것이 더 빠를 수 있습니다. 로드하는 동안 증분 WAL 로깅을 방지하려면 다음을 설정하여 보관 및 스트리밍 복제를 비활성화하세요.wal_level에최소, archive_mode에꺼짐및max_wal_senders0으로. 그러나 이러한 설정을 변경하려면 서버를 다시 시작해야 하며 이전에 수행한 기본 백업을 아카이브 복구 및 대기 서버에 사용할 수 없게 되어 데이터 손실이 발생할 수 있습니다.
아카이버 또는 WAL 발신자가 WAL 데이터를 처리하는 시간을 피하는 것 외에도 이렇게 하면 특정 명령이 실제로 더 빨라질 것입니다. 왜냐하면 WAL을 전혀 작성하지 않기 때문입니다.wal_levelis최소그리고 현재 하위 트랜잭션(또는 최상위 트랜잭션)이 변경하는 테이블이나 인덱스를 생성하거나 잘랐습니다. (다음을 수행하면 충돌 안전을 보다 저렴하게 보장할 수 있습니다.fsyncWAL을 작성하는 것보다 마지막에.)
분석이후#테이블 내의 데이터 분포를 크게 변경할 때마다 실행분석강력히 권장됩니다. 여기에는 대량의 데이터를 테이블에 대량 로드하는 것이 포함됩니다. 달리기분석(또는진공 분석)는 플래너가 테이블에 대한 최신 통계를 가지고 있는지 확인합니다. 통계가 없거나 사용되지 않는 통계가 있으면 플래너는 쿼리 계획 중에 잘못된 결정을 내려 통계가 정확하지 않거나 존재하지 않는 테이블의 성능이 저하될 수 있습니다. autovacuum 데몬이 활성화되면 실행될 수 있습니다.분석자동으로; 참조섹션 24.1.3그리고섹션 24.1.6더 많은 정보를 원하시면.
다음에 의해 생성된 덤프 스크립트pg_dump위 지침 중 전부는 아니지만 일부를 자동으로 적용합니다. 복원하려면pg_dump가능한 한 빨리 덤프하려면 몇 가지 추가 작업을 수동으로 수행해야 합니다. (이 포인트는 동안 적용됩니다.복원 중덤프, 동안은 아님생성그것. 를 사용하여 텍스트 덤프를 로드하는 경우에도 동일한 사항이 적용됩니다.psql또는 사용 중pg_restore에서 로드하려면pg_dump보관 파일.)
기본적으로,pg_dump사용복사, 완전한 스키마 및 데이터 덤프를 생성하는 경우 인덱스 및 외래 키를 생성하기 전에 데이터를 로드하는 데 주의를 기울여야 합니다. 따라서 이 경우 여러 지침이 자동으로 처리됩니다. 당신이 해야 할 일은 다음과 같습니다:
적절한(즉, 정상보다 큰) 값을 설정하십시오.maintenance_work_mem그리고max_wal_size.
WAL 아카이브 또는 스트리밍 복제를 사용하는 경우 복원 중에 비활성화하는 것을 고려하십시오. 그렇게 하려면 다음을 설정하세요.archive_mode에꺼짐, wal_level에최소및max_wal_senders24651_24762
병렬 덤프 및 복원 모드를 모두 실험해 보세요.pg_dump그리고pg_restore그리고 사용할 최적의 동시 작업 수를 찾습니다. 다음을 사용하여 병렬로 덤프 및 복원-j옵션은 직렬 모드에 비해 훨씬 더 높은 성능을 제공해야 합니다.
전체 덤프를 단일 트랜잭션으로 복원해야 하는지 여부를 고려하십시오. 그렇게 하려면-1또는--단일 트랜잭션명령줄 옵션psql또는pg_restore. 이 모드를 사용하면 아주 작은 오류라도 전체 복원을 롤백하므로 많은 시간의 처리 시간이 낭비될 수 있습니다. 데이터의 상호 연관성에 따라 수동 정리보다 선호될 수도 있고 그렇지 않을 수도 있습니다.복사단일 트랜잭션을 사용하고 WAL 아카이브를 끄면 명령이 가장 빠르게 실행됩니다.
데이터베이스 서버에서 여러 CPU를 사용할 수 있는 경우 사용을 고려하십시오.pg_restore's--작업옵션. 이를 통해 동시 데이터 로드 및 인덱스 생성이 가능합니다.
실행분석나중에.
데이터 전용 덤프는 계속 사용됩니다.복사, 그러나 인덱스를 삭제하거나 다시 생성하지 않으며 일반적으로 외래 키를 건드리지 않습니다.[14]따라서 데이터 전용 덤프를 로드할 때 해당 기술을 사용하려는 경우 색인과 외래 키를 삭제하고 다시 생성하는 것은 사용자에게 달려 있습니다. 늘리는 것이 여전히 유용합니다.max_wal_size배트맨 토토를 로드하는 동안 증가시키지 마세요.maintenance_work_mem; 오히려 나중에 인덱스와 외래 키를 수동으로 다시 만드는 동안 그렇게 할 것입니다. 그리고 잊지 마세요분석완료되면; 참조섹션 24.1.3그리고섹션 24.1.6더 많은 정보를 원하시면.
[14]당신은 다음을 사용하여 외래 키를 비활성화하는 효과를 얻을 수 있습니다.--비활성화-트리거옵션 — 하지만 외래 키 검증을 연기하는 것이 아니라 제거하므로 이를 사용하면 잘못된 데이터를 삽입할 수 있다는 점을 인식하세요.
문서에 올바르지 않은 내용이 있으면 일치하지 않습니다. 특정 기능에 대한 경험이 있거나 추가 설명이 필요한 경우 이용해주세요이 양식문서 문제를 보고합니다.