<< links for 2008-08-04 | | UrlRewriteFilter 사용 >>

[Mysql] MyISAM 테이블에서의 데이터 로드 방법

MyISAM 테이블에서 데이터를 로드할 경우 좀 더 성능있게 올릴 수 있는 방법을 공유합니다. 특히 많은 데이터를 로드할 경우 유용합니다.

1. local_infile ON 인지 확인

mysql> show variables like '%infile%';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| local_infile | ON |
+---------------+-------+
1 row in set (0.00 sec)
2.  이관할 데이터 다운

 - Oracle에서 데이터 받을 경우

oracle>set pages 0;
set lin 200
set term off
set trims on
spool off

spool post.txt
select '"'||E_WA||'","'
||E_CITY||'","'||E_SECTION||
'","'||E_VILLAGE||'","'||
E_ADDRESS||'","'||E_HUGEADDR||'","'||
E_F1||'","'||E_F2||'","'||E_ZIPCODE||'","'||
E_DIST||'"'
from ZIPTBL;
spool off;
 - mysql에서 데이터 받을 경우

mysql>select E_WA, E_CITY, E_SECTION, E_VILLAGE,
E_ADDRESS, E_HUGEADDR, E_F1,
E_F2, E_ZIPCODE, E_DIST
into outfile "/home/k2/post.txt"
fields terminated by ','
enclosed by '"'
lines terminated by '\n'
from ZIPTBL;
3. utf-8 변환 (UltraEditor)

 - 파일>변환?ASCII -> UTF-8 선택 후 저장

4. 로드에 필요한 성능 설정

 - 성능 변수 조회

mysql> show variables like '%buffer%';
+-------------------------------+----------+
| Variable_name | Value |
+-------------------------------+----------+
| bulk_insert_buffer_size | 8388608 |
| innodb_buffer_pool_awe_mem_mb | 0 |
| innodb_buffer_pool_size | 8388608 |
| innodb_log_buffer_size | 1048576 |
| join_buffer_size | 131072 |
| key_buffer_size | 16777216 |
| myisam_sort_buffer_size | 8388608 |
| net_buffer_length | 8192 |
| preload_buffer_size | 32768 |
| read_buffer_size | 258048 |
| read_rnd_buffer_size | 520192 |
| sort_buffer_size | 524280 |
+-------------------------------+----------+
12 rows in set (0.00 sec)
 - 성능 설정

mysql> set session BULK_INSERT_BUFFER_SIZE=256217728;
Query OK, 0 rows affected (0.00 sec)

mysql> set session MYISAM_SORT_BUFFER_SIZE=256217728;
Query OK, 0 rows affected (0.00 sec)

mysql> set global KEY_BUFFER_SIZE=256217728;
Query OK, 0 rows affected (0.05 sec)

mysql> alter table ziptbl disable keys;
Query OK, 0 rows affected (0.00 sec)
5. 데이터 로드

 - 데이터 로드

mysql>LOAD DATA INFILE '/home/k2/post.txt'  
INTO TABLE post FIELDS TERMINATED BY ','
ENCLOSED BY '"' LINES TERMINATED BY '\n'
(e_wa,e_city,e_section,e_village,e_address,
e_hugeaddr,e_f1,e_f2,e_code,e_dist);
Query OK, 4675823 rows affected (1 min 15.05 sec)
Records: 4675823 Deleted: 0 Skipped: 0 Warnings: 0
 - 기존 설정으로는 3분 30초 나왔음
 - 기존 설정 원복
mysql> alter table ziptbl enable keys;
Query OK, 0 rows affected (0.00 sec)
태그 :



코멘트 달기 Send a TrackBack