You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: _posts/2025-07-16-mysql-load-data.md
+58-16Lines changed: 58 additions & 16 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -3,7 +3,7 @@ layout: "post"
3
3
title: "[MySQL] LOAD DATA로 대용량 데이터 빠르게 삽입하기"
4
4
description:
5
5
"MySQL의 `LOAD DATA` 명령어를 활용해 대용량 데이터를 빠르게 삽입하는 방법을 소개합니다.
6
-
\ 이 명령어는 텍스트 파일에서 데이터를 읽어와 테이블에 신속하게 삽입하며, 일반적인 `INSERT`보다 약 20배 빠른 성능을 제공합니다.
6
+
\ 이 명령어는 텍스트 파일에서 데이터를 읽어와 테이블에 신속하게 삽입하며, 일반적인 `INSERT` 방식보다 더 빠른 성능을 제공합니다.
7
7
\ Container를 사용해 MySQL 환경을 설정하고, CSV 파일을 통해 데이터를 삽입하는 과정을 설명합니다.
8
8
\ 이를 통해 대량의 데이터를 효율적으로 처리할 수 있음을 확인했습니다."
9
9
categories:
@@ -12,6 +12,8 @@ categories:
12
12
tags:
13
13
- "MySQL"
14
14
- "LOAD DATA"
15
+
- "LOAD"
16
+
- "적재"
15
17
- "대용량"
16
18
- "INSERT"
17
19
- "BULK INSERT"
@@ -37,7 +39,7 @@ image:
37
39
38
40
## LOAD DATA 란?
39
41
40
-
[LOAD DATA](https://dev.mysql.com/doc/refman/8.4/en/load-data.html) 명령어는 텍스트 파일로부터 데이터를 읽어와 테이블에 매우 빠르게 삽입할 수 있다. Real MySQL에서는 그냥 insert 하는 것과 비교하면 약 20배의 성능차를 보여준다고 설명이 나와있다.
42
+
[LOAD DATA](https://dev.mysql.com/doc/refman/8.4/en/load-data.html) 명령어는 텍스트 파일로부터 데이터를 읽어와 테이블에 매우 빠르게 삽입할 수 있다. Real MySQL에서는 일반적인 insert 방식보다 최대 약 20배의 성능차를 보여준다고 설명하고 있다.
41
43
42
44
`LOAD DATA` 는 빠르지만, **단일 스레드** 로 동작한다는 점에 유의하여 사용한다. Real MySQL에서는 여러개의 파일로 분할하여 병렬로 진행하라는 팁을 제공해주었다.
43
45
@@ -50,12 +52,41 @@ image:
50
52
실제 운영 환경과 동일하게 맞추기 위해 `MySQL 8.0.32` 버전으로 테스트를 진행하였다.
버퍼풀 사이즈는 메모리의 50~75% 정도를 할당해주는 것이 좋다. 이 글에서는 컨테이너에 16GB 메모리를 할당하였기 때문에 버퍼 풀 사이즈를 12GB로 설정하였다.
59
+
60
+
#### 버퍼풀 사이즈 확인 및 설정 방법
61
+
62
+
현재 설정된 버퍼풀 사이즈는 아래 SQL로 확인할 수 있다.
63
+
64
+
```SQL
65
+
SHOW VARIABLES LIKE'innodb_buffer_pool_size';
66
+
```
67
+
68
+
버퍼풀 사이즈 설정은 위에서 한것과 같이 mysql 을 실행할 때 옵션값을 전달해주거나, (서버 실행중 유지)
69
+
70
+
```sh
71
+
$> mysqld --innodb-buffer-pool-size=12GB
72
+
```
73
+
74
+
SET 문을 통해서 설정하거나, (서버 실행중 유지)
75
+
76
+
```SQL
77
+
SET GLOBAL innodb_buffer_pool_size=12884901888; -- 12gb
78
+
```
79
+
80
+
my.ini 파일을 통해서 설정할 수 있다. (영구 유지)
81
+
82
+
```ini
83
+
[mysqld]
84
+
innodb_buffer_pool_size=12884901888 # 12gb
54
85
```
55
86
56
87
### 데이터 세팅
57
88
58
-
간단한 자바코드를 작성하여 파일로 csv 파일을 생성하도록 하였다. 컬럼 헤더는 csv에 담지 않았다. [faker](https://github.com/DiUS/java-faker) 를 이용하여 어느 정도 랜덤한 있는 데이터가 나올 수 있도록 하였다. 테스트 데이터도 최대한 실제와 유사하기 위해 암호화도 적용하여 데이터를 생성하게 하였다.
89
+
간단한 자바코드를 작성하여 파일로 csv 파일을 생성하도록 하였다. csv 파일에는 컬럼 헤더를 포함하지 않았다. [faker](https://github.com/DiUS/java-faker) 를 이용하여 어느 정도 랜덤한 있는 데이터가 나올 수 있도록 하였다. 실제 데이터와 유사성을 높이기 위해 일부 필드에 암호화를 적용해 생성했다.
0 commit comments