Notice
Recent Posts
Recent Comments
Link
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

BRSoo

[MySQL] swap메모리 사용과 Filesystem Cache 본문

Tech

[MySQL] swap메모리 사용과 Filesystem Cache

BR-soo 2016. 10. 21. 10:33

* 이글은 카카오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시간마다 실행하도록 등록 하였다.


Comments