이 문서는 지원되지 않는 PostgreSQL 버전에 대한 것입니다.
당신은 다음과 같은 페이지를 보고 싶을 수도 있습니다.PostgreSQL : 문서 : 17 : 14.4. 토토 결과베이스 채우기버전 또는 위에 나열된 다른 지원 버전 중 하나를 사용하세요.

14.4. 와이즈 토토베이스 채우기

처음에는 많은 양의 데이터를 삽입해야 할 수도 있습니다. 데이터베이스 채우기. 이 섹션에는 다음에 대한 몇 가지 제안 사항이 포함되어 있습니다. 이 프로세스를 최대한 효율적으로 만드는 방법.

14.4.1. 자동 커밋 비활성화

여러개 사용시삽입s, 차례 자동 커밋을 끄고 마지막에 커밋 하나만 수행하세요. (평범하게 SQL, 이는 발행을 의미합니다.시작에 시작하고커밋마지막에. 일부 클라이언트 라이브러리는 뒤에서 이 작업을 수행할 수 있습니다. 당신이 원할 때 도서관이 이를 수행하는지 확인해야 합니다. 완료.) 각 삽입이 별도로 커밋되도록 허용하는 경우,포스트그레SQL많은 일을 하고 있습니다 추가된 각 행에 대해 작업합니다. 추가 혜택 하나의 트랜잭션에서 모든 삽입은 다음과 같습니다. 한 행이 실패하면 모든 행이 삽입됩니다. 그 시점까지는 롤백되므로 계속해서 멈추지 않을 것입니다. 부분적으로 데이터가 로드되었습니다.

14.4.2. 사용복사

사용PostgreSQL : 문서 : 9.2 : 토토 커뮤니티모든 행을 로드하려면 일련의를 사용하는 대신 하나의 명령삽입명령.복사명령은 대용량 로드에 최적화되어 있습니다. 행 수; 다음보다 유연성이 떨어집니다.삽입, 그러나 오버헤드가 훨씬 적습니다. 대용량 와이즈 토토 로드용. 이후복사은 단일 명령을 사용하는 경우 자동 커밋을 비활성화할 필요가 없습니다. 테이블을 채우려면 이 방법을 사용하세요.

사용할 수 없는 경우복사그럴 수도 있겠네요 사용에 도움이 됩니다PostgreSQL : 문서 : 9.2 : 스포츠 토토 사이트만들기 위해 준비됨삽입문장, 그리고 사용실행필요한 만큼 여러 번. 이렇게 하면 반복적으로 구문 분석하고 분석하는 데 따른 오버헤드가 일부 방지됩니다. 계획삽입. 다양한 인터페이스 이 시설을 다양한 방식으로 제공합니다. 찾아보세요"준비된 진술"인터페이스에서 문서.

다음을 사용하여 많은 수의 행을 로드한다는 점에 유의하세요.복사사용하는 것보다 거의 항상 빠릅니다.삽입, 비록준비이 사용되며 여러 삽입이 단일 트랜잭션으로 일괄 처리됩니다.

복사내에서 사용될 때 가장 빠릅니다. 이전과 동일한 거래만들기 표또는잘라내기명령. 에서 그러한 경우에는 WAL을 작성할 필요가 없습니다. 오류가 발생하면 새로 로드된 데이터가 포함된 파일은 어쨌든 제거되었습니다. 그러나 이 고려사항은 다음 경우에만 적용됩니다.wal_level이다최소모든 명령은 다음과 같이 작성해야 합니다. 그렇지 않으면 WAL입니다.

14.4.3. 색인 제거

새로 생성된 테이블을 로드하는 경우 가장 빠른 방법은 테이블을 생성하고 다음을 사용하여 테이블의 데이터를 대량 로드하는 것입니다.복사, 그런 다음 필요한 색인을 만듭니다. 테이블을 위해. 기존 데이터에 대한 인덱스를 생성하는 것은 각 행이 바뀔 때마다 점진적으로 업데이트하는 것보다 빠릅니다. 로드되었습니다.

기존 파일에 많은 양의 데이터를 추가하는 경우 테이블의 경우 인덱스를 삭제하고 테이블을 로드하는 것이 유리할 수 있습니다. 그런 다음 인덱스를 다시 만듭니다. 물론, 데이터베이스 다른 사용자의 성능이 저하될 수 있습니다. 인덱스가 없습니다. 또한 그 전에 두 번 생각해야 합니다 오류 검사가 제공되므로 고유 인덱스를 삭제합니다. 인덱스가 있는 동안 고유 제약 조건이 손실됩니다. 누락되었습니다.

