programing

파일의 MySQL 로드 데이터 - 가속?

telecom 2023. 11. 1. 22:08
반응형

파일의 MySQL 로드 데이터 - 가속?

때때로 프로젝트를 위해 데이터를 다시 가져와야 하기 때문에 약 360만 개의 행을 MySQL 테이블(현재 InnoDB이지만 실제로는 이 엔진에 국한되지 않습니다."파일에 데이터 로드...." 가장 빠른 해결책으로 입증되었지만 키 없이 가져올 경우 가져오기 자체가 약 45초가 걸리지만 키 생성에 시간이 걸리는 단점이 있습니다(already 실행 시간은 20분...). - 테이블 위에 있는 키를 사용하여 가져오기를 하면 가져오기 속도가 훨씬 느려집니다.

숫자 필드를 참조하여 테이블의 3개 필드 위에 키가 있습니다.이것을 가속화할 방법이 없을까요?

또 다른 문제는 느린 쿼리를 시작한 프로세스를 종료하면 데이터베이스에서 계속 실행된다는 것입니다.mysqld를 다시 시작하지 않고 쿼리를 종료할 수 있는 방법이 있습니까?

고마워요 DBa

innodb 및 bulk loading을 사용하는 경우 다음과 같은 몇 가지 팁이 있습니다.

csv 파일을 대상 테이블의 기본 키 순서로 정렬합니다. 노드에서 클러스터된 기본 키를 사용하여 정렬하면 더 빨리 로드됩니다.

내가 사용하는 파일의 일반적인 데이터:

truncate <table>;

set autocommit = 0;

load data infile <path> into table <table>...

commit;

로드 시간을 늘리기 위해 사용할 수 있는 기타 최적화:

set unique_checks = 0;
set foreign_key_checks = 0;
set sql_log_bin=0;

csv 파일을 더 작은 청크로 분할합니다.

대량 로드 중에 관찰한 일반적인 가져오기 통계:

3.5 - 6.5 million rows imported per min
210 - 400 million rows per hour

이 블로그 게시물은 3년이 다 되어가지만 여전히 관련성이 있으며 "LOAD DATA INFILE"의 성능을 최적화하기 위한 몇 가지 좋은 제안이 있습니다.

http://www.mysqlperformanceblog.com/2007/05/24/predicting-how-long-data-load-would-take/

InnoDB는 꽤 좋은 엔진입니다.그러나 이는 '조정'되는 것에 크게 의존합니다.한 가지는 삽입이 기본 키를 늘리는 순서가 아니라면 innoDB는 MyISAM보다 시간이 조금 더 걸릴 수 있습니다.이는 innodb_buffer_pool_size를 높게 설정하면 쉽게 극복할 수 있습니다.제 제안은 전용 MySQL 머신에서 전체 RAM의 60-70%로 설정하는 것입니다.

언급URL : https://stackoverflow.com/questions/2463602/mysql-load-data-infile-acceleration

반응형