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