MySQL은 조회(SELECT) 에 있어서 최고의 강점을 갖는 종류의 DB이지만, 경우에 따라 막대한 양의 Insert 를 수행해야할 때가 있다.
대량의 데이터를 삽입하는 것을 Bulk Inserting 이라 하며, 이를 위한 다음과 같은 튜닝 기술들 정도는 숙지해두도록 하자.
(1) 여러 개의 Insert 구문 수행시 Values 리스트를 다중으로 사용하는 것이 성능을 향상시킬 수 있다.
정말 효과 제대로 본 방법인데, 다수의 동일한 Insert query에 대해서 다음과 같이 최적화가 가능하다.
/etc/mysql/my.cnf 파일을 열어서
[mysqld] 항목 아래에 bulk_insert_buffer_size=256M 과 같이 설정
* 수치는 필요에 따라 설정하며 1024 단위로 하는게 좋다
설정 파일이 아닌 mysql에서 바로 적용할 때 (재시작 하면 초기화됨)
> SET GLOBAL bulk_insert_buffer_size =1024*1024*256
확인 방법
> show variables like 'bulk%';
+-------------------------+-----------+
| Variable_name | Value |
+-------------------------+-----------+
| bulk_insert_buffer_size | 268435456 |
+-------------------------+-----------+
(2) Buffer Size 의 조절을 통해 성능 향상이 가능하다.
테이블에 Insert 시 Index가 정렬되어 들어온다는 보장이 없기 때문에 이는 B트리 구조화시 추가적인 I/O를 수반한다.
디스크에 데이터를 읽고 쓰고 하는 부가적인 동작이 레코드가 많아질수록, Buffer 크기를 넘어설수록 많이 수반되기 때문이다.
이를 막기 위해서 InnoDB의 경우 Buffer Size를 크게 잡는다면 이 만큼의 메모리를 추가로 캐싱용 버퍼풀을 위해 사용하는 대신 디스크 I/O의 비용을 높은 비율로 줄일 수 있다.
잔여 메모리의 50~80% 만큼 조절하는 게 정석이며 그 이상으로 조절 시 오히려 하드디스크를 가상 메모리로 쓰기 위한 스와핑 작업이 발생하기 때문에 성능이 저하된다고 알려져있다.
(실제로 이부분은 범위 내라면, 조절하는 만큼 성능이 향상된다. 바꾸기 위해서는 my.cnf 설정 내에서 [mysql] 하위 항목으로 innodb_buffer_pool_size=1024M 과 같이 입력하면 된다.)
출처: https://jins-dev.tistory.com/entry/MySQL-에서의-Bulk-Inserting-성능-향상 [Jins' Dev Inside]
'linux > DB' 카테고리의 다른 글
MySQL FEDERATED 설정, 확인 방법 (0) | 2021.07.20 |
---|---|
mysql 계정 생성 및 권한 부여 (0) | 2021.07.20 |
mysql 언어셋 확인 (0) | 2021.07.07 |
InnoDB 테이블 손상 시 강제 복구 (0) | 2021.07.02 |
mysql LOCK TABLES 오류 (0) | 2021.06.30 |