본문 바로가기
MySQL별책부록

15. MySQL 실행 시 메모리 관련 library 설정하는 방법

by 모모레 2014. 3. 18.

MySQL Version 5.5 부터는 MySQL을 실행 할때 malloc() library 대신에 사용할 수 있는 라이브러리를 설정할 수 있다.  

MySQL을 어떤 시스템에서 사용하느냐에 따라 성능에 큰 차이가 나는데...다음의 url은 그것을 테스트한 외국 사이트의 자료이다.

http://www.mysqlperformanceblog.com/2013/03/08/mysql-performance-impact-of-memory-allocators-part-2/

 

결과로만 얘기하면,

"cpu core가 8 이상이 되는 시스템 에서는 기본 library보다는 tcmalloc이나 jemalloc을 사용하는것이 성능에 더 좋다."

고 나와있다.

 

그럼 그와 관련된 설정 정보를 알아보자.

다음의 mysql reference에 나와있는 설정 정보이다.

관련 url

http://dev.mysql.com/doc/refman/5.6/en/mysqld-safe.html#option_mysqld_safe_malloc-lib

 

mysqld_safe 프로그램의 설정 파라메터 중의 하나

 

--malloc-lib=[libnm]

 

시스템의 malloc() 라이브러리 대신에 사용할 라이브러리를 지정할 수 있다. 어떤 라이브러리든 pathname을 지정하여 사용할 수 있으나, tcmalloc의 경우 MySQL의 내부에 포함되어 있어서 그것을 사용할 수도 있다. (Ver. 5.6의 리눅스 배포본에 한해서만 그렇다.) 만약, tcmalloc을 지정하였는데, 제대로 동작하지 않는다면, 대신에 path name을 작성하여 그것을 사용하게 할 수도 있다.

--malloc-lib mysqld 실행 시 메모리 할당을 위한 library를 찾기위한 loader를 enable하기 위한 dynamic link에 영향을 줄 수 있는 LD_PRELOAD 환경 변수를 수정하여 동작한다.

  • 만약 환경 변수값이 없거나, --malloc-lib에 아무 것도 주어지지 않는다면, LD_PRELOAD 는 수정되지 않고, tcmalloc을 사용하려고 시도하지 않는다.
  • --malloc-lib=tcmalloc이라고 값이 주어진다면,  mysqld_safe/usr/lib 와 MySQL의 pkglibdir(일반적으로 /usr/local/mysql/lib)에서 tcmalloc library를 찾는다. 만약, tcmalloc을 찾으면 path name을 LD_PRELOAD 값에 추가한다. 그리고, 찾지 못하면  mysqld_safe는 에러를 발생하고 작동을 중지한다.
  • 만약 --malloc-lib=/path/to/some/library 로 지정한다면, full path를 LD_PRELOAD에 추가한다. 그리고, 그 패스가 정확하지 않거나, 읽을 수 없는 영역이면, mysqld_safe는 에러를 발생하고 작동을 중지한다.
  • mysqld_safeLD_PRELOAD에 path name을 추가하는 모든 케이스에서 항상 이미 존재하는 값 앞에 해당 값을 추가한다.

 

리눅스 유저는 my.cnf에 다음과 같이 설정값을 추가하여 바이너리 패키지 안에 있는 libtcmalloc_minimal.so를 사용할 수 있다.

 

 [mysqld_safe]

malloc-lib=tcmalloc

tcmalloc이 /usr/lib 에 있다면 다음과 같이 설정할 수도 있다.

 

 [mysqld_safe]

malloc-lib=/opt/lib/libtcmalloc_minimal.so