PATH:
usr
/
bin
#!/usr/bin/perl # Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved. # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU Library General Public # License as published by the Free Software Foundation; version 2 # of the License. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # Library General Public License for more details. # # You should have received a copy of the GNU Library General Public # License along with this library; if not, write to the Free # Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, # MA 02110-1335 USA # mysqldumpslow - parse and summarize the MySQL slow query log # Original version by Tim Bunce, sometime in 2000. # Further changes by Tim Bunce, 8th March 2001. # Handling of strings with \ and double '' by Monty 11 Aug 2001. use strict; use Getopt::Long; # t=time, l=lock time, r=rows, a=rows affected # at, al, ar and aa are the corresponding averages my %opt = ( s => 'at', h => '*', ); GetOptions(\%opt, 'v|verbose+',# verbose 'help+', # write usage info 'd|debug+', # debug 's=s', # what to sort by (aa, ae, al, ar, at, a, c, e, l, r, t) 'r!', # reverse the sort order (largest last instead of first) 't=i', # just show the top n queries 'a!', # don't abstract all numbers to N and strings to 'S' 'n=i', # abstract numbers with at least n digits within names 'g=s', # grep: only consider stmts that include this string 'h=s', # hostname/basename of db server for *-slow.log filename (can be wildcard) 'i=s', # name of server instance (if using mysql.server startup script) 'l!', # don't subtract lock time from total time ) or usage("bad option"); $opt{'help'} and usage(); unless (@ARGV) { my $defaults = `my_print_defaults --mysqld`; my $datadir = ($defaults =~ m/--datadir=(.*)/g)[-1]; if (!$datadir or $opt{i}) { # determine the datadir from the instances section of /etc/my.cnf, if any my $instances = `my_print_defaults instances`; die "Can't determine datadir from 'my_print_defaults instances' output: $defaults" unless $instances; my @instances = ($instances =~ m/^--(\w+)-/mg); die "No -i 'instance_name' specified to select among known instances: @instances.\n" unless $opt{i}; die "Instance '$opt{i}' is unknown (known instances: @instances)\n" unless grep { $_ eq $opt{i} } @instances; $datadir = ($instances =~ m/--$opt{i}-datadir=(.*)/g)[-1] or die "Can't determine --$opt{i}-datadir from 'my_print_defaults instances' output: $instances"; warn "datadir=$datadir\n" if $opt{v}; } my $slowlog = ($defaults =~ m/--log[-_]slow[-_]queries=(.*)/g)[-1]; if (!$slowlog) { $slowlog = ($defaults =~ m/--slow[-_]query[-_]log[-_]file=(.*)/g)[-1]; } if ( $slowlog ) { @ARGV = ($slowlog); die "Can't find '$slowlog'\n" unless @ARGV; } else { if (!$opt{h}) { $opt{h}= ($defaults =~ m/--log[-_]basename=(.*)/g)[-1]; } @ARGV = <$datadir/$opt{h}-slow.log>; die "Can't find '$datadir/$opt{h}-slow.log'\n" unless @ARGV; } } warn "\nReading mysql slow query log from @ARGV\n"; my @pending; my %stmt; $/ = ";\n#"; # read entire statements using paragraph mode while ( defined($_ = shift @pending) or defined($_ = <>) ) { warn "[[$_]]\n" if $opt{d}; # show raw paragraph being read my @chunks = split /^\/.*Version.*started with[\000-\377]*?Time.*Id.*Command.*Argument.*\n/m; if (@chunks > 1) { unshift @pending, map { length($_) ? $_ : () } @chunks; warn "<<".join(">>\n<<",@chunks).">>" if $opt{d}; next; } s/^#? Time: \d{6}\s+\d+:\d+:\d+.*\n//; my ($user,$host) = s/^#? User\@Host:\s+(\S+)\s+\@\s+(\S+).*\n// ? ($1,$2) : ('',''); s/^# Thread_id: [0-9]+\s+Schema: .*\s+QC_hit:.*[^\n]+\n//; s/^# Query_time: ([0-9.]+)\s+Lock_time: ([0-9.]+)\s+Rows_sent: ([0-9.]+)\s+Rows_examined: ([0-9.]+).*\n//; my ($t, $l, $r, $e) = ($1, $2, $3, $4); s/^# Rows_affected: ([0-9.]+).*\n//; my ($a) = ($1); $t -= $l unless $opt{l}; # remove fluff that mysqld writes to log when it (re)starts: s!^/.*Version.*started with:.*\n!!mg; s!^Tcp port: \d+ Unix socket: \S+\n!!mg; s!^Time.*Id.*Command.*Argument.*\n!!mg; # Remove optimizer info s!^# QC_Hit: \S+\s+Full_scan: \S+\s+Full_join: \S+\s+Tmp_table: \S+\s+Tmp_table_on_disk: \S+[^\n]+\n!!mg; s!^# Filesort: \S+\s+Filesort_on_disk: \S+[^\n]+\n!!mg; s!^# Full_scan: \S+\s+Full_join: \S+[^\n]+\n!!mg; s/^use \w+;\n//; # not consistently added s/^SET timestamp=\d+;\n//; s/^[ ]*\n//mg; # delete blank lines s/^[ ]*/ /mg; # normalize leading whitespace s/\s*;\s*(#\s*)?$//; # remove trailing semicolon(+newline-hash) next if $opt{g} and !m/$opt{g}/io; unless ($opt{a}) { s/\b\d+\b/N/g; s/\b0x[0-9A-Fa-f]+\b/N/g; s/''/'S'/g; s/""/"S"/g; s/(\\')//g; s/(\\")//g; s/'[^']+'/'S'/g; s/"[^"]+"/"S"/g; # -n=8: turn log_20001231 into log_NNNNNNNN s/([a-z_]+)(\d{$opt{n},})/$1.('N' x length($2))/ieg if $opt{n}; # abbreviate massive "in (...)" statements and similar s!(([NS],){100,})!sprintf("$2,{repeated %d times}",length($1)/2)!eg; } my $s = $stmt{$_} ||= { users=>{}, hosts=>{} }; $s->{c} += 1; $s->{t} += $t; $s->{l} += $l; $s->{r} += $r; $s->{e} += $e; $s->{a} += $a; $s->{users}->{$user}++ if $user; $s->{hosts}->{$host}++ if $host; warn "{{$_}}\n\n" if $opt{d}; # show processed statement string } foreach (keys %stmt) { my $v = $stmt{$_} || die; my ($c, $t, $l, $r, $e, $a) = @{ $v }{qw(c t l r e a)}; $v->{at} = $t / $c; $v->{al} = $l / $c; $v->{ar} = $r / $c; $v->{ae} = $e / $c; $v->{aa} = $a / $c; } my @sorted = sort { $stmt{$b}->{$opt{s}} <=> $stmt{$a}->{$opt{s}} } keys %stmt; @sorted = @sorted[0 .. $opt{t}-1] if $opt{t}; @sorted = reverse @sorted if $opt{r}; foreach (@sorted) { my $v = $stmt{$_} || die; my ($c, $t, $at, $l, $al, $r, $ar, $e, $ae, $a, $aa) = @{ $v }{qw(c t at l al r ar e ae a aa)}; my @users = keys %{$v->{users}}; my $user = (@users==1) ? $users[0] : sprintf "%dusers",scalar @users; my @hosts = keys %{$v->{hosts}}; my $host = (@hosts==1) ? $hosts[0] : sprintf "%dhosts",scalar @hosts; printf "Count: %d Time=%.2fs (%ds) Lock=%.2fs (%ds) Rows_sent=%.1f (%d), Rows_examined=%.1f (%d), Rows_affected=%.1f (%d), $user\@$host\n%s\n\n", $c, $at,$t, $al,$l, $ar,$r, $ae, $e, $aa, $a, $_; } sub usage { my $str= shift; my $text= <<HERE; Usage: mysqldumpslow [ OPTS... ] [ LOGS... ] Parse and summarize the MySQL slow query log. Options are --verbose verbose --debug debug --help write this text to standard output -v verbose -d debug -s ORDER what to sort by (aa, ae, al, ar, at, a, c, e, l, r, t), 'at' is default aa: average rows affected ae: aggregated rows examined al: average lock time ar: average rows sent at: average query time a: rows affected c: count e: rows examined l: lock time r: rows sent t: query time -r reverse the sort order (largest last instead of first) -t NUM just show the top n queries -a don't abstract all numbers to N and strings to 'S' -n NUM abstract numbers with at least n digits within names -g PATTERN grep: only consider stmts that include this string -h HOSTNAME hostname of db server for *-slow.log filename (can be wildcard), default is '*', i.e. match all -i NAME name of server instance (if using mysql.server startup script) -l don't subtract lock time from total time HERE if ($str) { print STDERR "ERROR: $str\n\n"; print STDERR $text; exit 1; } else { print $text; exit 0; } }
[+]
..
[-] fc-cat
[open]
[-] mariadb-access
[open]
[-] pre-grohtml
[open]
[-] echo
[open]
[-] x86_64-redhat-linux-gcc
[open]
[-] composite
[open]
[-] autoreconf
[open]
[-] size
[open]
[-] mkfifo
[open]
[-] libnetcfg
[open]
[-] aclocal-1.16
[open]
[-] diff3
[open]
[-] tar
[open]
[-] precat
[open]
[-] du
[open]
[-] tclsh
[open]
[-] touch
[open]
[-] fc-match
[open]
[-] replace
[open]
[-] gprof
[open]
[-] post-grohtml
[open]
[-] shuf
[open]
[-] zsoelim
[open]
[-] paste
[open]
[-] yes
[open]
[-] chmod
[open]
[-] file
[open]
[-] sum
[open]
[-] more
[open]
[-] pango-view
[open]
[-] gzip
[open]
[-] ldd
[open]
[-] mysqlimport
[open]
[-] montage
[open]
[-] b2sum
[open]
[-] renice
[open]
[-] cal
[open]
[-] perlml
[open]
[-] strip
[open]
[-] dig
[open]
[-] fc-cache
[open]
[-] fold
[open]
[-] scl_source
[open]
[-] rvim
[open]
[-] znew
[open]
[-] git-shell
[open]
[-] gtroff
[open]
[-] fmt
[open]
[-] xsubpp
[open]
[-] passwd
[open]
[-] mailx
[open]
[-] patch
[open]
[-] nm
[open]
[-] isosize
[open]
[-] strings
[open]
[-] gtbl
[open]
[-] gem
[open]
[-] aclocal
[open]
[-] timeout
[open]
[-] python2.7
[open]
[-] h2ph
[open]
[-] curl
[open]
[-] sync
[open]
[-] sftp
[open]
[-] tac
[open]
[-] enchant
[open]
[-] ps2pdf13
[open]
[-] basenc
[open]
[-] vi
[open]
[-] mariadb-find-rows
[open]
[-] flex
[open]
[-] gcc-nm
[open]
[-] mysql_find_rows
[open]
[-] ifnames
[open]
[-] dircolors
[open]
[-] soelim
[open]
[-] ssh-keygen
[open]
[-] xmlwf
[open]
[-] tclsh8.6
[open]
[-] gsnd
[open]
[-] autoconf
[open]
[-] m4
[open]
[-] whoami
[open]
[-] zipinfo
[open]
[-] truncate
[open]
[-] bzdiff
[open]
[-] stat
[open]
[-] head
[open]
[-] gmake
[open]
[-] awk
[open]
[-] ps2ps
[open]
[-] mysqlshow
[open]
[-] crontab.cagefs
[open]
[-] basename
[open]
[-] fc-pattern
[open]
[-] batch
[open]
[-] nroff
[open]
[-] stream
[open]
[-] bzgrep
[open]
[-] piconv
[open]
[-] rmdir
[open]
[-] hexdump
[open]
[-] bunzip2
[open]
[-] xxd
[open]
[-] catchsegv
[open]
[-] grotty
[open]
[-] bzcmp
[open]
[-] mariadb-admin
[open]
[-] sh
[open]
[-] bash
[open]
[-] mariadb-show
[open]
[-] xmllint
[open]
[-] autoupdate
[open]
[-] perl
[open]
[-] gm
[open]
[-] fc-validate
[open]
[-] vim
[open]
[-] pod2usage
[open]
[-] rview
[open]
[-] c++
[open]
[-] g++
[open]
[-] sed
[open]
[-] identify
[open]
[-] mysqldump
[open]
[-] tty
[open]
[-] ssh-agent
[open]
[-] icuinfo
[open]
[-] mesg
[open]
[-] realpath
[open]
[-] pango-segmentation
[open]
[-] ruby
[open]
[-] git-upload-archive
[open]
[-] sdiff
[open]
[-] bashbug-64
[open]
[-] col
[open]
[-] taskset
[open]
[-] zip
[open]
[-] login
[open]
[-] pwdx
[open]
[-] perlbug
[open]
[-] c99
[open]
[-] mogrify
[open]
[-] python
[open]
[-] grops
[open]
[-] cp
[open]
[-] atq
[open]
[-] kill
[open]
[-] mariadb-embedded
[open]
[-] hostid
[open]
[-] setterm
[open]
[-] gcc-ar
[open]
[-] host
[open]
[-] uptime
[open]
[-] as
[open]
[-] unzipsfx
[open]
[-] link
[open]
[-] rev
[open]
[-] od
[open]
[-] ssh-add
[open]
[-] unzip
[open]
[-] dnstap-read
[open]
[-] zforce
[open]
[-] word-list-compress
[open]
[-] rename
[open]
[-] dir
[open]
[-] split
[open]
[-] nsupdate
[open]
[-] sleep
[open]
[-] tr
[open]
[-] ipcrm
[open]
[-] ps2pdf
[open]
[-] arpaname
[open]
[-] unexpand
[open]
[-] objdump
[open]
[-] tset
[open]
[-] mariadb-secure-installation
[open]
[-] openssl
[open]
[-] mariadb-dump
[open]
[-] chcon
[open]
[-] ps2pdf12
[open]
[-] test
[open]
[-] automake-1.16
[open]
[-] pic
[open]
[-] tail
[open]
[-] mysqlbinlog
[open]
[-] gawk
[open]
[-] pkg-config
[open]
[-] ssh-copy-id
[open]
[-] cldetect
[open]
[-] tput
[open]
[-] tzselect
[open]
[-] column
[open]
[-] c++filt
[open]
[-] c89
[open]
[-] watch
[open]
[-] tmpwatch
[open]
[-] crontab
[open]
[-] ispell
[open]
[-] pathchk
[open]
[-] mcookie
[open]
[-] free
[open]
[-] reset
[open]
[-] fc-cache-64
[open]
[-] enchant-lsmod
[open]
[-] gneqn
[open]
[-] readlink
[open]
[-] gpgsplit
[open]
[-] ssh-keyscan
[open]
[-] zipgrep
[open]
[-] uapi
[open]
[-] ionice
[open]
[-] base64
[open]
[-] gnroff
[open]
[-] nproc
[open]
[-] logname
[open]
[-] icu-config-64
[open]
[-] nl
[open]
[-] lto-dump
[open]
[-] xsltproc
[open]
[-] whereis
[open]
[-] zcmp
[open]
[-] python3.9
[open]
[-] mytop
[open]
[-] localedef
[open]
[-] flock
[open]
[-] grep
[open]
[-] gunzip
[open]
[-] ping
[open]
[-] pl2pm
[open]
[-] geoiplookup
[open]
[-] stty
[open]
[-] dd
[open]
[-] bzmore
[open]
[-] locale
[open]
[-] gpgv
[open]
[-] mv
[open]
[-] ps2pdfwr
[open]
[-] objcopy
[open]
[-] animate
[open]
[-] namei
[open]
[-] utmpdump
[open]
[-] gpg-error
[open]
[-] my_print_defaults
[open]
[-] passenger
[open]
[-] ld
[open]
[-] x86_64-redhat-linux-c++
[open]
[-] nohup
[open]
[-] zless
[open]
[-] less
[open]
[-] mariadb-binlog
[open]
[-] dirname
[open]
[-] ipcs
[open]
[-] ul
[open]
[-] chgrp
[open]
[-] lesskey
[open]
[-] mariadb-tzinfo-to-sql
[open]
[-] zcat
[open]
[-] [
[open]
[-] unlink
[open]
[-] vimtutor
[open]
[-] msql2mysql
[open]
[-] toe
[open]
[-] tabs
[open]
[-] ptx
[open]
[-] autoheader
[open]
[-] selectorctl
[open]
[-] lex
[open]
[-] h2xs
[open]
[-] expr
[open]
[-] run-with-aspell
[open]
[-] freetype-config
[open]
[-] gencat
[open]
[-] gpg
[open]
[-] gcov-dump
[open]
[-] readelf
[open]
[-] ld.bfd
[open]
[-] GET
[open]
[-] scl_enabled
[open]
[-] cagefs_enter.proxied
[open]
[-] sha1sum
[open]
[-] recode
[open]
[-] neqn
[open]
[-] expand
[open]
[-] wc
[open]
[-] libtoolize
[open]
[-] hunspell
[open]
[-] make
[open]
[-] setsid
[open]
[-] icu-config
[open]
[-] ps
[open]
[-] splain
[open]
[-] mariadb-import
[open]
[-] strace
[open]
[-] autom4te
[open]
[-] funzip
[open]
[-] stdbuf
[open]
[-] troff
[open]
[-] ps2ps2
[open]
[-] cut
[open]
[-] pdf2dsc
[open]
[-] sort
[open]
[-] install
[open]
[-] true
[open]
[-] mariadb-setpermission
[open]
[-] join
[open]
[-] printenv
[open]
[-] xargs
[open]
[-] env
[open]
[-] aspell
[open]
[-] vmstat
[open]
[-] rm
[open]
[-] fc-query
[open]
[-] sha384sum
[open]
[-] ps2epsi
[open]
[-] rvi
[open]
[-] base32
[open]
[-] libtool
[open]
[-] gsoelim
[open]
[-] ed
[open]
[-] gtar
[open]
[-] zfgrep
[open]
[-] cc
[open]
[-] zipnote
[open]
[-] false
[open]
[-] Mail
[open]
[-] xmlcatalog
[open]
[-] prove
[open]
[-] tload
[open]
[-] shred
[open]
[-] fc-conflist
[open]
[-] mysqlaccess
[open]
[-] pmap
[open]
[-] rnano
[open]
[-] runcon
[open]
[-] date
[open]
[-] conjure
[open]
[-] cmp
[open]
[-] comm
[open]
[-] vimdiff
[open]
[-] mariadb-slap
[open]
[-] skill
[open]
[-] cpan
[open]
[-] script
[open]
[-] sha224sum
[open]
[-] cksum
[open]
[-] mknod
[open]
[-] chrt
[open]
[-] tee
[open]
[-] id
[open]
[-] getent
[open]
[-] mariadb
[open]
[-] getconf
[open]
[-] automake
[open]
[-] infotocap
[open]
[-] clear
[open]
[-] view
[open]
[-] mysql_config
[open]
[-] perlthanks
[open]
[-] users
[open]
[-] iconv
[open]
[-] pod2man
[open]
[-] colrm
[open]
[-] groups
[open]
[-] zdiff
[open]
[-] at
[open]
[-] fc-list
[open]
[-] renew-dummy-cert
[open]
[-] pydoc3
[open]
[-] pod2text
[open]
[-] python2
[open]
[-] git-upload-pack
[open]
[-] gpg-agent
[open]
[-] ln
[open]
[-] colcrt
[open]
[-] ex
[open]
[-] fgrep
[open]
[-] mysqlcheck
[open]
[-] zgrep
[open]
[-] nice
[open]
[-] gcov-tool
[open]
[-] pdf2ps
[open]
[-] git
[open]
[-] mariadb-hotcopy
[open]
[-] mariadb-dumpslow
[open]
[-] mkdir
[open]
[-] nano
[open]
[-] scl
[open]
[-] python3
[open]
[-] ps2pdf14
[open]
[-] captoinfo
[open]
[-] mail
[open]
[-] ps2ascii
[open]
[-] x86_64-redhat-linux-gcc-11
[open]
[-] atrm
[open]
[-] sha256sum
[open]
[-] perl5.32.1
[open]
[-] getopt
[open]
[-] gcov
[open]
[-] cat
[open]
[-] git-receive-pack
[open]
[-] red
[open]
[-] mktemp
[open]
[-] printf
[open]
[-] pango-list
[open]
[-] tsort
[open]
[-] who
[open]
[-] cloudlinux-awp-user
[open]
[-] egrep
[open]
[-] mariadb-waitpid
[open]
[-] ranlib
[open]
[-] pgrep
[open]
[-] geqn
[open]
[-] mariadb-conv
[open]
[-] eps2eps
[open]
[-] factor
[open]
[-] ghostscript
[open]
[-] perlivp
[open]
[-] preunzip
[open]
[-] tbl
[open]
[-] enc2xs
[open]
[-] uname
[open]
[-] zipcloak
[open]
[-] numfmt
[open]
[-] sha512sum
[open]
[-] x86_64-redhat-linux-g++
[open]
[-] compare
[open]
[-] cpp
[open]
[-] pydoc
[open]
[-] prezip-bin
[open]
[-] uniq
[open]
[-] md5sum
[open]
[-] spell
[open]
[-] mariadb-check
[open]
[-] hostname
[open]
[-] vdir
[open]
[-] addr2line
[open]
[-] import
[open]
[-] convert
[open]
[-] sqlite3
[open]
[-] nslookup
[open]
[-] bzcat
[open]
[-] mariadb-convert-table-format
[open]
[-] df
[open]
[-] seq
[open]
[-] mysql
[open]
[-] gcc
[open]
[-] pydoc3.9
[open]
[-] pinky
[open]
[-] bison
[open]
[-] diff
[open]
[-] gzexe
[open]
[-] mysqladmin
[open]
[-] groff
[open]
[-] geoiplookup6
[open]
[-] display
[open]
[-] bzip2recover
[open]
[-] logger
[open]
[-] mariadb-plugin
[open]
[-] zegrep
[open]
[-] zipsplit
[open]
[-] slabtop
[open]
[-] clwpos-user
[open]
[-] cyrusbdb2current
[open]
[-] ar
[open]
[-] eqn
[open]
[-] autoscan
[open]
[-] screen
[open]
[-] top
[open]
[-] delv
[open]
[-] bzip2
[open]
[-] pod2html
[open]
[-] fc-scan
[open]
[-] lessecho
[open]
[-] idn
[open]
[-] scalar
[open]
[-] which
[open]
[-] prezip
[open]
[-] csplit
[open]
[-] mysql_waitpid
[open]
[-] gcc-ranlib
[open]
[-] make-dummy-cert
[open]
[-] sprof
[open]
[-] wget
[open]
[-] pwd
[open]
[-] php
[open]
[-] pr
[open]
[-] snice
[open]
[-] chown
[open]
[-] gs
[open]
[-] infocmp
[open]
[-] scp
[open]
[-] lesspipe.sh
[open]
[-] ls
[open]
[-] tic
[open]
[-] podchecker
[open]
[-] dbiprof
[open]
[-] perldoc
[open]
[-] look
[open]
[-] instmodsh
[open]
[-] zmore
[open]
[-] pkill
[open]
[-] gpic
[open]
[-] ssh
[open]
[-] flex++
[open]
[-] find
[open]
[-] bzless
[open]
[-] arch
[open]