BRSoo
[MySQL] swap메모리 사용과 Filesystem Cache 본문
* 이글은 카카오DB팀 블로그 에서 발취한 내용이며,
필자는 이 글을 통해 swap메모리 사용율을 줄이고,
MySQL 이 더이상 Filesystem Cache 를 사용하지 않도록 구성 하였다.
리눅스 free 메모리의 측정은, free -m 명령어를 통해 알수 있다.
여기서 여유 메모리는 free + cache 라고 들 한다.
이유 인즉, OS 에서는 메모리를 모두 사용할 경우, cache된 메모리중 일부를 반환해 주기 때문 이다.
하지만, 리눅스 CentOS 5.X 는 Filesystem Cache 중 일부를 반환 해주는게 아니라,
메모리를 가장 많이 사용하고 있는 어플리케이션 중, 일부를 swap메모리로 내리는 것 이라고 한다.
이는 mysql 엔진 개발자 들 사이에서는 OS버그로 인식하고 있는 모양 이다.
(이 문제는, 필자가 CentOS 6.X 에서 도 격은 적이 있음.)
MySQL community 서버에서 Filesystem Cache 를 사용하는 대표적인 경우는
1. O_DIRECT 미사용시
- DataFile, Redo Log, Bin Log, Backup File(해당서버에서 Backup시), 기타 로그(slow-query.log 등등)
2. O_DIRECT 사용시
- Redo Log, Bin Log, Backup File(해당서버에서 Backup시), 기타 로그(slow-query.log 등등)
MariaDB 서버에서 filesystem cache를 사용하는 대표적인 경우는
1. ALL_O_DIRECT 미사용시
- DataFile, Redo Log, Bin Log, Backup File(해당서버에서 Backup시), 기타 로그(slow-query.log 등등)
2. ALL_O_DIRECT 사용시
- Bin Log, Backup File(해당서버에서 Backup시), 기타 로그(slow-query.log 등등)
따라서, 다음의 경우에는 FileSystem Cache가 많이 커지게 됩니다.
- (ALL_)O_DIRECT를 사용하지 않고 partition table이 많거나 실제 table이 많은 경우
- ALL_O_DIRECT를 사용하지 않고 log group의 size가 크고 많은 경우
- Bin Log의 expire_days가 길어 파일이 많거나 백업 파일이 많은 경우
- 기타 복제 구성을 위한 덤프파일이 존재하는 경우
위 문제를 해결하기 위해 필자는
my.cnf 의 innodb_flush_method = O_DIRECT 로 설정 해 주었고,
결과로, Filesystem Cache 가 현저히 줄어들고 거의 모든 메모리가 free 로 남아 있게 되는 상황이 만들어 졌다.
카카오DB팀 에서는 요시노리 개발자가 작성한 perl 스크립트를 적용하여 효과를 보았다고 한다.
적용 방법은 아래를 참고.
소스: https://github.com/yoshinorim/unmap_mysql_logs
perl 패키지 설치.
# yum install perl-version perl-Parse-RecDescent perl-Inline
실행
# ./unmap_mysql_logs
필자도 위 스크립트를 통해 어느정도 효과를 보았고, crontab 에 1시간마다 실행하도록 등록 하였다.
'Tech' 카테고리의 다른 글
[SMTP] SMTP 에 DKIM 적용 하기 (0) | 2016.10.20 |
---|---|
[Linux] -bash: fork: 자원이 일시적으로 사용 불가능함 (0) | 2016.10.20 |
[MySQL] innodb 와 myisam 차이 (0) | 2016.10.20 |