|
커피향이 나는 *NIX
커피닉스
시스템/네트웍/보안을 다루는 곳
|
|
|
|
| 이전 주제 보기 :: 다음 주제 보기 |
| 글쓴이 |
메시지 |
jjun
가입: 2009년 12월 10일 올린 글: 8
|
올려짐: 2010.4.26 월, 11:55 am 주제: tcpdump로 MySQL 쿼리 확인 |
|
|
트래픽이 폭주하는날 DB에서 어떤 쿼리가 실행되고 있는지,
MySQL replication 환경에서 쿼리가 구분되어 실행되는지 궁금해서 찾아본 자료입니다.
slow query 로그는 지정된 시간보다 느리게 되는 것만 보입니다.
| 인용: | | general log도 설정도 있는 것 같은데, DB서버 재시작이 필요하므로.. |
다른 방법으로는 MySQL Proxy라는 것으로 볼 수 도 있지만,
tcpdump로 네트워크 트래픽에서도 찾아볼 수 있다고 합니다.
출처 : http://jetpackweb.com/blog/2009/09/16/unobstrusive-viewing-of-mysql-queries-with-tcpdump/
아래에서 -i lo 만 실제 통신에 사용되는 장치명으로 변경하면 됩니다.
보통 -i eth0 입니다.
| 코드: |
tcpdump -i lo -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.=" $_";
}
}'
|
> tcpdump.out 과 같이 리다이렉션을 추가하여 파일로 저장해서 분석할 수 도 있습니다.
다만 시간이 기록이 안되는 것이 아쉽습니다.
tcpdump 옵션을 추가할면 될것도 같는데 확인해봐야겠습니다.
또한 사용되는 perl 구문에 대해서도 분석이 필요합니다.
* 실행된 select/update/insert/delete 쿼리 개수 확인용
| 인용: |
cat tcpdump.out | grep -vi "set" | awk '{ print $1 }' | sort | uniq -c | sort -r | more
------
72556 select
2475 SELECT
39 insert
26 delete
7 INSERT
|
* 쿼리가 실행된 tables과 쿼리 갯수 확인용
| 인용: |
cat tcpdump.out | grep -vi "set" | awk -Ffrom '{ print $2 }' | awk '{ print $1}' | sort | uniq -c | sort -r | more
------
205915 테이블명1
60062 테이블명2
43146 테이블명3 |
나중에 별도로 통계용으로 쓰기 위해서는 다음과 같이 사용해도 된다고 합니다.
| 코드: |
tcpdump -i lo port 3306 -s 65535 -x -n -q -tttt> tcpdump.out
|
이렇게 저장된 tcpdump.out은 Maatkit 이라는 MySQL toolkit에 포함된 mk-query-digest 명령의 -type=tcpdump 옵션을 이용해서 확인이 가능하다고 합니다.
참고 : http://www.mysqlperformanceblog.com/2009/07/01/gathering-queries-from-a-server-with-maatkit-and-tcpdump/
jjun 가 2010.4.27 화, 12:54 pm에 수정함, 총 1 번 수정됨 |
|
| 위로 |
|
 |
truefeel 카페 관리자
가입: 2003년 7월 24일 올린 글: 1277 위치: 대한민국
|
올려짐: 2010.4.27 화, 8:47 am 주제: tcpdump로 MySQL 쿼리 확인 (추가 자료) |
|
|
2008년에 써둔 'MySQL 쿼리 실시간 모니터링 및 저장하기'도 참고하시기 바랍니다.
다음과 같은 내용이 있습니다.
1. tcpdump로 MySQL쿼리를 스니핑할 때, highlight하는 방법 (이 부분은 jjun님 쓰신 글과 핵심은 같음)
2. 스니핑할 때, 특정 쿼리문만 찾는 방법
3. php에서 MySQL 실행쿼리를 텍스트(error log파일)로 저장하는 법
4. MySQL 5.1에서 실행 쿼리 로그를 저장하는 방법 |
|
| 위로 |
|
 |
|
|
새로운 주제를 올릴 수 있습니다 답글을 올릴 수 있습니다 주제를 수정할 수 없습니다 올린 글을 삭제할 수 없습니다 투표를 할 수 없습니다
|
Powered by phpBB © 2001, 2005 phpBB Group
|