#mysqlpcap
watch sql base libpcap
我们经常的在 MySQL 里不停的执行show processlist
想了解最近执行的 sql 语句状况,可常常拿不到我们想要的结果。
mysqlpcap 是一个基于 pcap 用于观察 sql 语句执行情况的工具。它能够了解到经过某个 MySQL 实例的 sql 语句以及 sql 影响的行数,还有 sql 的响应时间。
新增功能,目前已经支持 prepare statement。
##compile
make
##use
sudo ./mysqlpcap
sudo ./mysqlpcap -u root,user1
sudo ./mysqlpcap -n user1,user2
sudo ./mysqlpcap -l 1.1.1.1
sudo ./mysqlpcap -p 3001
timestamp source ip latency(us) rows user db sql
-------------- --------------- ---------- ------- ---- -- ---
17:32:27:461220 10.3.254.100:52282 143 1 root percona select @@version_comment limit 1
17:32:29:306711 10.3.254.100:52282 423 3 root percona show tables
17:32:38:135849 10.3.254.100:52282 307 16 root percona select * from favorite_food
17:32:46:836896 10.3.254.100:52282 102 0 root percona start transaction
17:33:1:642846 10.3.254.100:52282 433 1 root percona insert into favorite_food values(4, 'update')
17:33:11:602343 10.3.254.100:52282 553 0 root percona commit
在一些环境下, 可以通过 ip:port 的方式统计MySQL中单个线程事务(或非事务语句)的执行情况, 该特性可以用来判断应用程序是否正常启用关闭事务.
##output format
timestamp sql latency(us) rows
--------- --- ----------- ---
9:22:33:815114 select 1 291 1
9:22:39:167115 select * from d limit 20000 229 -2
9:22:39:167115 select * from d limit 20000 571 -2
9:22:39:167115 select * from d limit 20000 707 -2
9:22:39:167115 select * from d limit 20000 3508 -2
9:22:39:167115 select * from d limit 20000 3628 -2
9:22:39:167115 select * from d limit 20000 3675 20000
9:22:45:227112 desc d 47891 3
9:22:54:678621 insert into d values(1,2,3), (3,4,5) 33719 2
-
timestamp MySQL服务器接收到 sql 的时间。
-
sql
-
latency(us) 响应时间,MySQL服务器返回结果集的时间与timestamp的差值。由于结果集可能分多个
tcp packet
发送过来。 所以存在多条记录。 -
对于
select
语句则是结果集的行数,对于其它则是影响的行数。结果集超过一个tcp packet
的大小,则行数显示在最后一个tcp packet
对应的记录上。 上面的例子,select * from d limit 20000 返回的结果集由 6 个tcp packet
组成,所以有 6 行记录,前5行的 rows 为 -2 ,最后一行的 20000 才是真是的返回行数。 latency显示的每个tcp packet 的响应时间。 -
第五列是用户
-
如果是 prepare statement 则值会显示在 sql 的后面,用方括号包围住。
sql 在前面,方括号里为具体的值。
- keyword filter
- output threading
- pf_ring
- multi stmt
- support shrink hash entry(free session->sql && session->size)
##changelog
- user
- latency
- rows
- sql
- log
- prepare
- multi session big resultset
- support bond netcard, fix libpcap bug
- support show src ip (-z)
- support drop packet and chao order packet
- ignore remote MySQL port connect me random port, data, for example: replication,
- ignore me connect rmeote MySQL data
- support specify detail ip (-l)
- support bond card repeat packet(same seq)
- support user level sql capture, now can use parameter -u -n
- support use signal SIGUSR1 inquire drop percentage
- support reload machine address
- support delete idle connection
##version 0.01