[MySQL] Bulk Data Loading for InnoDB Tables

□ Auto Commit Mode

InnoDB 데이터를 가져올 오토커밋 모드는 모든 삽입에 대해 디스크로 로그 플러시를 수행하므로 오프시킵니다. 가져 오기 작업 중에 오토 커밋을 비활성화하려면 SET autocommit COMMIT 문으로 감쌉니다.

SET autocommit=0;... SQL import statements ...

COMMIT;

mysqldump 옵션 --opt SET autocommit COMMIT 문으로 랩핑하지 않아도 InnoDB 테이블로 빠르게 가져 올수 있도록 덤프 파일을 작성합니다.

 

□ UNIQUE Key 제약해제

보조 키에 UNIQUE 제약 조건이 있는 경우, 가져 오기 세션 중에 고유성 검사를 일시적으로 해제하여 테이블 가져 오기 속도를 높일 있습니다.

SET unique_checks=0;... SQL import statements ...

SET unique_checks=1;

테이블의 경우 InnoDB 변경 버퍼를 사용하여 보조 인덱스 레코드를 일괄 적으로 있기 때문에 많은 디스크 I/O 절약 있습니다. 데이터에 중복 키가 없는지 확인합니다.

 

□ FOREIGN KEY 일시적 비활성화

테이블에 FOREIGN KEY 제약 조건이 있는 경우 가져 오기 세션 동안 외래키 검사를 해제하여 테이블 가져 오기 속도를 높일 있습니다.

SET foreign_key_checks=0;... SQL import statements ...

SET foreign_key_checks=1;

For big tables, this can save a lot of disk I/O.

테이블의 경우 많은 디스크 I/O 절약할 있습니다.

 

□ 다중행 INSERT(Extended Insert) 사용

여러 행을 삽입해야 하는 경우 다중행 INSERT 구문을 사용하여 클라이언트와 서버간의 통신 오버 헤드를 줄입니다.

INSERT INTO yourtable VALUES (1,2), (5,5), ...;

팁은 InnoDB 테이블뿐만 아니라 모든 테이블에 삽입하는 유효합니다.

 

□ innodb_autoinc_lock_mode 변경

자동 증가 컬럼이 있는 테이블에 대량 삽입을 수행할 때는 innodb_autoinc_lock_mode 기본값 1대신  2 설정합니다.

링크 : innodb_autoinc_lock_mode 환경

 

□ Primary Key 컬럼의 데이터 정렬

대량 삽입을 수행 PRIMARY KEY순서로 행을 삽입하는 것이 빠릅니다. InnoDB 테이블은 클러스터된 인덱스를 사용하므로 PRIMARY KEY 순서대로 데이터를 사용하는 것이 비교적 빠릅니다. PRIMARY KEY 순서로 대량 삽입을 수행하는 것은 버퍼 풀에 완전히 맞지 않는 테이블에 특히 중요합니다.

 

InnoDB FULLTEXT 인덱스에 대한 성능 향상법

InnoDB FULLTEXT 인덱스에 데이터를로드 최적의 성능을 얻으려면 다음 단계를 따르십시오.

테이블 작성시 BIGINT UNSIGNED NOT NULL 유형의 FTS_DOC_ID 열을 FTS_DOC_ID_INDEX라는 고유 인덱스로 정의합니다. 예를 들면 다음과 같습니다.

CREATE TABLE t1 (

FTS_DOC_ID BIGINT unsigned NOT NULL AUTO_INCREMENT,

title varchar(255) NOT NULL DEFAULT '',

text mediumtext NOT NULL,

PRIMARY KEY (`FTS_DOC_ID`)

) ENGINE=InnoDB DEFAULT CHARSET=latin1;

CREATE UNIQUE INDEX FTS_DOC_ID_INDEX on t1(FTS_DOC_ID);

 

노트

테이블 작성시 FTS_DOC_ID 컬럼을 추가 FULLTEXT 인덱스 컬럼이 업데이트될 FTS_DOC_ID 컬럼이 업데이트되는지 확인합니다. FTS_DOC_ID INSERT 또는 UPDATE마다 단순하게 증가해야합니다. 테이블 생성시 FTS_DOC_ID 추가하지 않고 InnoDB DOC ID 관리하게하는 경우 InnoDB 다음 CREATE FULLTEXT INDEX 호출로 FTS_DOC_ID 숨겨진 열로 추가합니다. 그러나이 방법에는 성능에 영향을주는 테이블을 다시 작성해야합니다.

 

데이터를 테이블에 로드합니다.

 

데이터가 로드된 FULLTEXT 인덱스를 만듭니다.

'Databases > MySQL' 카테고리의 다른 글

[MySQL] KILL 명령  (0) 2020.10.13
[MySQL] Flush 명령  (0) 2020.10.07
[MySQL] innodb_autoinc_lock_mode 환경  (0) 2020.09.24
[MySQL] Truncate Table 명령  (0) 2020.09.21
[MySQL] 메모리 사용 최적화  (0) 2020.09.16

Designed by JB FACTORY