14.4.4. 외래 키 제거 제약

색인과 마찬가지로 외래 키 제약 조건은 다음과 같습니다. 확인됨"대량"더 효율적으로 행 단위보다. 따라서 외래 키를 삭제하는 것이 유용할 수 있습니다. 제약 조건을 적용하고, 와이즈 토토를 로드하고, 제약 조건을 다시 생성합니다. 다시, 와이즈 토토 로드 속도와 오류 손실 사이에는 균형이 있습니다. 제약 조건이 누락된 동안 확인합니다.

게다가 기존 테이블에 데이터를 로드할 때 외래 키 제약 조건이 있으므로 각각의 새 행에는 서버의 보류 중인 트리거 이벤트 목록(실행 중이므로) 행의 외래 키 제약 조건을 확인하는 트리거의 경우) 수백만 개의 행을 로드하면 트리거 이벤트 큐가 발생할 수 있습니다. 사용 가능한 메모리가 오버플로되어 견딜 수 없는 스와핑이 발생합니다. 또는 명령이 완전히 실패했을 수도 있습니다. 그러므로 그럴 수도 있다필요함뿐만 아니라 큰 로드 시 외래 키를 삭제하고 다시 적용하는 것이 바람직합니다. 와이즈 토토의 양. 제약 조건을 일시적으로 제거할 수 없는 경우 허용되는 유일한 다른 수단은 로드를 분할하는 것입니다. 소규모 거래로 운영됩니다.

14.4.5. 증가maintenance_work_mem

일시적으로 증가maintenance_work_mem대량의 와이즈 토토를 로드할 때 구성 변수가 발생할 수 있습니다. 성능 향상으로 이어집니다. 속도를 높이는 데 도움이 됩니다.색인 생성명령 및테이블 변경 외래 키 추가명령. 그렇지 않습니다 많은 일을 해라복사그 자체이므로 이것은 조언은 다음 중 하나 또는 둘 다를 사용할 때만 유용합니다. 위의 기술.

14.4.6. 증가checkpoint_segments

일시적으로 증가checkpoint_segments구성 변수를 사용하면 대용량 데이터를 더 빠르게 로드할 수도 있습니다. 이는 많은 양의 데이터를 로드하기 때문입니다.PostgreSQL원인이 될 것입니다 체크포인트는 일반 체크포인트보다 더 자주 발생합니다. 빈도(다음으로 지정됨checkpoint_timeout구성 변수). 체크포인트가 발생할 때마다 모든 더티 페이지를 플러시해야 합니다. 디스크에. 증가시켜서checkpoint_segments대량 데이터 중 일시적으로 로드, 필요한 체크포인트 수는 다음과 같습니다. 감소했습니다.

14.4.7. WAL 보관 및 스트리밍 비활성화 복제

대량의 데이터를 설치에 로드할 때 WAL 보관 또는 스트리밍 복제를 사용하면 더 빠를 수 있습니다. 로드가 완료된 후 새 기본 백업을 수행하는 것보다 대량의 증분 WAL 데이터를 처리합니다. 방지하기 위해 로딩 중 증분 WAL 로깅, 아카이브 비활성화 및 스트리밍 복제, 설정별wal_level최소, archive_mode꺼짐max_wal_senders0으로. 하지만 이러한 설정을 변경하려면 서버를 다시 시작합니다.

아카이버 또는 WAL 발신자의 시간을 피하는 것 외에 WAL 데이터를 처리하기 위해 이를 수행하면 실제로 WAL을 쓰지 않도록 설계되었기 때문에 명령이 더 빠릅니다. 만약에 모두wal_levelis최소. (충돌 안전성을 더욱 보장할 수 있습니다. 다음을 수행하여 저렴하게fsync에 WAL을 작성하는 것보다 종료됩니다.) 이는 다음에 적용됩니다. 명령:

  • 선택으로 테이블 생성

  • 색인 생성(및 다음과 같은 변형) 와 같이테이블 변경 기본 추가 키)

  • 테이블 세트 테이블스페이스 변경

  • 클러스터

  • 다음에서 복사, 대상이 동일한 테이블이 이전에 생성되었거나 잘렸습니다. 거래

14.4.8. 실행분석이후

