MySQL, MariaDB

MySQL/MariaDB InnoDB(Storage) buffer pool 모니터링

SungWookKang 2019. 3. 24. 11:23
반응형

MySQL/MariaDB InnoDB(Storage) buffer pool 모니터링

 

·      Version : MySQL 5.7, Docker

 

MySQL/MariaDB에서는 다양한 스토리지 엔진을 지원하며 스토리지마다 특성 또한 다르다. 스토리지 엔진에 대한 특성은 아래 링크를 참고 한다.

·       Comparison of MySQL database engines : https://en.wikipedia.org/wiki/Comparison_of_MySQL_database_engines

 

이번 포스트에서는 일반적으로 OLTP 서비스에 많이 사용하는 InnoDB 스토리지 엔진에서 buffer pool(버퍼풀) 관련한 모니터링 방법에 대해서 알아본다. 아래 스크립트를 실행 하면 InnoDB buffer pool 대한 값을 확인할 있다.

Show status where variable_name like ‘innodb_buffer%’;

 

 

Variable Name

Comments

Innodb_buffer_pool_dump_status

버퍼풀에 보관된 페이지를 기록한 상태

Innodb_buffer_pool_load_status

버퍼풀이 이전 시점에 해당하는 페이지를 읽음으로 워밍업을 진행한 페이지

Innodb_buffer_pool_resize_status

버퍼풀의 크기를 동적으로 조정하는 작업 상태

Innodb_buffer_pool_pages_data

전체 버퍼풀에서 현재 사용중인 버퍼풀 페이지

Innodb_buffer_pool_bytes_data

전체 버퍼풀에서 현재 사용중인 버퍼풀 바이트

Innodb_buffer_pool_pages_dirty

버퍼풀의 데이터 변경된 페이지 (더티페이지 )

Innodb_buffer_pool_bytes_dirty

버퍼풀의 데이터 변경된 바이트 (더티 데이터 )

Innodb_buffer_pool_pages_flushed

버퍼풀에서 플러시한 페이지

Innodb_buffer_pool_pages_free

전체 버퍼풀에서 사용하지 않은(사용가능한) 페이지

Innodb_buffer_pool_pages_misc

Row lock, hash index 같이 오버헤드에 할당되어 사용된 버퍼풀의 페이지

Innodb_buffer_pool_pages_total

전체 버퍼풀의 페이지

Innodb_buffer_pool_read_ahead_rnd

랜덤으로 미리 읽기가 발생한 페이지

Innodb_buffer_pool_read_ahread

미리 읽기 백그라운드 스레드가 버퍼풀로 미리 읽어들인 페이지

Innodb_buffer_pool_read_ahead_evicted

버퍼풀에 미리 읽어들인 페이지 사용되지 않고 제거된 페이지

Innodb_buffer_pool_read_requests

버퍼풀에서 논리적인 읽기 요청 횟수

Innodb_buffer_pool_reads

버퍼풀에 데이터가 없어서 디스크에서 직접 읽은 논리적

Innodb_buffer_pool_wait_free

페이지를 읽거나 생성할때 사용가능한 클린 페이지가 없을 경우 InnoDB 더티페이지를 비우고 작업이 끝나기를 기다리는

Innodb_buffer_pool_write_requests

버퍼풀에 대한 쓰기 횟수

 

InnoDB에서 버퍼풀의 크기는 MySQL 서버 변수에서 매우 중요한 부분이다. 너무 크게 설정하면 다른곳에서 사용할 메모리가 줄어들고, 너무 작게 설정하면 빈번한 디스크로의 요청이 발생하여 IO 부담을 가중시킬 있다. 일반 적으로 DB서버의 경우 DB외에 다른 서비스와 함께 사용하지 않으므로 OS 필요한 공간( + 여유 공간) + MySQL 필요 공간(예상 커넥션 , 스레드 , 소트 메모리 등등) 제외하고 버퍼풀로 사용하는경우가 많다.

 

버퍼풀 모니터링에서 중요하게 살펴보아야 하는 부분이Innodb_buffer_pool_pages_flushed 항목이다. 이는 버퍼풀의 더티 데이터를 디스크에 쓰는 과정으로 과도한 flushed 디스크에 부담을 있다. 또한 한번에 플러시 되는 크기가 디스크 IO 성능에 비례하여 너무 클경우 디스크에서 쓰기 지연 현상이 발생할 있으므로 디스크의 성능과 함께 모니터링 해야한다.

 

Innodb_buffer_pool_reads 수치가 높은경우 버퍼풀의 데이터를 활용하지 못하는것으로 디스크로 부터 직접 데이터를 읽어야 하기 때문에 디스크의 성능 저하가 발생 있다. 일반 적으로 버퍼풀의 크기가 작은 경우 버퍼풀에서 데이터를 오랫동안 캐싱할 없어 빈번한 IO 발생할 있다.

 

 

[참고자료]

https://dev.mysql.com/doc/refman/8.0/en/server-status-variables.html

 

 

2018-05-15 / 강성욱 / http://sqlmvp.kr / http://sqlangeles.com

 

MySQL, InnoDB bufferpool, 버퍼풀, 이노디비, MySQL Storage, 스토리지 엔진, buffer pool 모니터링, DBA, MySQL 모니터링



반응형