DBMS 모니터링 : Inno DB
버퍼풀 할당율

MySQL의 버퍼 풀 할당 비율은 시스템에서 사용 가능한 총 메모리와 관련하여 버퍼 풀에 할당된 메모리 양을 나타냅니다. 버퍼 풀은 데이터 페이지가 저장되는 MySQL의 메모리 영역으로, 데이터에 더 빠르게 액세스할 수 있습니다.
버퍼 풀 할당 비율은 변수 "innodb_buffer_pool_size"에 의해 설정됩니다. 기본값은 128MB이지만 버퍼 풀에 더 많은 메모리를 할당하고 성능을 향상시키기 위해 더 높은 값으로 변경할 수 있습니다. 버퍼 풀 할당 비율은 다음과 같이 계산됩니다.
innodb_buffer_pool_size / 총 시스템 메모리
버퍼 풀 할당 비율이 높을수록 더 많은 메모리가 버퍼 풀 전용이고 다른 작업에 사용할 수 있는 메모리가 적다는 의미입니다. 버퍼 풀이 너무 크면 스와핑 및 성능 저하로 이어질 수 있습니다. 버퍼 풀 할당 비율은 시스템의 성능을 모니터링하고 그에 따라 값을 조정하여 최적의 값을 찾는 것이 중요합니다.
요약하면 MySQL의 버퍼 풀 할당 비율은 데이터 페이지를 저장하고 성능을 향상시키기 위해 버퍼 풀에 할당되는 메모리 양을 결정합니다. 이 비율의 최적 값은 데이터베이스 크기와 사용 가능한 시스템 리소스에 따라 달라질 수 있습니다.
사용된 Parameter 정보는 아래와 습니다.
- 계산
INNODB_BUFFER_POOL_SIZE / OS_MEMORY * 100
❗ IMPORTANT 에이전트가 DBMS 가 설치된 호스트일 경우 활성화 됩니다.
버퍼풀 적중률

MySQL의 버퍼 풀 적중률은 디스크에서 검색되는 것과는 반대로 버퍼 풀 메모리에서 이행되는 데이터베이스 페이지 요청의 백분율을 나타냅니다. 버퍼 풀은 디스크에 액세스하지 않고도 빠르게 검색할 수 있도록 자주 액세스하는 데이터 페이지가 저장되는 메모리 영역입니다.
버퍼 풀 적중률이 높으면 버퍼 풀이 자주 액세스하는 데이터를 효과적으로 캐싱하여 성능이 향상됨을 나타냅니다. 반면에 낮은 버퍼 풀 적중률은 버퍼 풀이 자주 액세스하는 모든 데이터 페이지를 저장할 만큼 충분히 크지 않아 디스크 액세스가 빈번하고 성능이 저하됨을 나타냅니다.
버퍼 풀 적중률을 최적화하기 위해 관리자는 사용 가능한 메모리 양과 워크로드 요구 사항에 맞게 버퍼 풀의 크기를 조정할 수 있습니다. 또한 innodb_buffer_pool_instances 구성 매개변수를 사용하여 버퍼 풀을 여러 개의 작은 풀로 나눌 수 있으므로 동시성을 개선하고 성능 병목 현상을 방지할 수 있습니다.
좋은 성능을 위해 이 비율을 높게 유지하십시오.
사용된 Parameter 정보는 아래와 습니다.
- 계산
INNODB_BUFFER_POOL_READ_REQUESTS / (INNODB_BUFFER_POOL_READ_REQUESTS + INNODB_BUFFER_POOL_READS) * 100
버퍼풀 페이지 사용률

MySQL의 버퍼 풀은 성능 향상을 위해 자주 사용되는 데이터 페이지를 캐시하는 데 사용되는 메모리 영역입니다. 쿼리가 실행되면 MySQL은 먼저 버퍼 풀을 확인하여 필요한 데이터 페이지가 이미 메모리에 있는지 확인합니다. 그렇다면 데이터 페이지를 디스크에서 읽을 필요가 없으므로 쿼리를 훨씬 더 빨리 실행할 수 있습니다. 필요한 데이터 페이지가 메모리에 없으면 디스크에서 읽어서 버퍼 풀에 추가합니다.
버퍼 풀은 각각 단일 데이터 페이지를 저장할 수 있는 여러 버퍼 풀 페이지로 나뉩니다. 버퍼 풀의 크기와 버퍼 풀 페이지 수를 구성하여 성능과 메모리 사용량의 균형을 맞출 수 있습니다. 더 큰 버퍼 풀은 일반적으로 더 나은 성능을 제공하지만 더 많은 메모리를 소비합니다.
요약하면 MySQL의 버퍼 풀은 자주 사용하는 데이터 페이지를 메모리에 캐싱하여 성능 향상에 도움을 주는 중요한 구성 요소입니다. 버퍼 풀 페이지의 크기와 수를 구성함으로써 관리자는 캐싱에 사용되는 메모리 양을 제어하고 특정 요구 사항에 맞게 성능을 최적화할 수 있습니다.
IO 비율

