기본 콘텐츠로 건너뛰기

10월, 2015의 게시물 표시

MySQL 쿼리 실시간 모니터링 및 저장하기

http://coffeenix.net/board_view.php?bd_code=1660 MySQL서버는 log 옵션(my.cnf에서 log=파일명. slow query는 log-slow-queries=파일명)을 통해서 실행된 DB 쿼리를 모두 파일로 저장할 수가 있다. 그러나 DB 서버에서 작은 사이트가 아니고선 엄청난 양의 실시간 쿼리를 모두 쌓는다는 것은 힘들다. DB 운영도중에 잠시동안 쿼리 로그를 쌓겠다고 MySQL 재실행할 수도 없는 노릇이다. MySQL 5.1에서는 재실행없이 로그를 쌓을 것인지 안할 것인지를 결정할 수 있지만, 이부분은 뒤에서 설명하기로 하고, DB 쿼리를 실시간으로 살펴보는 몇가지 방법을 소개한다. 1. 쿼리를 실시간으로 스니핑하기 Poor man’s query logging (Posted by Maciej Dobrzanski) (  http://www.mysqlperformanceblog.com/2008/11/07/poor-mans-query-logging/  )에서 tcpdump와 perl의 정규표현으로 실시간 쿼리를 살펴보는 괜찮은 방법을 소개하고 있다. * 위 블로그에 올라온 간단한 명령 # tcpdump -i eth0 -s 0 -l -w - dst port 3306 | strings | perl -e ' while(<>) { chomp; next if /^[^ ]+[ ]*$/;    if(/^(SELECT|UPDATE|DELETE|INSERT|SET|COMMIT|ROLLBACK|CREATE|DROP|ALTER)/i) {       if (defined $q) { print “$q\n”; }       $q=$_;    } else {       $_ =~ s/^[ \t]+//; $q.=” $_”;    } }’ 위 명령을 활용하여 SELECT/UPDATE/DELETE/INSERT 등을 highlight 하도록 작성했다. highlight 에 대한 자세한 ...