제공: 한빛 네트워크
저자: Baron Schwartz, 허정수 역
원문: Open Tools for MySQL Administrators
MySQL은 MySQL 서버를 모니터링하고 장애해결을 위한 몇몇 툴을 제공하고 있다. 하지만, 그 툴들은 MySQL 개발자나 관리자에게 항상 적합한 것은 아니며, 일부 상황(원격 혹은 웹을 통한 모니터링 등)에서 제대로 작동하지 않는다. 다행히 MySQL 커뮤니티에서는 다양한 공짜 툴들을 제공함으로서 이러한 갭을 매꿀 수 있다. 그렇지만, 이러한 공짜 툴은 웹 검색을 통해서 찾기 어렵다. 사실은 웹 검색은 바로 사용할 수 있는 프로젝트보다는 이미 종료되었거나 혹은 특수 목적의 프로젝트까지 찾아내기 때문에 짜증나는 일이 될 수 있다.
하지만 걱정 하지 않아도 된다. 필자가 이런 일을 이미 끝냈기 때문에 당신은 할 필요가 없다. 필자는 유용하다고 생각되는 툴을 안내할 것이다. 이 기사의 끝에서는 도움이 되지 않는 툴도 적어 두었으므로 참고하기 바란다.
본 기사는 MySQL 서버의 상태를 모니터링하는 툴에 국한된 기사이므로, 쿼리를 작성하거나 테이블을 작성하는 등에 관련된 툴에 관해서는 논의하지 않을 것이다. 또한 자유로운 오픈 소스 프로그램에만 집중할 것이다.
쿼리와 트랜잭션 모니터링을 위한 툴
쿼리를 모니터링하는 전통적인 툴은
Jeremy Zawodny의 mytop이다. mytop은 펄로 작성되어 있으며 터미널 상에서 실행되고, 연결에 관련된 모든 정보를 표 형식으로 보여준다(마치 프로세스 정보를 보여주는 유닉스의 top 명령과 같다.) 출력되는 정보로는 컨넥션 ID, 연결 상태, 현재 실행 중인 쿼리가 있다. mytop을 보면서 당신은 쿼리를 EXPLAIN 할 수도 있으며 쿼리를 종료시킬 수도 있고 이외 몇 가지 기능을 더 수행할 수 있다. mytop 결과의 상단에서는 MySQL 서버의 정보 즉, 버전, uptime, 초당 쿼리 수 등의 정보를 볼 수 있다. 이외에도 몇 가지 정보가 있지만 별로 쓰여지지는 않았다.
젠투나 페도라 코어같은 GNU/LINUX 배포판에서 mytop을 볼 수도 있고, 또한 Jeremy의 웹 사이트로부터 설치할 수도 있다. mytop은 매우 크기가 작으며 의존성도 적다. 반면에 mytop이 한동안 유지보수 되지 못한 프로그램이라 MySQL 5.x에서는 정상적으로 작동하지 않는다는 단점이 있다.
mytop과 비슷한 툴로서
mtop이라는 툴이 있다. mytop과 마찬가지로 터미널 상에서 표 형식으로 정보를 표현하고 mytop의 기능 대비 약간의 기능이 빠졌지만 다른 기능이 또한 포함되어 있으므로 두 툴은 거의 비슷하다. mtop 또한 펄로 작성되었으며 몇몇 OS에서 패키지 형태로 제공되기도 하면서 소스포지에서 다운받아 설치할 수 도 있다. 하지만 mtop 또한 활발하게 유지보수 되지 않고 있으며 최신 MySQL에서는 정상적으로 작동하지 않는다.
일부 개발자들은 다른 스크립트에서 쉽게 사용할 수 있는 MySQL 프로세스 리스트를 출력하는 스크립트를 만들기도 하였다. 예로
SHOW FULL PROCESSLIST 스크립트가 있으며,
MySQL Forge에서 다운로드가 가능하다.
필자가 개발한
innotop은 MySQL과 InnoDB를 모니터링할 수 있는 프로그램이다. MySQL 의 인기가 올라가면서 InnoDB는 MySQL에서 트랜잭션을 지원하는 스토리지 엔진으로 많이 사용되고 있다. InnoDB는 MySQL의 스토리지 엔진과 차별된 기능을 많이 가지고 있다. 따라서, InnoDB를 모니터링하기 위해서는 다른 접근 방법이 필요하다. innotop 툴은 SHOW INNODB STATUS 명령의 결과로 나온 많은 량의 정보를 보여준다. 원래 SHOW INNODB STATUS의 결과는 잘 정리 되어있지 않고, 텍스트 양이 많기 때문에 실시간 모니터링에 사용하기에는 별로 좋지 않다. 따라서 나는 편의를 위해 형식화된 출력을 할 수 있도록 innotop을 개발하였다. 현재 innotop은 나의 회사에서 메인 모니터링 툴이 되었다.
innotop은 앞에서 언급한 툴들보다 가장 기능이 좋은 툴이며, 기존 툴들을 완벽하게 대치할 수 있다. innotop은 프로세스 목록과 상태 정보를 출력할 수 있으며 쿼리를 분석하고 종료할 수 있는 기능을 제공한다. 다른 툴에서 제공하지 않는 많은 기능을 제공하고 있는데 현재 트랜잭션 목록을 출력할 수 있으며, LOCK에서 대기 중인 트랜잭션, 데드락 정보, Foreign key 에러, I/O와 로그 통계, InnoDB row operation과 세마포어 통계, InnoDB 퍼버 풀 정보, 메모리 사용, INSERT 버퍼, Adaptive hash index에 관한 정보를 출력할 수 있다. mytop 및 그와 비슷한 프로그램들이 보여주는 MySQL의 표준 정보들도 물론 출력할 수 있다. 구성이 쉽고 상호 작용이 가능한 도움말도 제공한다.
innotop은 설치도 쉽다. 실행이 바로 가능한 펄 스크립트이지만, 아직 패키지화 되어 있지 않기 때문에 필자의 웹 사이트에서 다운로드하여 설치해야만 한다.
웹을 기반으로한 툴로는 mytop의 클론 버전인
phpMyTop과
ajaxMyTop이 있다. 웹을 기반으로한 툴은 쉘에 직접 접근할 수 없거나 원격에서 MySQL 서버에 접근할 수 없을 경우에 웹 서버를 통하여 MySQL에 접속할 수 있다. ajaxMyTop이 좀 더 최신의 툴이며, 활발하게 개발되고 있다. 또한 Ajax의 도움으로 전통적인 GUI 프로그램과도 유사하다.(Ajax를 사용하였기 때문에, 페이지 리플레시가 없다.)
웹 기반의 유명한 툴로 phpMyAdmin이 있다.
phpMyAdmin은 마치 맥가이버 칼 처럼 테이블을 디자인하고, 쿼리를 실행하고, DB 사용자 관리를 하는 등 많은 기능들을 제공한다. 하지만, 프로세스 목록을 보는 등의 기능은 약간 부족한다.
만약 서드파티 툴(third-party tool)을 사용할 수 없는 환경이거나 혹은 서드파티 툴을 사용하고 싶지 않은 경우 MySQL 자체의 유틸리티인 mysqladmin을 통하여 MySQL을 모니터링할 수도 있다. 예를 들어 쿼리 캐시의 상태 변화를 보고 싶은 경우 다음의 명령을 내리면 된다.
$ mysqladmin extended -r -i 10 | grep Qcache
물론 innotop도 위의 기능을 수행할 수 있다. innotop의 V 모드를 보라. innotop을 실행할 수 없을 때 간편하게 실행시킬 수 있는 방법이다.
MySQL 서버를 모니터링하기 위한 툴
때로는 MySQL 서버에서 수행 중인 쿼리를 모니터링 하기 보다는 시스템의 성능적인 측면을 분석해야하는 경우도 있다. 이때는 일반적인 커맨드 라인 유틸리티를 이용하여 MySQL 서버가 사용하는 시스템 리소스를 모니터링 할 수도 있고,
Giuseppe Maxis의
"MySQL 리소스 소비량 측정" 스크립트를 사용할 수도 있다. 이 툴은 MySQL 서버의 프로세스 ID를 이용하여 프로세스에 관련된 것들을 재귀적으로 진찰하여 그 결과를 출력한다. 이에 대한 더 많은 정보는
오라일리 데이터베이스 블로그에 있는 Giuseppe의 기사를 읽어보기 바란다.
MySQL 포지 사이트는 일별 Mysql 관리와 프로그래밍 업무를 위한 팁, 트릭 및 소스 코드를 얻을 수 있는 훌륭한 곳이다. 예를 들어, 리플리케이션 속도를 측정하거나 네트워크 인터페이스를 통해 전송되는 쿼리를 캡쳐하는 쿼리 프로파일러 등의 도움을 얻을 수 있다.
또 다른 훌륭한 자원으로는
mysqlreport가 있다. mysqlreport는 디자인이 잘 된 프로그램으로서 MySQL 상태 정보를 지식으로 변환할 수 있다. mysqlreport는 관련된 변수를 출력하고, MySQL 사용자를 위해 의미있는 정렬을 할 수도 있다. 서버의 문제를 미리 알 수 없을 경우, 문제를 해결할 때 이 툴을 사용하는게 좋고 생각한다. 예를 들어 누군가가 나에게 CPU 점유율이 100%인 MySQL 서버의 부하를 줄여달라고 이야기할 때, 내가 처음으로 하는 행동은 mysqlreport를 실행하는 일이다. 고객과 10분 이야기 하는 것보다 mysqlreport의 결과를 한번 보는 것으로 더 많은 정보를 얻을 수 있다. 부하를 줄이기 위해서 내가 어디를 봐야 하는지 즉시 알 수 있다. Key Read 비율이 높은 경우와 Index Scan 비율이 높은 경우 Key Buffer가 너무 작은 것과 인덱스가 너무 큰 것을 찾아 볼 수 있다. 직관적으로 SHOW STATUS 결과만을 보는 것은 시간이 많이 걸릴 수 있다.
mysqlreport 사이트에서는 설치 방법과 사용 방법이 모두 적혀 있다. 더불어 실제의 예를 들어 mysqlreport의 결과를 어떻게 해석해야 하는지에 대한 훌륭한 튜토리얼도 볼 수 있다. 그 중 일부는 MySQL 내부를 심도있게 다루며, MySQL 개발자들에게 추천할 만 하다.
그 다음으로 보편적인 업무는 MySQL 서버 모니터링을 자동화하여 MySQL이 살아있는지 자동으로 알도록 하는 일이다. 이러한 프로그램은 직접 개발할 수도 있으며, 바로 사용할 수 있는 툴을 구할 수도 있다.
MySQL 온라인 투표에 따르면,
Nagios가 이러한 일을 위한 가장 인기 있는 툴이었다. 또한
mon을 위한
Watchdog MySQL 모니터 플러그인도 있다. 나의 회사에서는 자체 개발한 툴을 사용 중이지만, 조만간 Nagios를 사용할 예정이다.
유용하지 않다고 판단된 툴들
Quicomm MySQL 모니터 툴은 phpMyAdmin과 마찬가지로 웹 기반의 툴인데, phpMyAdmin에 비해서 적은 기능을 제공한다.
또다른 웹 기반 툴로서 "MySQL 시스템 옵티마이저"라고 공언하는
MySysop이 있지만, MySQL 시스템을 최적화하는데 별다른 정보를 주지 않는다. MySysop의 결과는 큰 신뢰를 할 수 없어서 다른 방법으로도 같은 결과가 나오는지 조사를 해야 했다. MySysop을 설치하고 실행할 수 있을 때까지, 필자는 mysqlreport를 오래 동안 사용하고 있을 것이다.
마지막으로 필자는
구글 mMaim(MySQL Monitoring And Investigation Module)을 사용하는 방벙에 대해 이해할 수가 없었다. 구글 mMaim은 구글의 오픈 소스 코드 공헌의 일부분으로 구글 내부적으로는 mMaim을 사용하는 것으로 보인다. 그러나 메일링 리스트에서 보듯이 mMaim의 사용법을 알 길이 없다. 또한 메일링 리스트에서는 구글이 단순히 mMaim을 발표하기 위해서 그 코드를 공개했다는 것을 알 수 있다. 이러한 행위를 분석하는 동안 나는 mMaim 코드를 어떻게 사용해야 하는지 전혀 알 수 없었다.
결론
당신의 업무에서 사용할 목적으로 툴을 찾는다면, 필자는 innotop과 mysqlreport 그리고 커맨드 라인 명령들을 추천하고자 한다. 필자는 mytop을 사용하곤 했지만, innotop이 트랜잭션에 관련된 정보를 포함한, 더 많은 정보를 제공하기 때문에 요즘은 innotop을 사용 중이다. MySQL 서버에 무엇이 잘못되어 있는지 분석하고자 할 때, MySQL 서버 상태에 관련된 mysqlreport의 스냅샷 결과를 일치시키는 것은 불가능했다. MySQL 리소스 사용과 성능에 관한 것을 알고 싶을 때는 일반 커맨드 라인 유틸리티를 이용한 (Giuseppe Maxia의 것과 같은) 스크립트를 증대시켰다.
본 기사에 언급되지 않은 다른 툴들도 있지만 본 글에 소개된 툴들은 모두 공짜이고 오픈 소스이며 당신이 찾을 수 있는 다른 툴들이 가질 수 있는 거의 모든 기능을 가지고 있다.
관련 링크
1.
innotop - MySQL과 InnoDB 모니터링에 관련된 강력한 툴
2.
mysqlreport - 쉽게 바로 사용할 수 있는 MySQL 상태 레포트를 생성하는 툴
3.
MySQL Forge - MySQL 사용자들끼리 코드를 공유하는 커뮤니티
4.
mytop - MySQL 쿼리와 프로세스를 모니터링하는 전통적인 툴
Boron Schwartz는 자유로운 오픈 소스 소프트웨어를 믿고 또한 사용하는 소프트웨어 엔지니어 겸 컨설턴트이다.