[데이터베이스] MySQL & TPC-C(3)

kothe·2022년 10월 18일
2

데이터베이스

목록 보기
3/8

이번엔 성능 향상을 위해 버퍼 풀의 다양한 측면을 사용자가 바꿀 수 있는 configuration을 알아보자.

Buffer Pool configuration

  • Buffer Pool Size
    • Buffer pool size variable : innodb_buffer_pool_size
      • buffer pool is allocated in chunks
    • Buffer pool chunk size : innodb_buffer_pool_chunk_size
      • innodb_buffer_pool_size = innodb_buffer_pool_chunk_size * innodb_buffer_pool_instances
  • Buffer Pool Instances
    Buffer pool 을 separate instances로 나누면 concurrency를 향상시킬수있다.
    즉, 다른 쓰레드가 같은 cached pages를 read/write하는 트랙잭션간의 lock경합을 줄일수 있다.
    나눠진 각각의 buffer pool이 자신만의 free list, flush list, LRU등등을 관리한다.

    innodb_buffer_pool_instances → core 수 * 2로 CPU 코어가 많으면 많이 늘릴 수 있다고 보면 된다.

    num of instance variable : innodb_buffer_pool_instance

  • Scan Resistant Buffer Pool

    • innodb_old_blocks_time : specifies the time window after the first access to a page during which it can be accessed without being moved to the front (most-recently used end) of the LRU list.
    • innodb_old_blocks_pct : specifies the approximate percentage of the InnoDB buffer pool used for the old block sub-list.
  • Buffer Pool Prefetching(미리 불러오기)
    Read-ahead : 곧 필요할거같은 page들을 buffer poool에서 비동기적으로 미리 가져오라는 I/O request이다.
    두 가지 Read-ahead algorithm이 있다.

    • Linear : buffer pool에 있는 순서대로 접근
      • innodb_read_ahead_threshold : controls how sensitive InnoDB is in detecting patterns of sequential page access.
    • Random : page access order에 상관없이, 이미 buffer pool에 있는 page를 바탕으로 언제 page가 필요할지 예측.
      • innodb_random_read_ahead : random read-ahead feature를 사용가능하게 한다.
  • Buffer Pool Flushing
    Buffer Pool의 dirty page(write 된 page) 는 background thread에 의해서 flush된다.

    • innodb_lru_scan_depth : # of page flushed in LRU tail by the cleaner thread. innodb_buffer_pool의 flush 동작에 영향을 미치는 옵션이다.

      백그라운드로 돌고 있는 page_cleaner thread가 buffer pool LRU list중에 dirty page를 얼마나 많이 Disk로 내릴지 정하는 옵션이다. (다음 글에서 자세하게 살펴봄)

    • background operation performed once per second.

    • 주로 buffer pool이 큰 상황에서, 평소 IO부하가 감당할 정도라면 이 설정을 늘려도 좋고, IO용량을 상회하는 부하가 들어오는 상황이라면 설정을 낮추는 것이 좋다. (default = 1024)

Buffer Pool Monitoring Method

SHOW ENGINE INNODB STATUS \G

명령어를 통해서 buffer pool의 상태를 볼 수 있다.


Reference
https://www.slideshare.net/meeeejin/mysql-buffer-management

profile
천천히 꾸준히

0개의 댓글