귀하가 다음의 분포를 크게 변경한 경우 테이블 내의 데이터, 실행 중분석강력히 권장됩니다. 이 테이블에 대량의 데이터를 대량 로드하는 작업이 포함됩니다. 실행 중분석(또는진공 분석)는 플래너가 테이블에 대한 최신 통계입니다. 통계가 없거나 쓸모없는 통계로 인해 기획자는 잘못된 결정을 내릴 수 있습니다. 쿼리를 계획하는 동안 모든 쿼리의 성능이 저하됩니다. 부정확하거나 존재하지 않는 통계가 있는 테이블. 만약에 참고하세요 autovacuum 데몬이 활성화되어 있으면 실행될 수 있습니다.분석자동으로; 참조섹션 23.1.3그리고섹션 23.1.6더 보기 정보.

14.4.9. 몇 가지 참고 사항pg_dump

다음에 의해 생성된 덤프 스크립트pg_dump자동으로 여러 개 적용하지만 위의 지침 중 전부는 아닙니다. 다시 로드하려면pg_dump가능한 한 빨리 덤프하세요. 몇 가지 추가 작업을 수동으로 수행해야 합니다. (이 점을 참고하세요. 동안 신청하세요복원 중덤프, 동안은 아님생성그것. 같은 점 텍스트 덤프를 로드할지 여부를 적용합니다.psql또는 사용 중pg_restore에서 로드하려면pg_dump보관 파일.)

기본적으로,pg_dump사용복사, 그리고 생성 중일 때 완전한 스키마 및 데이터 덤프, 신중하게 데이터 로드 인덱스와 외래 키를 생성하기 전에. 그래서 이 경우에는 여러 지침이 자동으로 처리됩니다. 무엇을 위해 남았는가 당신이 해야 할 일은:

  • 적절한(즉, 정상보다 큰) 값을 설정하십시오.maintenance_work_mem그리고checkpoint_segments.

  • WAL 아카이브 또는 스트리밍 복제를 사용하는 경우, 복원 중에 비활성화하는 것을 고려하십시오. 그렇게 하려면 다음을 설정하세요.archive_mode꺼짐, wal_level최소max_wal_senders로드하기 전에 0으로 설정 덤프. 그런 다음 다시 올바른 값으로 설정하고 새로운 기본 백업을 수행하세요.

  • 전체 덤프를 다음과 같이 복원해야 하는지 고려하십시오. 단일 거래. 그렇게 하려면-1또는--단일 거래명령줄 옵션psql또는pg_restore. 이 모드를 사용하는 경우에도 가장 작은 오류라도 전체 복원을 롤백합니다. 아마도 많은 시간의 처리 시간을 버릴 수도 있습니다. 에 따라 데이터가 얼마나 상호 연관되어 있는지 확인하는 것이 바람직해 보일 수 있습니다. 수동 정리 여부.복사단일 트랜잭션을 사용하면 명령이 가장 빠르게 실행됩니다. WAL 보관을 해제합니다.

  • 데이터베이스 서버에서 여러 CPU를 사용할 수 있는 경우, 사용을 고려해보세요pg_restore's--작업옵션. 이는 동시 데이터를 허용합니다. 로딩 및 인덱스 생성.

  • 실행분석나중에.

데이터 전용 덤프는 계속 사용됩니다.복사, 그러나 인덱스를 삭제하거나 다시 생성하지는 않습니다. 일반적으로 외래 키를 건드리지 않습니다.[1]따라서 데이터 전용 덤프를 로드할 때, 다음과 같은 경우 인덱스와 외래 키를 삭제하고 다시 생성하는 것은 사용자의 몫입니다. 당신은 그 기술을 사용하고 싶습니다. 늘리는 것이 여전히 유용합니다.checkpoint_segments로드하는 동안 와이즈 토토를 늘리되 귀찮게 늘리지는 마세요.maintenance_work_mem; 오히려 넌 그렇게 할 거야 나중에 인덱스와 외래 키를 수동으로 다시 생성하는 동안. 그리고 잊지 마세요분석때 당신은 끝났습니다; 참조섹션 23.1.3그리고섹션 23.1.6더 보기 정보.

참고

[1]

다음을 사용하여 외래 키를 비활성화하는 효과를 얻을 수 있습니다--비활성화-트리거옵션 — 하지만 단순히 연기하는 것이 아니라 제거한다는 사실을 인식하세요. 외래 키 유효성 검사를 수행하므로 잘못된 삽입이 가능합니다. 사용하면 데이터가 됩니다.