MySQL

MySQL I/O 동작방식

minies 2023. 12. 23. 16:27
반응형

InnoDB 트랜잭션 로그

  • InnoDB는 변경사항을 디스크에 flush하지 않고 트랜잭션 로그를 남김
  • 이런방식은 랜덤 I/O를 예방하고 순차 I/O를 사용하게 하여 속도를 높여줌
  • innodb_log_file_size로 크기 제어

 

로그 버퍼

데이터 변경기록을 로그 버퍼에 기록하여 메모리에 보관

권장 크기 : 1~8MB

innodb_log_buffer_size로 제어

 

InnoDB 가 로그버퍼를 flush 할 때

  • 트랜잭션이 영구 반영되게 하려면 반드시 로그버퍼가 flush되어야 함
  • 지속성보다 성능이 중요한 서비스라면 innodb_flush_log_at_trx_commit으로 로그 버퍼 flush 빈도 조정 가능
  • 0 : 로그버퍼를 파일에 쓰고 1초마다 파일을 flush, commit 시에는 작업 수행 X
  • 1 : 트랜잭션이 commit 될때마다 영구 저장소에 flsuh (가장 안전한 설정) 
  • 2 : commit 할때마다 로그 버퍼를 로그파일에 쓰지만 flush 하지 않음, 1초마다 한번씩 flush 하도록 설정 (비정상 종료되어도 트랜잭션을 잃지 않음) 서버전체가 죽으면 트랜잭션 손실

 

 로드평균이나 CPU가 칠 경우 확인 방법

방법 1 : CPU, I/O등 전체적인 프로세스 확인 5초마다 메가바이트 단위로 보고

$ vmstat -SM 5

 

procs

r : CPU 시간을 기다리는 프로세스 수

B : 무정전 절전모드의 수 (디스크, 네트워크, 사용자입력을 대기 중)

 

memory

swpd : paged 된 블록 수

free : 사용 가능한 블록 수

buff : 버퍼에 사용중인 블록 수

cache : 운영체제 캐시에 사용중인 블록 수

 

swap

si : 스왑 인

so : 스왑 아웃

 

io

bi : 읽는 블록 수

bo : 쓰는 블록 수

 

 

방법 2 : I/O 처리량만 집중적으로 확인

iostat -dxk 5

 

rrqm/s  | wrqm/s : 초당 대기중인 병합된 읽기 및 쓰기 요청 수

 

r/s | w/s : 초당 전송된 읽기 및 쓰기 요청 수

 

rkB/s | wkB/s : 초당 읽고 쓴 킬로바이트 수

 

acggrq-sz : 장치의 큐에서 대기중인 요청 수

 

await : 디스크 큐에서 소요된 밀리초 단위 시간

반응형