MySQL监控工具-orztop
先安装orzdba,链接:http://blog.itpub.net/28939273/viewspace-1875895/
安装依赖的包:
[root@hank-yoon servers]# yum install perl-TermReadKey.x86_64
否则报错如下:
[root@hank-yoon servers]# ./orztop -u=root -p='yoon' -S=/export/data/mysql/tmp/mysql.sock
Can't locate Term/ReadKey.pm in @INC (@INC contains: /usr/local/lib64/perl5 /usr/local/share/perl5 /usr/lib64/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib64/perl5 /usr/share/perl5 .) at ./orztop line 14.
BEGIN failed--compilation aborted at ./orztop line 14.
[root@hank-yoon servers]# yum search ReadKey
yum install perl-TermReadKey.x86_64
[root@hank-yoon servers]# ./orztop -help
==========================================================================================
Info  :
                Created By zhuxu@taobao.com
Usage :
Command line options :
-help       Print Help Info. 
        -h,--host   Hostname/Ip to use for mysql connection.
        -u,--user   User        to use for mysql connection.
        -p,--pwd    Password    to use for mysql connection.
        -P,--port   Port        to use for mysql connection(default 3306).
-S,--socket Socket to use for mysql connection.
-t Time(second) Interval.
==========================================================================================
[root@hank-yoon servers]# ./orztop  -u=root -p='yoon' -S=/export/data/mysql/tmp/mysql.sock
信息中还包括了数据库的每秒的insert/update/delete/select,逻辑读,命中率,当前活动线程等,可以大致看到数据库的当前压力情况;
当你的实例出现性能瓶颈时,不妨用该工具看看,抓取一下当前正在跑的慢sql
源码:
#!/bin/env perl 
# Created          : zhuxu@taobao.com
# Perl Module Need : 
#    	sudo yum install dba-perl-DBI -b test
#    	sudo yum install dba-DBD-MySQL -b test
#    	sudo yum install Term-ReadKey -b test
# Version          :
#   1.0              Modified @ 2012/11/09
#   1.1              Modified @ 2013/01/02
#                    add --help ,and hightlight/no case sensitive filter sql
use strict;
use DBI;
use Term::ReadKey;
use Term::ANSIColor;
use POSIX qw(strftime); 
use Getopt::Long;
Getopt::Long::Configure qw(no_ignore_case);
# autoflush
$| = 1;
# Get options info
my %opt;
my ($width, $height, $wpx, $hpx) = GetTerminalSize();
#my $mode  = 'help';
my $mode  = 'mysql_processlist';
my $delay = 2;
my $mysql_processlist_idle        = 0;
my $mysql_processlist_filter_db   = qr/.?/;
my $mysql_processlist_filter_user = qr/.?/;
my $mysql_processlist_filter_sql  = qr/.?/;
my $mysql_filter ;
my $sort = 1;
my $trunc_sql = 0;
my $curr_time;
my @mysql_processlist;
my $all_processlist=0;
my $orzdba = '/export/servers/orzdba -lazy';
#my ($mysql_dbname,$mysql_host,$mysql_port,$mysql_user,$mysql_pass) = ('','',3306,'root','');
my ($mysql_dbname,$mysql_host,$mysql_port,$mysql_user,$mysql_pass) = ('','',3306,'root','');
my $mysql_socket = '/export/data/mysql/tmp/mysql.sock';
&get_options();
my $dbh = &get_mysql_connection($mysql_dbname,$mysql_host,$mysql_port,$mysql_user,$mysql_pass,$mysql_socket);
&main();
sub print_usage {
print <<EOF;
==========================================================================================
Info  :
Created By zhuxu\@taobao.com
Usage :
Command line options :
-help       Print Help Info. 
-h,--host   Hostname/Ip to use for mysql connection.
-u,--user   User        to use for mysql connection.
-p,--pwd    Password    to use for mysql connection.
-P,--port   Port        to use for mysql connection(default 3306).
-S,--socket Socket to use for mysql connection.
-t Time(second) Interval.
==========================================================================================
EOF
exit;
}
sub get_options {
&GetOptions(\%opt,
'help',
'h|host=s',
'u|user=s',
'p|pwd=s',
'P|port=i',
'S|socket=s',
't=i'
  ) or exit;
$opt{'help'} and &print_usage();
$opt{'h'} and $mysql_host   = $opt{'h'};
$opt{'u'} and $mysql_user   = $opt{'u'};
$opt{'p'} and $mysql_pass   = $opt{'p'};
$opt{'P'} and $mysql_port   = $opt{'P'};
$opt{'S'} and $mysql_socket = $opt{'S'};
$opt{'t'} and $delay    = $opt{'t'};
}
sub main {
#	&clear_screen();
#	&print_help();
ReadMode(3);
while(1) {
my $key;
#	#$key = ReadKey(0);
#	#print $key."===========\n\n";
if ( $mode eq 'help' ) {
&clear_screen();
&print_help();
$key = ReadKey(0);
next unless $key;
}
if ( $mode eq 'mysql_processlist' ) {
&clear_screen();
&mysql_show_full_processlist();
$key = ReadKey($delay);
next unless $key;
}
#	#
#	if ($key eq 'e') {
#	&clear_screen();
#	print "Please input:";
#	my $id = ReadLine(0);
#	print "\n--$id\n";
#	next;
#	}
#
# modified @ 2012-11-08
#	# run orzdba
#	if ($key eq '1') {
#	&clear_screen();
#	&run_orzdba();
#	next;
#	}
# help
if ($key eq '?') {
$mode  = 'help';
next;
}
# 
if ($key eq '1') {
$mode  = 'mysql_processlist';
next;
}
# quit
if ($key eq 'q') {
if ($all_processlist == 0) {
&cmd_quit();
} else {
$mode = 'mysql_processlist';
$all_processlist = 0;
}
}
if ($mode eq 'mysql_processlist') {
if ($key eq 'i') {
if ($mysql_processlist_idle) {
$mysql_processlist_idle = 0;
$sort = 1;
print color("green");
print " -- idle (sleeping) processed filtered --";
print color("reset");
sleep 1;
}else {
$mysql_processlist_idle = 1;
$sort = 0;
print color("green");
print " -- idle (sleeping) processed unfiltered --";
print color("reset");
sleep 1;
}
}
if ($key eq 'T') {
if ($trunc_sql) {
$trunc_sql = 0;
print color("green");
print " -- Complete SQL --";
print color("reset");
sleep 1;
}else {
$trunc_sql = 1;
print color("green");
print " -- Truncate SQL --";
print color("reset");
sleep 1;
}
}
if ($key eq 't') {
ReadMode(0);
print color("green");
print  " Seconds of Delay: ";
print color("reset");
my $secs = ReadLine(0);
if ($secs =~ /^\s*(\d+)/) {
$delay = $1;
$delay = 1 if $delay <1;
}
ReadMode(3);
}
if ($key eq 'd') { 
ReadMode(0);
print color("green");
print  " Which database (blank for all, /.../ for regex): ";
print color("reset");
$mysql_processlist_filter_db = &StringOrRegex(ReadLine(0));
ReadMode(3);
next;
}
if ($key eq 'u') { 
ReadMode(0);
print color("green");
print  " Which user (blank for all, /.../ for regex): ";
print color("reset");
$mysql_processlist_filter_user = &StringOrRegex(ReadLine(0));
ReadMode(3);
next;
}
if ($key eq 'c') {
ReadMode(0);
print color("green");
print  " Which sql (blank for all, /.../ for regex): ";
print color("reset");
#$mysql_processlist_filter_sql = &StringOrRegex(ReadLine(0));
$mysql_filter = ReadLine(0);
chomp $mysql_filter ;
$mysql_processlist_filter_sql = &StringOrRegex($mysql_filter);
$mysql_filter =~ s/\(/\\\(/g;
$mysql_filter =~ s/\)/\\\)/g;
$mysql_filter =~ s/\*/\\\*/g;
ReadMode(3);
next;
}
# p - pause
if ($key eq 'p' )
{
print color("green");
print " -- paused. press any key to resume --";
print color("reset");
ReadKey(0);
next;
}
# s - sort
if ($key =~ /s/)
{
if ($sort) {
$sort = 0;
print color("green");
print " -- sort order reversed --";
print color("reset");
sleep 1;
}
else {
$sort = 1;
print color("green"); 
print " -- sort order reversed --";
print color("reset");
sleep 1;
}
}
if ($key eq 'a') {
$all_processlist = 1;
ReadMode(0);
&clear_screen;
&processlist_all();
ReadMode(3);
while( $key ne 'q' ) {
$key = ReadKey(0);
}
}
}
}
}
sub clear_screen {
my $clear = `clear`;
print $clear;
}
sub cmd_quit {
ReadMode(0);
print color("red");
print "\nExit orztop...\n";
print color("reset");
exit;
}
sub run_orzdba {
local $SIG{INT} = sub { 
$mode = 'help';
};
#	local $SIG{CHLD} = sub { 
#	sleep 1;
#	$mode = 'help';
#	};
# disk ?
my %disks ;
open PROC_DISK,"cat /proc/diskstats |"  or die "Can't open file(/proc/diskstats)! $!";
while ( my $line = <PROC_DISK> ) {
chomp($line);
my $diskname = lc( (split(/\s+/,$line))[3] );
$disks{$diskname} = 1;
}
print color("green");
print "\nDisk Info :\n";
print color("white");
print join( ',',sort(keys %disks) );
my $df = `df -h`;
print "\n\n".$df."\n\n";
print color("green");
print "Print disk info by orzdba ? (Enter to skip set disk ,Else input the disk name)\n";
print color("white");
print "[Note]: Best display by orzdba using SecureCRT ,Set 'Global Options' -> 'Apperarance' -> 'Maximum columns' > 175\n"; 
print color("green");
print "Disk  : ";
print color("reset");
ReadMode(0);
my $disk = lc(ReadLine(0));
chomp($disk);
ReadMode(3);
if ( ! exists($disks{$disk}) and $disk ne '' ){
print color("red");
print "\n[Error] Please set right disk info !\n";
print color("reset");
sleep 1;
} else {
# runing orzdba
&clear_screen();
$orzdba   .= " -d ".$disk if $disk ne '';
print color("red");
print "\nRunning orzdba [ Ctrl+C to Stop ]\n\n";
print color("reset");
defined ( my $pid = fork() ) or die "Can't fork: $!\n";
unless ($pid) {
exec($orzdba);
exit;
}
waitpid($pid,0);
}
}
my  %prev_mysql_status;
sub mysql_show_full_processlist {
# print "[cmd info]:  ";
#	print color("red bold on_blue");
#	print " i[".($mysql_processlist_idle?"N":"Y")."]";
#	print color("reset on_blue white");
#	print "-filter idle; ";
#	print color("red bold on_blue");
#	print "t[$delay]";
#	print color("reset on_blue white");
#	print "-reflesh time; ";
#	print color("red bold on_blue");
#	my $tmp_filter_db = $mysql_processlist_filter_db;
#	$tmp_filter_db =~ s/\(\?-xism://;
#	$tmp_filter_db =~ s/\)//;
#	print "d[$tmp_filter_db]";
#	print color("reset on_blue white");
#	print "-display special db;";
#	print color("red bold on_blue");
#	print " p";
#	print color("reset on_blue white");
#	print "-pause;";
#	print color("red bold on_blue");
#	print " s[".($sort?"desc":"asc")."]";
#	print color("reset on_blue white");
#	print "-sort by time;" ;
#
#	print color("red bold on_blue");
#	my $tmp_filter_sql = $mysql_processlist_filter_sql;
#	$tmp_filter_sql =~ s/\(\?-xism://;
#	$tmp_filter_sql =~ s/\)$//;
#	$tmp_filter_sql =~ s/\\//g;
#	print " c[$tmp_filter_sql]";
#	print color("reset on_blue white");
#	print "-display special sql;\n\n";
#
#	print color("reset ");
# 
print color("bold green");
print "MySQL Processlist Info :".( $mysql_host eq '' ? " "x50:" "x35);
print color("reset");
$curr_time = strftime ("%Y-%m-%d %H:%M:%S", localtime);
#my $curr_time_width   = $width - 105;
#printf "%${curr_time_width}s","[ $curr_time ]";
print color("bold white"),"[",color("magenta"),$curr_time;
printf " %15s",$mysql_host if $mysql_host ne "";
print color("white"),"]\n\n";
print color("reset");
#print color("magenta"),$curr_time,color("reset");
my $lines_left = $height-3;
my $mysql_status_sql = qq{show global status where Variable_name in ("Com_select","Com_insert","Com_update","Com_delete","Innodb_buffer_pool_read_requests","Innodb_buffer_pool_reads","Threads_running") };
my @mysql_status =  &hashes($mysql_status_sql);
my %mysql_status;
my %mysql_status_dela;
foreach (@mysql_status) {
$mysql_status{$_->{variable_name}} = $_->{value} ;
if ( exists $prev_mysql_status{$_->{variable_name}} ) {
my $prev_mysql_status_value = $prev_mysql_status{$_->{variable_name}} ;
$mysql_status_dela{$_->{variable_name}} = $_->{value} - $prev_mysql_status_value ;
} else {
$mysql_status_dela{$_->{variable_name}} = 0;
}
}
my $insert_dela = $mysql_status_dela{Com_insert}/$delay;
my $update_dela = $mysql_status_dela{Com_update}/$delay;
my $delete_dela = $mysql_status_dela{Com_delete}/$delay;
my $select_dela = $mysql_status_dela{Com_select}/$delay;
my $read_req_dela = $mysql_status_dela{Innodb_buffer_pool_read_requests}/$delay;
my $read_dela     = $mysql_status_dela{Innodb_buffer_pool_reads}/$delay;
my $innodb_hit;
if ( $mysql_status_dela{Innodb_buffer_pool_read_requests} == 0 ) {
$innodb_hit = 100;
} else {
$innodb_hit  =($read_req_dela - $read_dela) / $read_req_dela * 100;
}
%prev_mysql_status = %mysql_status;
print color("red");
print "[MySQL status]";
print color("reset white");
print "  Ins/Upd/Del/Sel:"; 
print color('green underline');
printf "%-d",$insert_dela;
print color('reset white'),"/";
print color('green underline');
printf "%-d",$update_dela;
print color('reset white'),"/";
print color('green underline');
printf "%-d",$delete_dela;
print color('reset white'),"/";
print color('green underline');
printf "%-d",$select_dela;
print color('reset white'),"  ";
print "Lor:";
print color('green underline');
printf "%-d",$read_req_dela;
print color('reset white'),"  ";
print "Hit%:";
$innodb_hit > 99 ? print color('green underline') : print color('red underline');
printf "%-.2f",$innodb_hit;
print color('reset white'),"  ";
print "Threads_running:";
$mysql_status{Threads_running} > 50 ? print color('red underline') : print color('green underline');
printf "%-d",$mysql_status{Threads_running};
print color('reset white'),"\n";
my $sql_processlist  = qq{show full processlist};
my @processlist = &hashes($sql_processlist);
@mysql_processlist = @processlist;
@mysql_processlist = sort{ $a->{time} <=> $b->{time} } @mysql_processlist;
#if (not $mysql_processlist_idle) {
if (not $sort) {
# order by time asc 
@processlist    = sort{ $a->{time} <=> $b->{time} } @processlist;
} else {
# order by time desc
@processlist    = sort{ $b->{time} <=> $a->{time} } @processlist;
}
print color("red");
#print color("green");
# [Command info]
print "[Command info]";
&groupby_key('command',@processlist);
print color("white"),"=> Total Proc [",color('green underline'),scalar(@processlist),color('reset white'),"]\n";
print color("reset");
# [State   info]
print color("red");
print "[State   info]";
&groupby_key('state',@processlist);
sub groupby_key {
my ($key,@array) = @_;
my %hash;
foreach(@array) {
$hash{$_->{$key}} += 1;
}
print color('reset');
print "  ";
foreach (sort{$hash{$b}<=>$hash{$a}} keys %hash) {
next if $_ eq '';
next if $_ eq 'Has sent all binlog to slave; waiting for binlog to be updated';
next if $_ eq 'Has read all relay log; waiting for the slave I/O thread to update it';
next if $_ eq 'Waiting for master to send event';
next if $_ eq 'Slave has read all relay log; waiting for the slave I/O thread to update it';
next if $_ eq 'Master has sent all binlog to slave; waiting for binlog to be updated';
print color("white"),$_,":",color('green underline'),$hash{$_},color('reset white'),"  ";
}
}
print "\n\n";
print color("reset");
$lines_left -= 3;
#printf "%8s %20s %15s %15s %15s %10s\n",
#       'Id','Host','User','DB','Command','Time';
#printf "%8s %20s %15s %15s %15s %10s\n",
#       '--','----','----','--','-------','----';
printf "%8s %20s %15s %15s %15s %10s    %-50s\n",
      'Id','Host','User','DB','Command','Time','State';
printf "%8s %20s %15s %15s %15s %10s    %-50s\n",
      '--','----','----','--','-------','----','-----';
$lines_left -= 3;
foreach (@processlist) {
next if ($_->{command} eq "Sleep" or $_->{command} eq "Binlog Dump" or $_->{command} eq "Connect") and not $mysql_processlist_idle;
next if ($_->{db}   !~ $mysql_processlist_filter_db);
next if ($_->{user} !~ $mysql_processlist_filter_user);
# remove newlines and carriage returns
$_->{info} =~ s/[\n\r]/ /g;
# collpase whitespace
$_->{info} =~ s/\s+/ /g;
next if ($_->{info} !~ $mysql_processlist_filter_sql);
if ( 1 ) {
#if ( $_->{info}  ne '' ) {
#last if (not $lines_left-- and $mysql_processlist_filter_db) ;
last if not $lines_left--;
print color('white') ; 
printf "%8s %20s %15s %15s %15s %10s",
      $_->{id},$_->{host}, $_->{user}, $_->{db},
      $_->{command},$_->{time} ;
      
print color('magenta') ; 
printf "    %-50s\n",$_->{state};
if ($_->{info} ne '') {
$_->{info} = substr($_->{info},0,$width - 14) if $trunc_sql;
my $sql_length  = length($_->{info}) + 13;
my $sql_line = int( $sql_length/$width ) + 1 ;
$lines_left -= $sql_line;
last if $lines_left <= 0 ;
if ( $mysql_filter and !$trunc_sql ) {
$_->{info} =~ /$mysql_filter/i ;
print color('yellow') ; 
print " ==> [ SQL ] ".$`;
print color('bold red') ; 
print $& ;
print color('reset yellow') ; 
print $'."\n" ;
} else {
print color('yellow') ; 
print " ==> [ SQL ] ".$_->{info}."\n";
}
}
}
print color('reset');
}
print color('reset');
}
sub print_help {
#print color("blink green");
print color("green");
print "\n","-"x70;
print color("bold blue");
print "\n  Help For Tool [orztop] \n                                    Created by zhuxu\@taobao.com";
print color("reset");
print color("green");
print "\n","-"x70;
print "\n\n";
print color("reset");
print color("white");
  #1 - running orzdba to display host/mysql info per seconds
#	print <<EOF;
#  ? - display this screen
#  1 - mysql: show full processlist ,default to show running sql and every 2s to refresh
#      i - filter or unfilter idle/sleeping processes
#      t - set delay time to reflesh
#      d - display special db processes
#      c - display special sql
#      a - display all processlit's sql
#      s - sort order by time desc/asc
#      T - truncate sql to print a line or get complete sql
#      p - pause the display
#  q - quit
#
#EOF
print <<EOF;
  ? - display this screen
  1 - mysql: show full processlist ,default to show running sql and every 2s to refresh
EOF
print color("reset");
print color("bold green"),"      s ",color("red bold"),"[".($sort?"desc":"asc")."]",color("reset white")," - sort by time desc/asc\n";
print color("bold green"),"      i ",color("red bold"),"[".($mysql_processlist_idle?"N":"Y")."]",color("reset white"),"    - filter or unfilter idle/sleeping processes\n";
print color("bold green"),"      t ",color("red bold"),"[$delay]",color("reset white"),"    - set delay time to reflesh\n";
my $tmp_filter_db = $mysql_processlist_filter_db;
$tmp_filter_db =~ s/\(\?-xism://;
$tmp_filter_db =~ s/\(\?i-xsm://;
$tmp_filter_db =~ s/\)//;
print color("bold green"),"      d ",color("red bold"),"[$tmp_filter_db]",color("reset white"),"   - display special db processes\n";
my $tmp_filter_user = $mysql_processlist_filter_user;
$tmp_filter_user =~ s/\(\?-xism://;
$tmp_filter_user =~ s/\(\?i-xsm://;
$tmp_filter_user =~ s/\)//;
print color("bold green"),"      u ",color("red bold"),"[$tmp_filter_user]",color("reset white"),"   - display special user processes\n";
my $tmp_filter_sql = $mysql_processlist_filter_sql;
$tmp_filter_sql =~ s/\(\?-xism://;
$tmp_filter_sql =~ s/\(\?i-xsm://;
$tmp_filter_sql =~ s/\)$//;
$tmp_filter_sql =~ s/\\//g;
print color("bold green"),"      c ",color("red bold"),"[$tmp_filter_sql]",color("reset white"),"   - display special sql\n";
print color("bold green"),"      a ",color("reset white")," - display all processlist's sql\n";
print color("bold green"),"      p ",color("reset white")," - pause the display\n";
print color("bold green"),"      T ",color("reset white")," - truncate sql to print a line or get complete sql\n";
print <<EOF;
  q - quit
EOF
print color("green");
print "\n","-"x70;
print color("reset ");
print "\n";
}
sub get_mysql_connection {
my ($db, $ip_addr, $port, $user, $pass,$socket) = @_;
my $str_conn ;
if ($ip_addr ne '') {
$str_conn = "dbi:mysql:database=$db;host=$ip_addr;port=$port";
} else {
$user     = "root";
$pass     = "";
$str_conn = "dbi:mysql:database=$db;mysql_socket=$socket";
}
local $SIG{ALRM} = sub { die "connect db timeout!\n" };
alarm 20;
my $dbh = DBI->connect( $str_conn, $user, $pass) or die "Connect to mysql database error:". DBI->errstr;
$dbh->{FetchHashKeyName} = 'NAME_lc';
#	$dbh->{AutoCommit} = 0;
$dbh->{RaiseError} = 1;
$dbh->{PrintError} = 1;
$dbh->do("set names gbk");
alarm 0;
return $dbh;
}
# Execute an SQL query and return the statement handle.
sub execute()
{
my ($sql) = @_;
my $sth = $dbh->prepare($sql);
$sth->execute();
return $sth;
}
# Run a query and return the records has an array of hashes.
sub hashes()
{
my ($sql) = @_;
my @records;
if (my $sth = &execute($sql)) {
while (my $ref = $sth->fetchrow_hashref) {
push @records, $ref;
}
}
return @records;
}
sub StringOrRegex()
{
my $input = shift;
chomp $input;
if (defined $input) {
# regex, strip /.../ and use via qr//
if ($input =~ m{^/} and $input =~ m{/$}) {
$input =~ s{^/}{} ;
$input =~ s{/$}{} ;
$input =  qr/$input/;
}
# reset to match anything
elsif ($input eq '') {
$input = qr/.*/;
}
# string, build a simple regex
else {
$input =~ s/\(/\\\(/g;
$input =~ s/\)/\\\)/g;
$input =~ s/\*/\\\*/g;
$input =  '^.*' . $input . '.*$';
$input = qr/$input/i;
}
}
# reset to match anything
else {
$input = qr/.*/;
}
return $input;
}
sub processlist_all() {
print color('white bold on_blue');
print "-"x120;
print color('red bold on_blue');
printf "\n%-120s\n","                        [$curr_time] ALL PROCESSLIST, SORT BY TIME ASC, [q] TO QUIT...";
print color('white bold on_blue');
print "-"x120;
print color('reset');
printf "\n\n%8s %20s %15s %15s %15s %10s    %-50s\n",
      'Id','Host','User','DB','Command','Time','State';
printf "%8s %20s %15s %15s %15s %10s    %-50s\n",
      '--','----','----','--','-------','----','-----';
#my $lines_left = $height-4;
foreach (@mysql_processlist) {
next if ($_->{command} eq "Sleep" or $_->{command} eq "Binlog Dump" or $_->{command} eq "Connect") and not $mysql_processlist_idle;
next if ($_->{db}   !~ $mysql_processlist_filter_db);
next if ($_->{user} !~ $mysql_processlist_filter_user);
# remove newlines and carriage returns
$_->{info} =~ s/[\n\r]/ /g;
# collpase whitespace
$_->{info} =~ s/\s+/ /g;
next if ($_->{info} !~ $mysql_processlist_filter_sql);
if ( 1 ) {
#if ( $_->{info}  ne '' ) {
#last if (not $lines_left-- and $mysql_processlist_filter_db) ;
#last if not $lines_left--;
print color('white') ; 
printf "%8s %20s %15s %15s %15s %10s",
      $_->{id},$_->{host}, $_->{user}, $_->{db},
      $_->{command},$_->{time} ;
print color('magenta') ; 
printf "    %-50s\n",$_->{state};
      
if ($_->{info} ne '') {
if ( $mysql_filter ) {
$_->{info} =~ /$mysql_filter/i ;
print color('yellow') ; 
print " ==> [ SQL ] ".$`;
print color('bold red') ; 
print $& ;
print color('reset yellow') ; 
print $'."\n" ;
} else {
print color('yellow') ; 
print " ==> [ SQL ] ".$_->{info}."\n";
}
}
}
print color('reset');
}
print "\n";
print color('white bold on_blue');
print "-"x120;
print color('reset');
print "\n";
}
MySQL监控工具-orztop的更多相关文章
- Mysql监控工具小集合
		介绍一些常见的Mysql监控工具. Cacti Cacti是 一套基于PHP,MySQL,SNMP及RRDTool开发的网络流量监测图形分析工具.它通过snmpget来获取数据,使用 RRDtool绘 ... 
