MySQL 최적화 관련 옵션

skip-name-resolve

MySQL은 클라이언트로 부터 연결을 맺게 되면, IP에 해당하는 호스트 이름을 찾는다.

한 번 찾아두면, 캐싱되므로 매번 찾는 작업을 하지 않아 속도에 그닥 지장은 주지 않지만,

연결된 수가 많거나 DNS서버가 느리고, 호스트 이름을 사용하지 않는다면,

이 옵션을 사용해 좀더 빠르게 사용할 수 있다.


innodb_buffer_pool_size

InnoDB가 테이블과 인덱스 데이터를 캐싱하는데 사용하는 공간

머신에 MySQL만 실행한다면, 물리메모리의 50~80%를 지정


innodb_log_file_size

로그 파일 한 개의 크기이다.

buffer_pool 사이즈의 10%를 지정

크기가 클 수록 체크포인트가 덜 발생해 디스크 I/O를 줄이지만,

디비가 크래시 났을 경우, 복구 타임이 길어진다.


innodb_io_capacity

InnoDB 페이지 flushing과 데이터 병합과 같은 백그라운드 작업에서 사용하는 초당 I/O 처리량을 지정한다.

디폴트 값은 200이다.

하드디스크가 5400이나 7400 RPM을 갖는 느린 디스크라면 100값을 지정

지정하는 값이 높을 수록, 데이터가 buffer pool에서 삽입과 삭제되는 속도가 빨라져, 캐싱 효과가 떨어진다.


innodb_thread_concurrency

동시 실행 가능한 쓰레드 수이다.

디폴트는 0이며, 무한히 생성된다.

적정 수는 core*2이지만, 테스트를 해보며 조정해야 한다. 

디폴트 ThreadPool은 커넥션 당 쓰레드가 생성되어, 커넥션 수가 많아지면 효율이 떨어진다.

개선 시킨 ThreadPool을 상용플러그인으로 만들었단다.


innodb_flush_method

데이터와 로그 파일을 어떻게 다룰 지 방법을 지정.

디폴트는 fdatasync이며, fsync()함수로 데이터와 로그 파일을 쓴다.

다른 값으로 O_DSYNC, O_DIRECT, O_DIRECT_NO_FSYNC가 있다.

각 옵션에 대한 설명보러 가기

O_DIRECT 옵션이 중요한데, OS가 관리하는 file system cache에 파일 데이터를 캐싱하지 않고, 

어플리케이션에 파일 데이터를 바로 넘겨주도록 만든다.

CentOS의 File system cache에 파일을 캐싱시키면, File system cache 사이즈가 증가되어, 

다른 어플리케이션이 사용할 메모리가 줄어들고,

메모리 부족시 swap 대상이 어플리케이션이 된단다.

또한, 파일 데이터가 File system cache와 innodb_buffer_pool사이에 이중으로 저장되는 것을 막아준다.