MySQL/MariaDB Memory 모니터링

 

·      Version : MySQL 5.7.21, Ubuntu 16.0.4

 

Memory 사용률은 모든 운영체제에서 중요한 모니터링 지표이다. 다양한 어플리케이션이 서버에서 실행되면서 실제 물리메모리를 초과하는 메모리 요구가 발생할 있기 때문에 메모리 모니터링도 중요하다. 실제 데이터베이스의 경우 메모리가 부족하여 성능저하가 크게 발생하는 경우가 많다.

 

아래 명령어는 Unbuntu Linux에서 5 간격으로 메모리 사용량을 확인하는 명령이다.

watch -n 5 free –m

 


 

리눅스는 메모리의 효율적인 운영을 위해 전체 메모리에서 미리  Buffers + Cached 값을 자동으로 할당해 놓는다. 만일 어플리케이션에서 메모리가 필요할 경우 Cached 할당된 메모리를 자동으로 반환해 어플리케이션에 할당한다.

 

MySQL 서버는 다양한 종류의 메모리 버퍼(메모리 캐시) 사용한다. 사용영역에 따라 크게 전역과 지역으로 나눌 있다.

·       MySQL/MariaDB 아키텍처 메모리 할당 사용 구조 : http://sqlmvp.kr/220404814981

전역 메모리 (모든 커넥션 또는 스레드에서 공유)

지역메모리 (세션별로 할당, 공유하지 않음)

·       InnoDB Buffer pool

·       MyISAM key cache

·       Join buffer

·       Sort buffer

·       Read buffer

 

전체 메모리 사용량을 예상하여 할당하려면 아래와 같은 공식을 사용한다.

전역 메모리 사용량 + (지역적 메모리 사용량 X 최대 동시 커넥션 )

 

만약 물리 메모리 대비 InnoDB 버퍼풀 크기 비율을 과도하게 높게 하였을때 활성 커넥션(Active DB Connections) 증가로 세션 단위의 메모리 사용량이 증가한다면 MySQL 서버가 사용하는 전체 메모리는 물리메모리를 초과할 있으며 서버의 성능저하로 이어질 있다. 따라서 아래와 같은 가이드를 제공하여 성능 저하를 예방할 있다.

·       운영체제가 사용하는 적정 메모리 용량을 제외한 Buffer pool 할당

·       MySQL 서버에서 제공하는 Max Connection 제한

·       Max Connection 만큼 세션이 증가할 있으므로 세션별로 사용해야 하는 메모리 사용량 제한

·       물리 메모리를 초과하지 않는 범위에서 MySQL 서버가 전역적으로 사용해야하는 메모리 영역에 대한 최대 사용랑 제한

 

메모리 관련 설정을 메모리 사용량에 영향을 있는 변수는 약간의 유휴 메모리를 유지될 있게 설정하는 것을 권장한다.

·       MySQL/MariaDB Memory 관련 설정 변수 : http://sqlmvp.kr/220365937569

 

Swap 메모리가 빈번한 경우 서버에서 실행되는 어플리케이션이 메모리를 적절하게 사용하지 못하거나 물리 메모리가 부족하다는 것을 의미하기 때문에 Swap 지수가 0보다 경우 어느 어플리케이션이 메모리를 많이 사용하는지 확인이 필요하다.

 

 

[참고자료]

·       How MySQL Uses Memory : https://dev.mysql.com/doc/refman/5.7/en/memory-use.html

 

 

2018-03-27 / 강성욱 / http://sqlmvp.kr / http://sqlangeles.com

 

MySQL, MariaDB, linux, Memory 모니터링, watch, InnoDB Buffer pool, MySQL 메모리 사용량, 전역 메모리, 지역 메모리, 세션 메모리, Max connection



+ Recent posts