- Mysql监控工具介绍-Monyog
		MONyog监控工具 MONyog是一个优秀的MySQL监控工具,可以实时监测MYSQL服务器,查看MySQL服务器的运行状态. 支持查询分析功能,能够轻松找出有MySQL的问题所在,此外,还可以帮助 ... 
- MySQL监控工具——innotop
		MySQL监控工具--innotop innotop是一个mysql数据库实时监控工具,其功能强大,信息种类繁多,很能体现数据库的状态. 它实际上是一个perl脚本,整合show status/sho ... 
- 开发同学的福利--mysql监控工具sqlprofiler,类似sqlserver的profiler工具
		最近无意发现了mysql的客户端监控工具“Nero Profile SQL”,刚开始还不知道怎么使用,经过半小时摸索,现将使用步骤写下来. 背景:开发的时候,如果数据存储层这块使用EF,或者其他orm ... 
- mysql监控工具sqlprofiler,类似sqlserver的profiler工具
		最近无意发现了mysql的客户端监控工具“Nero Profile SQL”,刚开始还不知道怎么使用,经过半小时摸索,现将使用步骤写下来. 背景:开发的时候,如果数据存储层这块使用EF,或者其他orm ... 
- mysql监控工具sqlprofiler,类似sqlserver的profiler工具安装(一)
		最近无意发现了mysql的客户端监控工具“Nero Profile SQL”,刚开始还不知道怎么使用,经过半小时摸索,现将使用步骤写下来. 背景:开发的时候,如果数据存储层这块使用EF,或者其他orm ... 
