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 : 디스크 큐에서 소요된 밀리초 단위 시간
반응형