DB관련/MySQL

MySQL DB Table OPTIMIZE 저장 공간 줄이기 (Storage Shrink 처리)

saltdoll 2017. 11. 1. 04:01
반응형

MySQL에서 DB에서 사용하는 Storage의 사이즈를 줄이는 방법으로 OPTIMIZE를 사용한다.

예를 들어, DB data 정보들을 delete 명령으로 줄였을 때, DB의 물리적인 파일의 용량은 줄지 않게 됩니다. 이럴 때, OPTIMIZE 명령을 통해서, 물리적인 파일 용량을 줄일 수 있다.

요즘 AWS와 같은 Storage의 용량이 가격 증가의 원인이 된다. 이처럼 Storage에 민감한 부분을 잘 관리함으로써, 가격을 줄일 수 있다.


[OPTIMIZE 명령]

mysql> OPTIMIZE TABLE {table name}; 


Optimize

단편화 제거 작업(defrag operation)과 같이, optimize table 명령문을 사용하면 사용하지 않은 공간을 회수할 수 있다. MyISAM 엔진에서는 optimize 명령문은 말그대로 단편화 제거 작업만을 수행한다.
반면 InnoDB 엔진의 경우 내부적으로 ALTER TABLE문을 실행하여, MySQL 서버에 대해 테이블과 인덱스를 재생성하도록 요청한다.


http://dev.mysql.com/doc/refman/5.1/en/optimize-table.html


출처: 
http://applejara.tistory.com/543 [애플자라]


 InnoDB의 경우 메시지

 Msg_text: Table does not support optimize, doring recreate + analyze instead

여기서, InnoDB를 MyISAM를 변경하면, 용량이 정리가 됩니다. 

그러나, 잘못하면 Storage 증가로 DB 공간를 다 차지할 수 있습니다. 

(MyISAM으로 변경하려는 table 1개가 1G이하라면 추천하지만, 그 이상이라면 백업이라던지 작업후에 시도해보시길 바랍니다.)

주의: InnoDB에서 MyISAM으로 변경시 Select는 빨라질수도 있지만, Insert/Update속도가 느려질수도 있습니다. 변경시 성능에 큰 문제가 없을때, 큰용량에만이 문제가 되는 케이스를 추천드립니다.


참고: [[ 리눅스 ]] mysql Database 테이블 모두 최적화하기  (ShellScript방법 안내)


 php기본 테이블 돌면서 처리하기

 

오래 사용하다 보면 불필요한 메모리가 많아져 시스템부하를 가져올수 있다. 
따라서 가끔씩 아래와 같은 루틴을 돌려, 최적화된 데이타를 가질수 있도록 도와주면 좋다. 
$db = 'database_name'; 
$tables = mysql_list_tables($db); 
while (list($table_name) = mysql_fetch_array($tables)) { 
$sql = "OPTIMIZE TABLE $table_name"; 
mysql_query($sql) or exit(mysql_error()); 
}


출처:  http://cafe.daum.net/imeji/GiBV/198?q=mysql%20optimize%20table


 MYSQL 자동 최적화 | Optimize

 

사이트를 관리하다 보면 페이지 로딩 속도가 늦어지는 상황이 발생하여 관련 내용 체크해보다 보면 DB 쿼리 부분에서 로딩속도가 지연되는 경우를 발견하는 경우가 많을것이다.

 

그 DB가 MYSQL 일때는 다음과 같이 DB 최적화를 하면 된다.

 

DB 최적화 하기 위해 DB 로그인 이후

sql> optimze table DB테이블명;

식으로 하기도 하는데,

 

 

리눅스에서는 cron 에 다음과 같이 script 화 하여

vi /etc/cron.daily/mysql_optimizer.sh
#!/bin/sh

# RPM버전일 경우
#/usr/bin/mysqlcheck -Aao --auto-repair -u root --password=패스워드;

# 소스설치일 경우(/usr/local/mysql)
#/usr/local/mysql/bin/mysqlcheck -Aao --auto-repair -u root --password=패스워드;

 

사용하면 되고

 

윈도우에서는 batch 파일을 다음과 같이 만들어

 

copy con db_optimize.bat

 

mysqlcheck -Aao --auto-repair -u root -p암호

 

ctrl + z

 

"시스템 도구"의 "예약된 작업"에 추가하면 된다.

 http://cafe.daum.net/KingOfLinux/1xBD/36?q=mysql%20optimize%20table



반응형
도움이 되셨다면 하트모양의 "♡ 공감"을 눌러주시면 큰 격려가 됩니다.
(로그인하지 않으셔도 가능)