MySQL에서 압축(compression) 기능은 클라이언트와 서버가 모두 'zlib' 압축을 지원하고, 클라이언트가 압축을 요청하는 경우에만 적용됩니다.
압축 사용 시 고려할 점
- 압축을 사용하면 전송되는 데이터(페이로드)의 크기를 줄일 수 있다는 장점이 있습니다.
- 반면, 압축 과정에서 추가적인 연산이 필요하기 때문에 처리 시간이 늘어난다는 단점도 존재합니다.
- 성능상 이점은 전송되는 결과 집합(result set)의 크기에 크게 좌우됩니다.
- 또한 데이터베이스 서버와 클라이언트 사이의 네트워크 대역폭과 지연 시간(latency)도 중요한 요소입니다. 결과 집합이 클수록 지연 시간 역시 길어집니다.
- 다시 말해, 대역폭이 낮은 환경일수록 압축의 이점을 체감할 가능성이 높습니다.
시스템 전체의 최대 성능은 결국 가장 작은 병목 지점(bottleneck)에 의해 제한됩니다. 따라서 현재 네트워크 상태와 CPU 자원 사용 현황을 먼저 분석하는 것이 필요합니다.
가장 이상적으로 최적화된 데이터베이스 서버는 CPU를 항상 100% 활용하는 서버입니다. 프로세서가 유휴(idle) 상태로 놓여 있다면 그만큼 컴퓨팅 자원이 낭비되고 있는 것입니다.
mysqldump로 테이블 재구축하기
테이블은 덤프(dump) 후 다시 로드(reload)하는 방식으로 재구축할 수 있습니다. 'mysqldump'로 덤프 파일을 생성한 뒤, mysql 명령으로 해당 파일을 불러오면 됩니다. 아래 명령어를 사용합니다.
mysqldump db_name t1 > dump.sql
mysql db_name < dump.sql
대용량 덤프 파일을 gzip으로 압축하여 전송하기
대용량 mysqldump 파일을 FTP 등을 통해 한 시스템에서 다른 시스템으로 옮겨야 하는 경우, 시간을 절약하려면 아래와 같이 gzip 파이프라인을 활용하는 것이 좋습니다.
mysqldump -u root -p database_name | gzip > dump.gz
파일 내용을 zip으로 묶는 방법도 있지만, 속도와 효율성 측면에서 이것이 최선의 방법이라고 보기는 어렵습니다. 실무에서는 위와 같이 mysqldump 출력을 gzip으로 직접 스트리밍하는 방식이 가장 널리 권장됩니다.