- MYSQL监控工具--mytop
		https://mp.weixin.qq.com/s/1X_uZaajImRRmpAsdLsNGw mysql可以说如今最为流行的数据库了,虽然现在nosql的风头正盛.但我想很多公司重要的业务数据不 ... 
- MySQL监控工具-orzdba
		源代码地址:http://code.taobao.org/p/orzdba/src/trunk/ [root@hank-yoon servers]# chmod +x orzdba 在代码的1 ... 
- mysql 监控工具monyog使用总结
		1. 下载安装 2. 登录之后,查看 locked queries 2. 慢查询 
随机推荐
- 重构25-Introduce Design By Contract checks(契约式设计)
			契约式设计(DBC,Design By Contract)定义了方法应该包含输入和输出验证.因此,可以确保所有的工作都是基于可用的数据,并且所有的行为都是可预料的.否则,将返回异常或错误并在方法中进行 ... 
- java 解析XML文档
			Java 解析XML文档 一.解析XML文档方式: 1.DOM方式:将整个XML文档读取到内存中,按照XML文件的树状结构图进行解析. 2.SAX方式:基于事件的解析,只需要加载XML中的部分数据,优 ... 
- C#调用C++的DLL搜集整理的所有数据类型转换方式
			//C#调用C++的DLL搜集整理的所有数据类型转换方式,可能会有重复或者多种方案,自己多测试 //c++:HANDLE(void *) ---- c#:System.IntPtr //c++:Byt ... 
