1*387f9dfdSAndroid Build Coastguard WorkerDemonstrations of dbstat, the Linux eBPF/bcc version. 2*387f9dfdSAndroid Build Coastguard Worker 3*387f9dfdSAndroid Build Coastguard Worker 4*387f9dfdSAndroid Build Coastguard Workerdbstat traces queries performed by a MySQL or PostgreSQL database process, and 5*387f9dfdSAndroid Build Coastguard Workerdisplays a histogram of query latencies. For example: 6*387f9dfdSAndroid Build Coastguard Worker 7*387f9dfdSAndroid Build Coastguard Worker# dbstat mysql 8*387f9dfdSAndroid Build Coastguard WorkerTracing database queries for pids 25776 slower than 0 ms... 9*387f9dfdSAndroid Build Coastguard Worker query latency (ms) : count distribution 10*387f9dfdSAndroid Build Coastguard Worker 0 -> 1 : 990 |****************************************| 11*387f9dfdSAndroid Build Coastguard Worker 2 -> 3 : 7 | | 12*387f9dfdSAndroid Build Coastguard Worker 4 -> 7 : 0 | | 13*387f9dfdSAndroid Build Coastguard Worker 8 -> 15 : 0 | | 14*387f9dfdSAndroid Build Coastguard Worker 16 -> 31 : 0 | | 15*387f9dfdSAndroid Build Coastguard Worker 32 -> 63 : 0 | | 16*387f9dfdSAndroid Build Coastguard Worker 64 -> 127 : 0 | | 17*387f9dfdSAndroid Build Coastguard Worker 128 -> 255 : 0 | | 18*387f9dfdSAndroid Build Coastguard Worker 256 -> 511 : 0 | | 19*387f9dfdSAndroid Build Coastguard Worker 512 -> 1023 : 0 | | 20*387f9dfdSAndroid Build Coastguard Worker 1024 -> 2047 : 2 | | 21*387f9dfdSAndroid Build Coastguard Worker^C 22*387f9dfdSAndroid Build Coastguard Worker 23*387f9dfdSAndroid Build Coastguard WorkerIt's immediately evident that the vast majority of queries finish very quickly, 24*387f9dfdSAndroid Build Coastguard Workerin under 1ms, but there are some super-slow queries occasionally, in the 1-2 25*387f9dfdSAndroid Build Coastguard Workerseconds bucket. 26*387f9dfdSAndroid Build Coastguard Worker 27*387f9dfdSAndroid Build Coastguard WorkerWe can filter out the shorter queries with the -m switch: 28*387f9dfdSAndroid Build Coastguard Worker 29*387f9dfdSAndroid Build Coastguard Worker# dbstat mysql -m 1000 30*387f9dfdSAndroid Build Coastguard WorkerTracing database queries for pids 25776 slower than 1000 ms... 31*387f9dfdSAndroid Build Coastguard Worker query latency (ms) : count distribution 32*387f9dfdSAndroid Build Coastguard Worker 0 -> 1 : 0 | | 33*387f9dfdSAndroid Build Coastguard Worker 2 -> 3 : 0 | | 34*387f9dfdSAndroid Build Coastguard Worker 4 -> 7 : 0 | | 35*387f9dfdSAndroid Build Coastguard Worker 8 -> 15 : 0 | | 36*387f9dfdSAndroid Build Coastguard Worker 16 -> 31 : 0 | | 37*387f9dfdSAndroid Build Coastguard Worker 32 -> 63 : 0 | | 38*387f9dfdSAndroid Build Coastguard Worker 64 -> 127 : 0 | | 39*387f9dfdSAndroid Build Coastguard Worker 128 -> 255 : 0 | | 40*387f9dfdSAndroid Build Coastguard Worker 256 -> 511 : 0 | | 41*387f9dfdSAndroid Build Coastguard Worker 512 -> 1023 : 0 | | 42*387f9dfdSAndroid Build Coastguard Worker 1024 -> 2047 : 8 |****************************************| 43*387f9dfdSAndroid Build Coastguard Worker^C 44*387f9dfdSAndroid Build Coastguard Worker 45*387f9dfdSAndroid Build Coastguard WorkerBy default, dbstat will try to detect mysqld and postgres processes, but if 46*387f9dfdSAndroid Build Coastguard Workernecessary, you can specify the process ids with the -p switch. Here, the -i 47*387f9dfdSAndroid Build Coastguard Workerswitch is also used to request histograms at 3 second intervals: 48*387f9dfdSAndroid Build Coastguard Worker 49*387f9dfdSAndroid Build Coastguard Worker# dbstat mysql -p $(pidof mysql) -i 3 50*387f9dfdSAndroid Build Coastguard WorkerTracing database queries for pids 25776 slower than 0 ms... 51*387f9dfdSAndroid Build Coastguard Worker[06:14:36] 52*387f9dfdSAndroid Build Coastguard Worker query latency (ms) : count distribution 53*387f9dfdSAndroid Build Coastguard Worker 0 -> 1 : 758 |****************************************| 54*387f9dfdSAndroid Build Coastguard Worker 2 -> 3 : 1 | | 55*387f9dfdSAndroid Build Coastguard Worker 4 -> 7 : 0 | | 56*387f9dfdSAndroid Build Coastguard Worker 8 -> 15 : 0 | | 57*387f9dfdSAndroid Build Coastguard Worker 16 -> 31 : 0 | | 58*387f9dfdSAndroid Build Coastguard Worker 32 -> 63 : 0 | | 59*387f9dfdSAndroid Build Coastguard Worker 64 -> 127 : 0 | | 60*387f9dfdSAndroid Build Coastguard Worker 128 -> 255 : 0 | | 61*387f9dfdSAndroid Build Coastguard Worker 256 -> 511 : 0 | | 62*387f9dfdSAndroid Build Coastguard Worker 512 -> 1023 : 0 | | 63*387f9dfdSAndroid Build Coastguard Worker 1024 -> 2047 : 1 | | 64*387f9dfdSAndroid Build Coastguard Worker 65*387f9dfdSAndroid Build Coastguard Worker[06:14:39] 66*387f9dfdSAndroid Build Coastguard Worker query latency (ms) : count distribution 67*387f9dfdSAndroid Build Coastguard Worker 0 -> 1 : 436 |****************************************| 68*387f9dfdSAndroid Build Coastguard Worker 2 -> 3 : 2 | | 69*387f9dfdSAndroid Build Coastguard Worker 4 -> 7 : 0 | | 70*387f9dfdSAndroid Build Coastguard Worker 8 -> 15 : 0 | | 71*387f9dfdSAndroid Build Coastguard Worker 16 -> 31 : 0 | | 72*387f9dfdSAndroid Build Coastguard Worker 32 -> 63 : 0 | | 73*387f9dfdSAndroid Build Coastguard Worker 64 -> 127 : 0 | | 74*387f9dfdSAndroid Build Coastguard Worker 128 -> 255 : 0 | | 75*387f9dfdSAndroid Build Coastguard Worker 256 -> 511 : 0 | | 76*387f9dfdSAndroid Build Coastguard Worker 512 -> 1023 : 0 | | 77*387f9dfdSAndroid Build Coastguard Worker 1024 -> 2047 : 1 | | 78*387f9dfdSAndroid Build Coastguard Worker 79*387f9dfdSAndroid Build Coastguard Worker[06:14:42] 80*387f9dfdSAndroid Build Coastguard Worker query latency (ms) : count distribution 81*387f9dfdSAndroid Build Coastguard Worker 0 -> 1 : 399 |****************************************| 82*387f9dfdSAndroid Build Coastguard Worker 2 -> 3 : 0 | | 83*387f9dfdSAndroid Build Coastguard Worker 4 -> 7 : 0 | | 84*387f9dfdSAndroid Build Coastguard Worker 8 -> 15 : 0 | | 85*387f9dfdSAndroid Build Coastguard Worker 16 -> 31 : 0 | | 86*387f9dfdSAndroid Build Coastguard Worker 32 -> 63 : 0 | | 87*387f9dfdSAndroid Build Coastguard Worker 64 -> 127 : 0 | | 88*387f9dfdSAndroid Build Coastguard Worker 128 -> 255 : 0 | | 89*387f9dfdSAndroid Build Coastguard Worker 256 -> 511 : 0 | | 90*387f9dfdSAndroid Build Coastguard Worker 512 -> 1023 : 0 | | 91*387f9dfdSAndroid Build Coastguard Worker 1024 -> 2047 : 1 | | 92*387f9dfdSAndroid Build Coastguard Worker^C 93*387f9dfdSAndroid Build Coastguard Worker 94*387f9dfdSAndroid Build Coastguard Worker 95*387f9dfdSAndroid Build Coastguard WorkerUSAGE: 96*387f9dfdSAndroid Build Coastguard Worker# dbstat -h 97*387f9dfdSAndroid Build Coastguard Workerusage: dbstat.py [-h] [-v] [-p [PID [PID ...]]] [-m THRESHOLD] [-u] 98*387f9dfdSAndroid Build Coastguard Worker [-i INTERVAL] 99*387f9dfdSAndroid Build Coastguard Worker {mysql,postgres} 100*387f9dfdSAndroid Build Coastguard Worker 101*387f9dfdSAndroid Build Coastguard Workerpositional arguments: 102*387f9dfdSAndroid Build Coastguard Worker {mysql,postgres} the database engine to use 103*387f9dfdSAndroid Build Coastguard Worker 104*387f9dfdSAndroid Build Coastguard Workeroptional arguments: 105*387f9dfdSAndroid Build Coastguard Worker -h, --help show this help message and exit 106*387f9dfdSAndroid Build Coastguard Worker -v, --verbose print the BPF program 107*387f9dfdSAndroid Build Coastguard Worker -p [PID [PID ...]], --pid [PID [PID ...]] 108*387f9dfdSAndroid Build Coastguard Worker the pid(s) to trace 109*387f9dfdSAndroid Build Coastguard Worker -m THRESHOLD, --threshold THRESHOLD 110*387f9dfdSAndroid Build Coastguard Worker trace queries slower than this threshold (ms) 111*387f9dfdSAndroid Build Coastguard Worker -u, --microseconds display query latencies in microseconds (default: 112*387f9dfdSAndroid Build Coastguard Worker milliseconds) 113*387f9dfdSAndroid Build Coastguard Worker -i INTERVAL, --interval INTERVAL 114*387f9dfdSAndroid Build Coastguard Worker print summary at this interval (seconds) 115*387f9dfdSAndroid Build Coastguard Worker 116*387f9dfdSAndroid Build Coastguard Worker dbstat postgres # display a histogram of PostgreSQL query latencies 117*387f9dfdSAndroid Build Coastguard Worker dbstat mysql -v # display MySQL latencies and print the BPF program 118*387f9dfdSAndroid Build Coastguard Worker dbstat mysql -u # display query latencies in microseconds (default: ms) 119*387f9dfdSAndroid Build Coastguard Worker dbstat mysql -m 5 # trace only queries slower than 5ms 120*387f9dfdSAndroid Build Coastguard Worker dbstat mysql -p 408 # trace queries in a specific process 121