MySQL에서 IO 비율은 InnoDB 버퍼 풀 적중률, 쿼리 응답 시간 및 디스크 I/O 대기 시간과 같은 다양한 성능 메트릭을 사용하여 측정할 수 있습니다. IO 비율의 정확한 계산은 사용된 특정 메트릭에 따라 다를 수 있지만 일반적으로 수행된 데이터베이스 작업 수에 대한 디스크 읽기 및 쓰기 수를 측정하는 것과 관련됩니다.
결론적으로 디스크 리소스의 효율적인 사용과 최적의 데이터베 이스 성능을 유지하기 위해서는 MySQL에서 IO 비율을 모니터링하는 것이 필수적입니다.
사용된 Parameter 정보는 아래와 습니다.
- INNODB_DATA_FSYNCS : 지금까지 fsync() 작업 수. fsync() 호출 빈도
- INNODB_DATA_READS : 데이터 읽기의 총 수
- INNODB_DATA_WRITES : 데이터 쓰기의 총 수
- 계산
INNODB_DATA_READS/(INNODB_DATA_READS+INNODB_DATA_WRITES+INNODB_DATA_FSYNCS) * 100
대기율

InnoDB 대기는 InnoDB 스토리지 엔진의 스레드가 작업을 계속하기 전에 리소스를 사용할 수 있을 때까지 기다려야 하는 시간을 나타냅니다. 이 대기 시간은 잠금 경합, 디스크 I/O 또는 메모리 할당과 같은 다양한 요인으로 인해 발생할 수 있습니다.
InnoDB 대기는 쿼리 및 트랜잭션 처리를 지연시키므로 데이터베이스의 전반적인 성능에 영향을 미칠 수 있습니다. InnoDB 대기의 근본 원인을 모니터링하고 식별하여 이를 줄이거나 제거하기 위한 적절한 조치를 취하는 것이 중요합니다.
다음을 포함하여 데이터베이스 관리자가 직면할 수 있는 몇 가지 일반적인 InnoDB 대기가 있습니다.
사용된 Parameter 정보는 아래와 습니다.
- INNODB_ROW_LOCK_WAITS : InnoDB Row 잠금을 얻기 위해 대기한 수
- INNODB_BUFFER_POOL_WAIT_FREE : 스레드가 버퍼 풀에서 사용 가능한 페이지를 기다려야 하는 횟수
- INNODB_LOG_WAITS : 로그 버퍼가 들어오는 쓰기 요청을 수용하기에 너무 작아서 공간이 확보될 때까지 기다려야 했던 횟수
상태

InnoDB 상태 정보는 MySQL의 InnoDB 스토리지 엔진의 현재 상태와 성능 지표를 상세하게 보여줍니다. 이 정보를 통해 데이터베이스의 성능 병목 현상을 파악하고 최적화 방향을 결정할 수 있습니다.
확인 할 수 있는 상태정보는 아래와 같습니다.
- BACKGROUND THREAD : 백그라운드 스레드 상태 분석
- SEMAPHORES : 세마포어 및 락 경합 분석
- TRANSACTIONS : 트랜잭션 상태 및 퍼지 작업 분석
- FILE I/O : 파일 입출력 및 I/O 스레드 상태
- INSERT BUFFER AND ADAPTIVE HASH INDEX : 삽입 버퍼 및 해시 인덱스 성능
- LOG : 로그 관리 및 체크포인트 상태
- BUFFER POOL AND MEMORY : 버퍼 풀 및 메모리 사용량 분석
- ROW OPERATIONS : 행 작업 및 쿼리 상태
뮤텍스

InnoDB의 mutex(상호 배제) 정보는 데이터베이스 내부의 동시성 제어와 락 경합 상황을 파악하는 중요한 성능 지표입니다. 이 정보를 통해 시스템의 병목 현상을 식별하고 최적화 방향을 결정할 수 있습니다.
각 모듈에 대한 상태를 알려주며, 주요 상태 값은 아래와 같습니다.
- waits : mutex 에서 대기한 횟수이며, 높을수록 경합이 심함을 의미
- spins : mutex 를 얻기 위해 스핀한 횟수이며, CPU 를 사용하여 짧은 시간 대기한 횟수를 의미
- rounds : 스핀 라운드의 횟수이며, waits 와 spins 를 포함한 전체 시도 횟수를 의미
- OS waits : OS 레벨에서 대기한 횟수이며, spins 로 해결되지 않아 OS에 대기 요청한 횟수를 의미