MySQL, 쿼리 성능 핵심 innodb_buffer_pool_size

MySQL DBMS를 사용하는 웹 애플리케이션에서 페이지 조회 등의 쿼리 성능이 좋지 않으면 innodb_buffer_pool_size 값을 확인 해볼 필요가 있다.

innodb_buffer_pool_size

innodb_buffer_pool_size는 MySQL의 InnoDB 스토리지 엔진이 디스크에서 읽은 데이터와 인덱스를 메모리에 캐시해두는 공간이다. 이 공간을 통해 자주 사용하는 데이터는 디스크에 접근하지 않고 빠르게 처리할 수 있다.

즉, 이 값이 클수록 반복적으로 조회하는 데이터를 더 많이 캐싱해두었다가 빠르게 응답할 수 있는 것이다.

innodb_buffer_pool_size 확인

아래의 쿼리를 실행하면 현재 설정된 값을 볼 수 있다.

mysql> SHOW VARIABLES LIKE 'innodb_buffer_pool_size';
+-------------------------+------------+
| Variable_name           | Value      |
+-------------------------+------------+
| innodb_buffer_pool_size | 8589934592 |
+-------------------------+------------+

결과의 단위는 바이트이기 때문에 1024로 3번 나누면 GB 단위로 볼 수 있다.

SELECT 8589934592 / 1024 / 1024 / 1024 AS GB;

적절한 innodb_buffer_pool_size 설정 값?

적절한 innodb_buffer_pool_size 값은 서버 환경에 따라 다르게 대응해야겠지만, 전용 DB 서버면 전체 메모리의 70% 수준으로 설정해도 괜찮다. 보수적으로는 50% 수준까지만 설정해도 성능이 많이 좋아지는 걸 느낄 수 있다. 예를 들어, RAM 32GB 장비면 16GB 수준으로만 올려도 많이 좋아진다.

innodb_buffer_pool_size 설정 방법

값을 영구적으로 설정하려면 my.cnf 내용을 수정하고 mysql을 재기동한다.

[mysqld]
innodb_buffer_pool_size = 2G

db 재기동이 어려우면 런타임에도 설정은 가능하다. 다만 런타임에 설정한 값은 db가 재기동되면 초기화된다. 아래는 16GB로 설정하는 예시다.

SET GLOBAL innodb_buffer_pool_size = 17179869184;
  • 16 GB = 16 × 1024 × 1024 × 1024 = 17179869184 bytes

댓글 남기기