Mysql & Maria/admin

Innodb_buffer_pool 관련 튜닝사항

dbavayne 2024. 12. 31. 11:07
MySQL & Maria DB Innodb_buffer_pool 사용량은 성능에 중요한 Point가 된다.
사용량이 높게되면 Disk I/O가 발생하게 되고 성능이 떨어지게된다.
Innodb_buffer_pool_size는 DOCS에서는 physical memory의 80%로 하는것을 말하고 있다. 
 

버퍼 사용량

사용량(%) = Innodb_buffer_pool_pages_data / Innodb_buffer_pool_pages_total * 100
  • 100% : 메모리가 가득 차 있으며 추가적인 읽기/쓰기 작업이 디스크에 의존하게 되어 성능 저하를 초래할 가능성이 높습니다
  • 이 값이 100%라면?
    • Buffer Pool이 데이터로 완전히 채워졌으며 더 이상 추가 데이터를 캐시할 여유가 없음.
    • 신규 데이터를 캐싱하려면 기존 데이터를 제거해야 하므로 캐싱 효율이 저하될 가능성이 높음.
    • 디스크 I/O 증가 가능성이 있음(특히 디스크에서 읽어와야 하는 데이터가 많아질 때).
    가능한 원인
    • Buffer Pool 크기가 데이터베이스 크기에 비해 작음.
    • 쿼리가 비효율적으로 작성되어 불필요하게 많은 데이터를 읽고 있음.
    • 데이터 접근 패턴이 랜덤하거나, 자주 사용되지 않는 데이터를 불필요하게 캐싱 중
  • 추가로 확인할 사항
    • innodb_buffer_pool_pages_free 확인
    • 해당 값이 0이면 Buffer Pool에 여유 공간이 없으므로 크기 증가 필요

버퍼 히트율

히트율(%) = ( 1−  Innodb_buffer_pool_read_requests / Innodb_buffer_pool_reads ) × 100

  • Innodb_buffer_pool_reads: 디스크에서 데이터를 읽은 횟수.
  • Innodb_buffer_pool_read_requests: 버퍼 풀에서 데이터를 요청한 총 횟수.
  • 95% 이상: 성능이 최적화된 상태.
  • 90~95%: 양호하나 Buffer Pool 크기 조정 또는 쿼리 최적화를 고려할 수 있음.
  • 90% 미만: 디스크 I/O가 많아 성능 저하 가능성. 조치 필요.

 

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
버퍼풀에 대한 쓰기 횟수

 

 

 

 

 

출처

https://yunhyeonglee.tistory.com/56

'Mysql & Maria > admin' 카테고리의 다른 글

Performance Schema  (1) 2024.12.13
SHOW SLAVE STATUS  (0) 2024.12.03
replication 깨진 후 bin log 복구  (2) 2024.12.03
percona toolkit (pt-table-checksum)  (1) 2024.11.19
mysql 5.7 replication 구성  (0) 2024.11.19