利用tcpdump抓取sql语句

看到很多朋友问MySQL的性能分析器 
因为MySQL在这方面做得比较差,也可能我不知道 
没有Microsoft的SQL Profiler,也没有Oracle的Audit和AWR 
所以我们很难得到一些SQL语句的统计,这也给我们调优带来了困难 
更难的是对MySQL的追踪 
以前写过个,不过在看过mysql网站上的一个bash脚本后,觉得自己的那个就是小巫见大巫了 
现拿来分享给大家,很简单 
# 取得网卡eth0上的所有操作 
time tcpdump -i eth0 -s 1500 -w 20060427-db-traffic-01.dmp  
# 这个可以指定特定IP请求的操作,可用于追踪 
time tcpdump -i eth0 -s 1500 src host 192.168.2.10 -w 20060427-db-traffic-01.dmp  
# 这个是格式化输出你要结果 
strings 20060427-db-traffic-01.dmp | grep -i 'select' | awk '{printf("%s %s %s %s\n", $1,$2,$3, $4);}'| sort| uniq -c | awk '{printf("ld %s %s %s %s\n", $1,$2,$3,$4,$5);}'|sort 

得到的结果: 
cpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 1500 bytes 
12000 packets captured 
12000 packets received by filter 
0 packets dropped by kernel 
real 0m8.666s 
user 0m0.006s 
sys 0m0.016s 
-------- 
000001 select last_insert_id() from system_parameter 
... 
000122 select count(1) from visit_tracking 
000122 select visitor_id 
000800 select web_page_id , web_page_type_id 
000800 select web_page_type_id , name 
003200 select count(1) from hit_count 
006400 select pd.parameter_value, 
006400 select rp.user_id , rp.update_time  

可以看到执行各种select的次数,当然改一下就可以看insert,update这种操作次数 
配合log-slow-queries,你可以进一步的优化
转自chinaunix   作者:qlks

你可能感兴趣的:(sql,tcpdump,抓取)