- rpm build error: invalid predicate
			rpm build error error message:/usr/lib/rpm/find-debuginfo.sh /usr/src/redhat/BUILD/RPMS find: invali ... 
- CF 335B - Palindrome 区间DP
			335B - Palindrome 题目: 给出一个字符串(均有小写字母组成),如果有长度为100的回文子串,输出该子串.否则输出最长的回文子串. 分析: 虽然输入串的长度比较长,但是如果存在单个字母 ... 
- http header详解
			HTTP(HyperTextTransferProtocol)即超文本传输协议,目前网页传输的的通用协议.HTTP协议采用了请求/响应模 型,浏览器或其他客户端发出请求,服务器给与响应.就整个网络资源 ... 
- PBS常用指令合集
			以下以任务名 job.pbs对应任务ID 12341234为代表,提交者用户名为user. 1.基本指令-最常用 提交作业 qsub job.pbs 查询全部作业 qstat 查询个人作业 qstat ... 
- ZOJ 3872 Beauty of Array (The 12th Zhejiang Provincial Collegiate Programming Contest )
			对于没有题目积累和clever mind的我来说,想解这道题还是非常困难的,也根本没有想到用dp. from: http://blog.csdn.net/u013050857/article/deta ... 
- 五、PackageManager获取版本号
			PackageInfo代表的是关于一个包的所有信息,就相当于一个APP应用的清单文件中收集到的所有信息. 通过这个类我们就可以获取类似版本号等一些信息. 1 2 3 4 5 6 7 8 9 10 11 ... 
- Swiper之滑块4
			最炫3D走一波: <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" ... 
