레이블이 Background thread인 게시물을 표시합니다. 모든 게시물 표시
레이블이 Background thread인 게시물을 표시합니다. 모든 게시물 표시

2010년 12월 26일 일요일

Insert buffer merge thread

Insert Buffer의 내용을 Disk의 페이지로 Merge하는 Background Thread
  • InnoDB Buffer Pool의 Insert Buffer를 Disk의 각 인덱스 페이지로 병합
  • 이러한 병합 작업을 위해서는 해당 Index Page를 InnoDB Buffer Pool로 읽어들여야 하므로, 추가적인 Read작업도 수행하게 됨
  • Random I/O

2010년 12월 25일 토요일

InnoDB Main thread

InnoDB의 Main thread는 
Background Thread들의 관리 및 아래 작업들의 스케쥴링
  • Data page Flush
  • Undo log purge
  • Checkpoint
  • Insert Buffer merge

디스크로부터 읽기 작업을 전담하는 Background Thread

  • InnoDB의 4개의 IO Thread중 하나로, Background 읽기 작업 수행
  • Background 읽기이므로 Read Ahead를 위한 읽기 작업임
  • 실질적으로 그때 그때 필요한 디스크의 페이지는 Read thread 가 아닌 Client thread (Connection)에서 Foreground로 실행한다.

Redo log의 디스크 기록을 전담하는 Background Thread

  • Log Buffer의 내용을 디스크로 기록(flush)
  • Log 의 Disk write는 동기화 작업일수도 있고, 비동기화된 작업일 수도 있음
    -> innodb_flush_log_at_trx_commit 설정값에 따라 달라짐
    -> 0 : Foreground에서 Flush를 실행하지 않음 (Background로 초당 1회씩 Flush가 실행됨)
    -> 1 : 트랜잭션이 Commit될 때마다 Log file을 sync시킴
    -> 2 : O/S 캐시까지는 Flush를 실행하지만, Log file을 sync시키지는 않음 (O/S가 죽지 않으면 로그 손상 없음)
  • Sequential I/O를 수행함

디스크로 쓰기 작업을 전담하는 Background Thread

  • 윈도우즈에서 실행되는 MySQL은 여러개의 Write thread가 기동되지만, Linux용은 1개의 Write thread만 실행됨
  • InnoDB Buffer Pool의 더티 페이지를 디스크로 기록하는 일을 전담
  • 데이터의 Disk write는 대부분 Background job이며, 비동기화된 작업임
  • Free buffer가 없으면 동기화된 Flush (Disk write)도 발생함
  • Random I/O