|
|
|
|
@@ -1,45 +1,56 @@
|
|
|
|
|
|
|
|
|
|
$FreeBSD$
|
|
|
|
|
|
|
|
|
|
--- mytop.orig
|
|
|
|
|
--- mytop.orig 2013-03-21 21:26:04 UTC
|
|
|
|
|
+++ mytop
|
|
|
|
|
@@ -153,7 +153,7 @@
|
|
|
|
|
"idle|i" => \$config{idle},
|
|
|
|
|
"resolve|r" => \$config{resolve},
|
|
|
|
|
"prompt!" => \$config{prompt},
|
|
|
|
|
- "long|!" => \$config{long_nums},
|
|
|
|
|
+ "long!" => \$config{long_nums},
|
|
|
|
|
"mode|m=s" => \$config{mode},
|
|
|
|
|
"sort=s" => \$config{sort},
|
|
|
|
|
);
|
|
|
|
|
@@ -193,6 +193,7 @@
|
|
|
|
|
*BLUE = sub { };
|
|
|
|
|
*WHITE = sub { };
|
|
|
|
|
*BOLD = sub { };
|
|
|
|
|
@@ -189,22 +189,24 @@ if ($HAS_COLOR)
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
- *RESET = sub { };
|
|
|
|
|
- *YELLOW = sub { };
|
|
|
|
|
- *RED = sub { };
|
|
|
|
|
- *GREEN = sub { };
|
|
|
|
|
- *BLUE = sub { };
|
|
|
|
|
- *WHITE = sub { };
|
|
|
|
|
- *BOLD = sub { };
|
|
|
|
|
+ *RESET = sub { };
|
|
|
|
|
+ *YELLOW = sub { };
|
|
|
|
|
+ *RED = sub { };
|
|
|
|
|
+ *GREEN = sub { };
|
|
|
|
|
+ *BLUE = sub { };
|
|
|
|
|
+ *WHITE = sub { };
|
|
|
|
|
+ *BOLD = sub { };
|
|
|
|
|
+ *MAGENTA = sub { };
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
my $RESET = RESET() || '';
|
|
|
|
|
@@ -202,6 +203,7 @@
|
|
|
|
|
my $BLUE = BLUE() || '';
|
|
|
|
|
my $WHITE = WHITE() || '';
|
|
|
|
|
my $BOLD = BOLD() || '';
|
|
|
|
|
+my $MAGENTA= MAGENTA() || '';
|
|
|
|
|
-my $RESET = RESET() || '';
|
|
|
|
|
-my $YELLOW = YELLOW() || '';
|
|
|
|
|
-my $RED = RED() || '';
|
|
|
|
|
-my $GREEN = GREEN() || '';
|
|
|
|
|
-my $BLUE = BLUE() || '';
|
|
|
|
|
-my $WHITE = WHITE() || '';
|
|
|
|
|
-my $BOLD = BOLD() || '';
|
|
|
|
|
+my $RESET = RESET() || '';
|
|
|
|
|
+my $YELLOW = YELLOW() || '';
|
|
|
|
|
+my $RED = RED() || '';
|
|
|
|
|
+my $GREEN = GREEN() || '';
|
|
|
|
|
+my $BLUE = BLUE() || '';
|
|
|
|
|
+my $WHITE = WHITE() || '';
|
|
|
|
|
+my $BOLD = BOLD() || '';
|
|
|
|
|
+my $MAGENTA = MAGENTA() || '';
|
|
|
|
|
|
|
|
|
|
## Connect
|
|
|
|
|
|
|
|
|
|
@@ -369,6 +371,10 @@
|
|
|
|
|
@@ -372,6 +374,10 @@ while (1)
|
|
|
|
|
require Data::Dumper;
|
|
|
|
|
print Data::Dumper::Dumper([\%config]);
|
|
|
|
|
ReadKey(0);
|
|
|
|
|
+
|
|
|
|
|
+ if (-M $0) { # restart application, if it was modified - for debugging
|
|
|
|
|
+ exec('perl', $0, @ARGV);
|
|
|
|
|
+ }
|
|
|
|
|
+ if (-M $0) { # Restart application, if modified (for debugging)
|
|
|
|
|
+ exec('perl', $0, @ARGV);
|
|
|
|
|
+ }
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
## m - mode swtich to qps
|
|
|
|
|
@@ -377,7 +383,7 @@
|
|
|
|
|
@@ -380,7 +386,7 @@ while (1)
|
|
|
|
|
{
|
|
|
|
|
$config{mode} = 'qps';
|
|
|
|
|
Clear() unless $config{batchmode};
|
|
|
|
|
@@ -48,16 +59,7 @@ $FreeBSD$
|
|
|
|
|
next;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@@ -710,7 +716,7 @@
|
|
|
|
|
##
|
|
|
|
|
if ($config{header})
|
|
|
|
|
{
|
|
|
|
|
- my @recs = Hashes("show status");
|
|
|
|
|
+ my @recs = Hashes("SHOW /*!50002 GLOBAL */ STATUS");
|
|
|
|
|
|
|
|
|
|
## if the server died or we lost connectivity
|
|
|
|
|
if (not @recs)
|
|
|
|
|
@@ -800,8 +806,15 @@
|
|
|
|
|
@@ -803,8 +809,15 @@ sub GetData()
|
|
|
|
|
|
|
|
|
|
## Queries per second...
|
|
|
|
|
|
|
|
|
|
@@ -75,7 +77,7 @@ $FreeBSD$
|
|
|
|
|
|
|
|
|
|
my @t = localtime(time);
|
|
|
|
|
|
|
|
|
|
@@ -819,26 +832,26 @@
|
|
|
|
|
@@ -822,26 +835,26 @@ sub GetData()
|
|
|
|
|
$lines_left--;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@@ -112,56 +114,79 @@ $FreeBSD$
|
|
|
|
|
( # slow now (qps)
|
|
|
|
|
($STATUS{Slow_queries} ) ?
|
|
|
|
|
( $STATUS{Slow_queries} - $OLD_STATUS{Slow_queries} ) / $t_delta :
|
|
|
|
|
@@ -889,8 +902,42 @@
|
|
|
|
|
@@ -851,7 +864,7 @@ sub GetData()
|
|
|
|
|
$STATUS{Threads_running},
|
|
|
|
|
$STATUS{Threads_cached},
|
|
|
|
|
|
|
|
|
|
- (100 * ($STATUS{Com_select} - $OLD_STATUS{Com_select} +
|
|
|
|
|
+ (100 * ($STATUS{Com_select} - $OLD_STATUS{Com_select} +
|
|
|
|
|
($STATUS{Qcache_hits}||0) - ($OLD_STATUS{Qcache_hits}||0)
|
|
|
|
|
) ) / ($q_diff ),
|
|
|
|
|
(100 * ($STATUS{Com_insert} - $OLD_STATUS{Com_insert} +
|
|
|
|
|
@@ -869,11 +882,11 @@ sub GetData()
|
|
|
|
|
|
|
|
|
|
if ($have_query_cache and $STATUS{Com_select} and $query_cache_hits)
|
|
|
|
|
{
|
|
|
|
|
- printf(" Cache Hits: %-5s Hits/s: %4.1f Hits now: %5.1f Ratio: %4.1f%% Ratio now: %4.1f%% \n",
|
|
|
|
|
+ printf(" Cache Hits: %-5s Hits/s: %4.1f Hits now: %5.1f Ratio: %4.1f%% Ratio now: %4.1f%% \n",
|
|
|
|
|
make_short($STATUS{Qcache_hits}), # cache hits
|
|
|
|
|
$STATUS{Qcache_hits} / $STATUS{Uptime}, # hits / sec
|
|
|
|
|
($t_delta) ? ($STATUS{Qcache_hits} - $OLD_STATUS{Qcache_hits}) / $t_delta : 0, # now / s
|
|
|
|
|
- # ratio:
|
|
|
|
|
+ # ratio:
|
|
|
|
|
100 * ($STATUS{Qcache_hits}) / ($STATUS{Qcache_hits} + $STATUS{Com_select} ),
|
|
|
|
|
($t_delta) ? # ratio now
|
|
|
|
|
100 * ($STATUS{Qcache_hits} - $OLD_STATUS{Qcache_hits} ) /
|
|
|
|
|
@@ -892,7 +905,42 @@ sub GetData()
|
|
|
|
|
make_short(($STATUS{Bytes_received} - $OLD_STATUS{Bytes_received}) / $t_delta ),
|
|
|
|
|
make_short(($STATUS{Bytes_sent} - $OLD_STATUS{Bytes_sent}) / $t_delta ))
|
|
|
|
|
if ($t_delta);
|
|
|
|
|
- print "\n\n";
|
|
|
|
|
+ print "\n";
|
|
|
|
|
|
|
|
|
|
+
|
|
|
|
|
+ my @master_status = Hashes("show master status");
|
|
|
|
|
+ if (@master_status)
|
|
|
|
|
+ {
|
|
|
|
|
+ foreach my $m (@master_status) {
|
|
|
|
|
+ print " Master: $m->{File}/$m->{Position} ",
|
|
|
|
|
+ "do: ", GREEN(), "$m->{Binlog_Do_DB} ", RESET(),
|
|
|
|
|
+ "ign: ", MAGENTA(), $m->{Binlog_Ignore_DB}, RESET(), "\n";
|
|
|
|
|
+ #$line_prefix = ' ' x length($line_prefix);
|
|
|
|
|
+ $lines_left--;
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ foreach my $m (@master_status) {
|
|
|
|
|
+ print " Master: $m->{File}/$m->{Position} ",
|
|
|
|
|
+ "do: ", GREEN(), "$m->{Binlog_Do_DB} ", RESET(),
|
|
|
|
|
+ "ign: ", MAGENTA(), $m->{Binlog_Ignore_DB}, RESET(), "\n";
|
|
|
|
|
+ #$line_prefix = ' ' x length($line_prefix);
|
|
|
|
|
+ $lines_left--;
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ my @slave_status = Hashes("show slave status");
|
|
|
|
|
+ if (@slave_status)
|
|
|
|
|
+ {
|
|
|
|
|
+ my $line_prefix = " Slave: ";
|
|
|
|
|
+ foreach my $s (@slave_status) {
|
|
|
|
|
+ print $line_prefix, BOLD(),
|
|
|
|
|
+ ($s->{Slave_IO_Running} eq 'Yes'
|
|
|
|
|
+ && $s->{Slave_SQL_Running} eq 'Yes'
|
|
|
|
|
+ && $s->{Last_Errno} == 0
|
|
|
|
|
+ ? ($s->{Seconds_Behind_Master} > 60 ? BOLD('WARN') : GREEN('OK ')) : RED('ERR ')
|
|
|
|
|
+ ), RESET(),
|
|
|
|
|
+ " Delay: ",
|
|
|
|
|
+ defined($s->{Seconds_Behind_Master}) ? sprintf('%03d:%02d', int($s->{Seconds_Behind_Master} / 60), $s->{Seconds_Behind_Master} % 60) : '---:--',
|
|
|
|
|
+ " $s->{Master_User}\@$s->{Master_Host}: ",
|
|
|
|
|
+ "$s->{Master_Log_File}/$s->{Read_Master_Log_Pos} ",
|
|
|
|
|
+ "\n";
|
|
|
|
|
+ #$line_prefix = ' ' x length($line_prefix);
|
|
|
|
|
+ $lines_left--;
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ my $line_prefix = " Slave: ";
|
|
|
|
|
+ foreach my $s (@slave_status) {
|
|
|
|
|
+ print $line_prefix, BOLD(),
|
|
|
|
|
+ ($s->{Slave_IO_Running} eq 'Yes'
|
|
|
|
|
+ && $s->{Slave_SQL_Running} eq 'Yes'
|
|
|
|
|
+ && $s->{Last_Errno} == 0
|
|
|
|
|
+ ? ($s->{Seconds_Behind_Master} > 60 ? BOLD('WARN') : GREEN('OK ')) : RED('ERR ')
|
|
|
|
|
+ ), RESET(),
|
|
|
|
|
+ " Delay: ",
|
|
|
|
|
+ defined($s->{Seconds_Behind_Master}) ? sprintf('%03d:%02d', int($s->{Seconds_Behind_Master} / 60), $s->{Seconds_Behind_Master} % 60) : '---:--',
|
|
|
|
|
+ " $s->{Master_User}\@$s->{Master_Host}: ",
|
|
|
|
|
+ "$s->{Master_Log_File}/$s->{Read_Master_Log_Pos} ",
|
|
|
|
|
+ "\n";
|
|
|
|
|
+ #$line_prefix = ' ' x length($line_prefix);
|
|
|
|
|
+ $lines_left--;
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ print "\n";
|
|
|
|
|
|
|
|
|
|
$lines_left--;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@@ -904,32 +951,22 @@
|
|
|
|
|
@@ -907,32 +955,22 @@ sub GetData()
|
|
|
|
|
## Threads
|
|
|
|
|
##
|
|
|
|
|
|
|
|
|
|
- #my $sz = $width - 52;
|
|
|
|
|
- my @sz = (8, 9, 15, 10, 9, 6);
|
|
|
|
|
- my @sz = (9, 9, 15, 10, 9, 6);
|
|
|
|
|
- my $used = scalar(@sz) + Sum(@sz);
|
|
|
|
|
- my $free = $width - $used;
|
|
|
|
|
-
|
|
|
|
|
@@ -173,7 +198,7 @@ $FreeBSD$
|
|
|
|
|
- print RESET();
|
|
|
|
|
-
|
|
|
|
|
- ## Id User Host DB
|
|
|
|
|
- printf "%8s %9s %15s %10s %9s %6s %-${free}s\n",
|
|
|
|
|
- printf "%9s %9s %15s %10s %9s %6s %-${free}s\n",
|
|
|
|
|
- '--','----','-------','--','----', '---', '----------';
|
|
|
|
|
-
|
|
|
|
|
$lines_left -= 2;
|
|
|
|
|
@@ -188,28 +213,28 @@ $FreeBSD$
|
|
|
|
|
{
|
|
|
|
|
last if not $lines_left;
|
|
|
|
|
|
|
|
|
|
+ if ($max_id < $thread->{Id}) {
|
|
|
|
|
+ $max_id = $thread->{Id};
|
|
|
|
|
+ }
|
|
|
|
|
+ if ($max_id < $thread->{Id}) {
|
|
|
|
|
+ $max_id = $thread->{Id};
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
## Drop Domain Name, unless it looks like an IP address. If
|
|
|
|
|
## it's an IP, we'll strip the port number because it's rarely
|
|
|
|
|
## interesting.
|
|
|
|
|
@@ -952,8 +989,11 @@
|
|
|
|
|
@@ -955,8 +993,11 @@ sub GetData()
|
|
|
|
|
{
|
|
|
|
|
$thread->{Host} =~ s/:\d+$//;
|
|
|
|
|
my $host = gethostbyaddr(inet_aton($thread->{Host}), AF_INET);
|
|
|
|
|
- $host =~ s/^([^.]+).*/$1/;
|
|
|
|
|
- $thread->{Host} = $host;
|
|
|
|
|
+ if ($host)
|
|
|
|
|
+ {
|
|
|
|
|
+ $host =~ s/^([^.]+).*/$1/;
|
|
|
|
|
+ $thread->{Host} = $host;
|
|
|
|
|
+ }
|
|
|
|
|
+ if ($host)
|
|
|
|
|
+ {
|
|
|
|
|
+ $host =~ s/^([^.]+).*/$1/;
|
|
|
|
|
+ $thread->{Host} = $host;
|
|
|
|
|
+ }
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
## Fix possible undefs
|
|
|
|
|
@@ -990,6 +1030,23 @@
|
|
|
|
|
@@ -993,6 +1034,23 @@ sub GetData()
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@@ -233,16 +258,16 @@ $FreeBSD$
|
|
|
|
|
## Sort by idle time (closest thing to CPU usage I can think of).
|
|
|
|
|
|
|
|
|
|
my @sorted;
|
|
|
|
|
@@ -1044,7 +1101,7 @@
|
|
|
|
|
@@ -1047,7 +1105,7 @@ sub GetData()
|
|
|
|
|
print GREEN() if $thread->{Command} eq 'Connect';
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
- printf "%8d %9.9s %15.15s %10.10s %9d %6.6s %-${free}.${free}s\n",
|
|
|
|
|
- printf "%9d %9.9s %15.15s %10.10s %9d %6.6s %-${free}.${free}s\n",
|
|
|
|
|
+ printf "%${max_id_size}d %9.9s %15.15s %10.10s %9d %6.6s %-${free}.${free}s\n",
|
|
|
|
|
$thread->{Id}, $thread->{User}, $thread->{Host}, $thread->{db},
|
|
|
|
|
$thread->{Time}, $thread->{Command}, $smInfo;
|
|
|
|
|
|
|
|
|
|
@@ -1099,8 +1156,8 @@
|
|
|
|
|
@@ -1102,8 +1160,8 @@ sub GetInnoDBStatus()
|
|
|
|
|
my @data = Hashes("SHOW INNODB STATUS");
|
|
|
|
|
|
|
|
|
|
open P, "|$config{pager}" or die "$!";
|
|
|
|
|
|