MySQL/InnoDB 엔진 monitoring을 통한 I/O 분석
내가 연구하는 분야인 데이터베이스 그 중 스토리지 엔진 최적화 분야에서는 I/O
최적화를 위한 많은 노력들이 이루어지고 있다. 자체 데이터베이스를 가지고 있거나 상용 데이터베이스를 판매하는 산업체가 아닌 이상은, 아이디어를 검증하기 위해 직접 시뮬레이터를 제작하거나 오픈소스 데이터베이스
를 가져다 쓰는 수 밖에 없다. 당연히 직접 만든 시뮬레이터 보다는 널리 사용되는 오픈소스 데이터베이스를 사용하는 것이 훨씬 믿을만한 정보이다.
보통 I/O 상태 정보 및 그와 관련된 시스템 콜들에 대한 연구를 진행할 때, 데이터베이스의 종류에 상관없이 sysstat
, blktrace
등의 패키지에 내장된 툴을 사용하거나 ftrace
, perf
와 같이 리눅스에서 자체적으로 지원하는 트레이스 인터페이스를 사용하는것이 일반적이다. (물론 vtune
, valgrind
등과 같은 툴들도 포함한다.)
본 페이지에서는 여러 오픈소스 데이터베이스중에서 가장 널리 쓰이고 있는 MySQL/InnoDB 엔진
의 I/O 분석을 할때, 외부 유틸리티를 사용하지 않고 내부의 Monitoring
변수들을 통해 확인하는 방안을 정리한다.
MySQL/InnoDB 엔진 status 분석하기
MySQL
에서는 기본적으로 다양한 Performance Schema
, Information Schema
, status
, monitoring
등의 정보들을 제공한다. 그중에서 monitoring
을 이용한 분석방법을 소개한다. 당연히 내가 사용하는 것들에 대해서만 소개한다.
기본적으로 InnoDB 엔진
의 핵심적인 스토리지 관리 정보들은 monitoring
변수를 통해서 제공되고 있다. 특히 많은 변수들이 기본으로 monitoring하게 설정이 되어있어 따로 설정할 필요가 없다.
InnoDB 엔진
에 대한 정보를 얻어내는 방법은 간단하다. mysql
클라이언트를 통해 서버에 접속한뒤 아래의 명령어를 통해 innodb monitor
를 모두 설정한다. (하지않아도 된다.)
set global innodb_monitor_enable = all;
이후 원하는 벤치마크 혹은 원하는 쿼리를 수행한뒤 아래의 쿼리문을 통해 정보들을 가져오도록 한다.
select * from information_schema.innodb_metrics;
설명은 여기서 끝! 각각의 정보가 무슨 내용인지는 아주 친절히 출력되므로 해당 내용을 보고 자신이 원하는 정보를 가져오면 된다.
이후 블로깅에서 더욱 자세한 내용과 다양한 performance schema
, information schema
에 대해서 정리하고 소개하도록 한다.