Commit db5b51fb authored by Jean Weisbuch's avatar Jean Weisbuch Committed by Sergey Vojtovich

mysqlreport update to 4.0, see MDEV-573 for more informations

parent f22f2a62
#!/usr/bin/perl -w #!/usr/bin/perl -w
# mysqlreport v3.5 Apr 16 2008 # mysqlreport v4.0 Oct 23 2015
# http://hackmysql.com/mysqlreport # http://hackmysql.com/mysqlreport
# mysqlreport makes an easy-to-read report of important MySQL status values. # mysqlreport makes an easy-to-read report of important MySQL/MariaDB status values.
# Copyright 2006-2008 Daniel Nichter # Copyright 2006-2008 Daniel Nichter
# Copyright 2012-2015 Jean Weisbuch
# #
# This program is free software; you can redistribute it and/or # This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License # modify it under the terms of the GNU General Public License
...@@ -36,16 +37,19 @@ my ($stat_name, $stat_val, $stat_label); ...@@ -36,16 +37,19 @@ my ($stat_name, $stat_val, $stat_label);
my $MySQL_version; my $MySQL_version;
my (%stats, %vars); # SHOW STATUS, SHOW VARIABLES my (%stats, %vars); # SHOW STATUS, SHOW VARIABLES
my (%DMS_vals, %Com_vals, %ib_vals); my (%DMS_vals, %Com_vals, %ib_vals);
my ($dbh, $query); my $dbh;
my ($questions, $key_read_ratio, $key_write_ratio, $dms, $slow_query_t); my ($questions, $key_read_ratio, $key_write_ratio, $dms, $slow_query_t);
my ($key_cache_block_size, $key_buffer_used, $key_buffer_usage); my ($key_cache_block_size, $key_buffer_used, $key_buffer_usage);
my ($qc_mem_used, $qc_hi_r, $qc_ip_r); # Query Cache my ($qc_mem_used, $qc_hi_r, $qc_ip_r); # Query Cache
my $have_innodb_vals;
my ($ib_bp_used, $ib_bp_total, $ib_bp_read_ratio); my ($ib_bp_used, $ib_bp_total, $ib_bp_read_ratio);
my ($relative_live, $relative_infiles); my ($relative_live, $relative_infiles);
my $real_uptime; my $real_uptime;
my (%stats_present, %stats_past); # For relative reports my (%stats_present, %stats_past); # For relative reports
my ($pagecache_read_ratio, $pagecache_write_ratio, $pagecache_block_size, $pagecache_buffer_used, $pagecache_buffer_usage); # AriaDB pagecache stats
my ($binlog_cache_ratio, $binlog_stmt_cache_ratio); # binary log cache
my $dbms;
my ($rows, $rows_using_indexes);
GetOptions ( GetOptions (
\%op, \%op,
"user=s", "user=s",
...@@ -127,13 +131,19 @@ $| = 1 if ($op{'detach'} || $relative_live); ...@@ -127,13 +131,19 @@ $| = 1 if ($op{'detach'} || $relative_live);
print "tmp file: $tmpfile\n" if $op{debug}; print "tmp file: $tmpfile\n" if $op{debug};
# Connect to MySQL # Connect to MySQL/MariaDB
if(!$op{'infile'} && !$relative_infiles) if(!$op{'infile'} && !$relative_infiles)
{ {
connect_to_MySQL(); connect_to_MySQL();
} }
$have_innodb_vals = 1; # This might be set to 0 later in get_MySQL_version() my $have_innodb_vals = 1; # This might be set to 0 later in get_MySQL_version()
my $have_aria_vals = 0;
my $have_subquerycache_vals = 0;
my $have_binlog_vals = 0;
my $have_tokudb_engine = 0;
my $use_thread_pool = 0;
my $use_xtradb = 0;
if(defined $op{'r'}) if(defined $op{'r'})
{ {
...@@ -163,6 +173,9 @@ else ...@@ -163,6 +173,9 @@ else
set_myisam_vals(); set_myisam_vals();
set_ib_vals() if $have_innodb_vals; set_ib_vals() if $have_innodb_vals;
set_aria_vals() if $have_aria_vals;
set_subquerycache_vals() if $have_subquerycache_vals;
set_binlog_vals() if $have_binlog_vals;
write_report(); write_report();
} }
...@@ -177,8 +190,8 @@ exit; ...@@ -177,8 +190,8 @@ exit;
sub show_help_and_exit sub show_help_and_exit
{ {
print <<"HELP"; print <<"HELP";
mysqlreport v3.5 Apr 16 2008 mysqlreport v4.0 Oct 23 2015
mysqlreport makes an easy-to-read report of important MySQL status values. mysqlreport makes an easy-to-read report of important MySQL/MariaDB status values.
Command line options (abbreviations work): Command line options (abbreviations work):
--user USER Connect to MySQL as USER --user USER Connect to MySQL as USER
...@@ -264,6 +277,9 @@ sub collect_reports ...@@ -264,6 +277,9 @@ sub collect_reports
set_myisam_vals(); set_myisam_vals();
set_ib_vals() if $have_innodb_vals; set_ib_vals() if $have_innodb_vals;
set_aria_vals() if $have_aria_vals;
set_subquerycache_vals() if $have_subquerycache_vals;
set_binlog_vals() if $have_binlog_vals;
print "#\n# Beginning report, 0 0:0:0\n#\n"; print "#\n# Beginning report, 0 0:0:0\n#\n";
...@@ -403,6 +419,9 @@ sub relative_infile_report ...@@ -403,6 +419,9 @@ sub relative_infile_report
set_myisam_vals(); set_myisam_vals();
set_ib_vals() if $have_innodb_vals; set_ib_vals() if $have_innodb_vals;
set_aria_vals() if $have_aria_vals;
set_subquerycache_vals() if $have_subquerycache_vals;
set_binlog_vals() if $have_binlog_vals;
print "#\n# Beginning report, 0 0:0:0\n#\n"; print "#\n# Beginning report, 0 0:0:0\n#\n";
...@@ -422,7 +441,7 @@ sub get_vals ...@@ -422,7 +441,7 @@ sub get_vals
{ {
print "get_vals\n" if $op{debug}; print "get_vals\n" if $op{debug};
my @row; my (@row, $query);
# Get status values # Get status values
if($MySQL_version >= 50002) if($MySQL_version >= 50002)
...@@ -434,7 +453,9 @@ sub get_vals ...@@ -434,7 +453,9 @@ sub get_vals
$query = $dbh->prepare("SHOW STATUS;"); $query = $dbh->prepare("SHOW STATUS;");
} }
$query->execute(); $query->execute();
while(@row = $query->fetchrow_array()) { $stats{$row[0]} = $row[1]; } # To avoid problems if the variable capitalization would change (eg. TokuDB on MariaDB 5.5 => 10.0), the $stats index is forced to have its first char uppercase and the rest lowercase
while(@row = $query->fetchrow_array()) { $stats{ucfirst(lc($row[0]))} = $row[1]; }
$query->finish();
$real_uptime = $stats{'Uptime'}; $real_uptime = $stats{'Uptime'};
} }
...@@ -443,18 +464,23 @@ sub get_vars ...@@ -443,18 +464,23 @@ sub get_vars
{ {
print "get_vars\n" if $op{debug}; print "get_vars\n" if $op{debug};
my @row; my (@row, $query);
# Get server system variables # Get server system variables
$query = $dbh->prepare("SHOW VARIABLES;"); $query = $dbh->prepare("SHOW VARIABLES;");
$query->execute(); $query->execute();
while(@row = $query->fetchrow_array()) { $vars{$row[0]} = $row[1]; } while(@row = $query->fetchrow_array()) { $vars{$row[0]} = $row[1]; }
$query->finish();
# table_cache was renamed to table_open_cache in MySQL 5.1.3 # table_cache was renamed to table_open_cache in MySQL 5.1.3
if($MySQL_version >= 50103) if($MySQL_version >= 50103)
{ {
$vars{'table_cache'} = $vars{'table_open_cache'}; $vars{'table_cache'} = $vars{'table_open_cache'};
} }
# log_slow_queries was renamed to slow_query_log in MySQL 5.1.29
if($MySQL_version >= 50129)
{
$vars{'log_slow_queries'} = $vars{'slow_query_log'};
}
} }
sub read_infile sub read_infile
...@@ -507,10 +533,10 @@ sub read_infile ...@@ -507,10 +533,10 @@ sub read_infile
else { print "read_infile: ignore '$_'\n" if $op{debug}; } else { print "read_infile: ignore '$_'\n" if $op{debug}; }
last if $1 eq 'Uptime'; # exit while() if end of status values last if $1 eq 'Uptime'; # exit while() if end of status values
$_ = <INFILE>; # otherwise, read next line of status values $_ = <INFILE>; # otherwise, read next line of status values
} }
} }
elsif($1 eq 'back_log') # system variable values elsif($1 eq 'back_log') # system variable values
{ {
print "read_infile: start vars\n" if $op{debug}; print "read_infile: start vars\n" if $op{debug};
...@@ -525,7 +551,7 @@ sub read_infile ...@@ -525,7 +551,7 @@ sub read_infile
else { print "read_infile: ignore '$_'\n" if $op{debug}; } else { print "read_infile: ignore '$_'\n" if $op{debug}; }
last if $1 eq 'wait_timeout'; # exit while() if end of vars last if $1 eq 'wait_timeout'; # exit while() if end of vars
$_ = <INFILE>; # otherwise, read next line of vars $_ = <INFILE>; # otherwise, read next line of vars
} }
} }
elsif($1 eq '=') # old style, manually added system variable values elsif($1 eq '=') # old style, manually added system variable values
...@@ -542,7 +568,7 @@ sub read_infile ...@@ -542,7 +568,7 @@ sub read_infile
} }
else { print "read_infile: ignore '$_'\n" if $op{debug}; } else { print "read_infile: ignore '$_'\n" if $op{debug}; }
$_ = <INFILE>; # otherwise, read next line of old vars $_ = <INFILE>; # otherwise, read next line of old vars
} }
redo; redo;
...@@ -572,25 +598,116 @@ sub get_MySQL_version ...@@ -572,25 +598,116 @@ sub get_MySQL_version
if($op{'infile'} || $relative_infiles) if($op{'infile'} || $relative_infiles)
{ {
($major, $minor, $patch) = ($vars{'version'} =~ /(\d{1,2})\.(\d{1,2})\.(\d{1,2})/); ($major, $minor, $patch) = ($vars{'version'} =~ /^(\d{1,2})\.(\d{1,2})\.(\d{1,2})/);
if($vars{'version'} =~ /^\d{1,2}\.\d{1,2}\.\d{1,2}-MariaDB/) {
print "MariaDB detected\n" if $op{debug};
$dbms = "MariaDB";
} else {
$dbms = "MySQL";
}
} }
else else
{ {
my @row; my (@row, $query);
$query = $dbh->prepare("SHOW VARIABLES LIKE 'version';"); $query = $dbh->prepare("SHOW VARIABLES LIKE 'version';");
$query->execute(); $query->execute();
@row = $query->fetchrow_array(); @row = $query->fetchrow_array();
($major, $minor, $patch) = ($row[1] =~ /(\d{1,2})\.(\d{1,2})\.(\d{1,2})/); $query->finish();
($major, $minor, $patch) = ($row[1] =~ /^(\d{1,2})\.(\d{1,2})\.(\d{1,2})/);
if($row[1] =~ /^\d{1,2}\.\d{1,2}\.\d{1,2}-MariaDB/)
{
print "MariaDB detected\n" if $op{debug};
$dbms = "MariaDB";
}
else
{
$dbms = "MySQL";
}
} }
# The major version number is kept as is while the minor version and the revision number are forced to 2 digits
# e.g.: 5.5.9 will be 50509, 10.0.5 will be 100005 and 10.1.23 will be 100123
$MySQL_version = sprintf("%d%02d%02d", $major, $minor, $patch); $MySQL_version = sprintf("%d%02d%02d", $major, $minor, $patch);
print "Version $MySQL_version\n" if $op{debug};
# Innodb_ status values were added in 5.0.2 # Innodb_ status values were added in 5.0.2
if($MySQL_version < 50002) if($MySQL_version < 50002)
{ {
$have_innodb_vals = 0; $have_innodb_vals = 0;
print "get_MySQL_version: no InnoDB reports because MySQL version is older than 5.0.2\n" if $op{debug}; print "get_MySQL_version: no InnoDB reports because MySQL version is older than 5.0.2\n" if $op{debug};
} else {
$have_innodb_vals = $dbh->selectall_arrayref("SELECT SUPPORT FROM information_schema.engines WHERE ENGINE = 'InnoDB';", undef)->[0][0];
if(defined($have_innodb_vals) && ($have_innodb_vals eq "YES" || $have_innodb_vals eq "DEFAULT"))
{
print "InnoDB detected\n" if $op{debug};
$have_innodb_vals = 1;
} else {
print "InnoDB is not activated\n" if $op{debug};
$have_innodb_vals = 0;
}
}
if($dbms eq "MariaDB") {
$have_aria_vals = $dbh->selectall_arrayref("SELECT SUPPORT FROM information_schema.engines WHERE ENGINE = 'Aria';", undef)->[0][0];
if(defined($have_aria_vals) && $have_aria_vals eq "YES")
{
print "Aria engine detected\n" if $op{debug};
$have_aria_vals = 1;
} else {
$have_aria_vals = 0;
}
# MariaDB 5.3+, activated by default since 5.3.2
$have_subquerycache_vals = $dbh->selectall_arrayref("SELECT VARIABLE_VALUE REGEXP ',subquery_cache=on,|^subquery_cache=on,|,subquery_cache=on\$' AS SUBQUERY_CACHE FROM information_schema.global_variables WHERE VARIABLE_NAME = 'optimizer_switch';", undef)->[0][0];
if(defined($have_subquerycache_vals) && $have_subquerycache_vals eq "1")
{
print "Subquery cache is activated\n" if $op{debug};
$have_subquerycache_vals = 1;
} else {
$have_subquerycache_vals = 0;
}
}
if($MySQL_version >= 50000)
{
# These checks use the 'information_schema' virtual database that has been added on MySQL 5.0
# MariaDB 5.5.21+ and Percona Server 5.5.30+ use the same thread pool implementation
$use_thread_pool = $dbh->selectall_arrayref("SELECT VARIABLE_VALUE FROM information_schema.global_variables WHERE VARIABLE_NAME = 'thread_handling';", undef)->[0][0];
if(defined($use_thread_pool) && $use_thread_pool eq "pool-of-threads") {
print "Thread pool is used\n" if $op{debug};
$use_thread_pool = 1;
} else {
$use_thread_pool = 0;
}
$have_binlog_vals = $dbh->selectall_arrayref("SELECT VARIABLE_VALUE FROM information_schema.global_variables WHERE VARIABLE_NAME = 'log_bin';", undef)->[0][0];
if(defined($have_binlog_vals) && $have_binlog_vals eq "ON")
{
print "Binary log is activated\n" if $op{debug};
$have_binlog_vals = 1;
} else {
$have_binlog_vals = 0;
}
$have_tokudb_engine = $dbh->selectall_arrayref("SELECT SUPPORT FROM information_schema.engines WHERE ENGINE = 'TokuDB';", undef)->[0][0];
if(defined($have_tokudb_engine) && ($have_tokudb_engine eq "YES" || $have_tokudb_engine eq "DEFAULT"))
{
print "TokuDB detected\n" if $op{debug};
$have_tokudb_engine = 1;
} else {
$have_tokudb_engine = 0;
}
$use_xtradb = $dbh->selectall_arrayref("SELECT 1 FROM INFORMATION_SCHEMA.ENGINES WHERE ENGINE = 'InnoDB' AND COMMENT LIKE 'Percona-XtraDB%';", undef)->[0][0];
if(defined($use_xtradb) && $use_xtradb eq "1")
{
print "XtraDB detected\n" if $op{debug};
$use_xtradb = 1;
} else {
$use_xtradb = 0;
}
} }
} }
...@@ -598,6 +715,7 @@ sub set_myisam_vals ...@@ -598,6 +715,7 @@ sub set_myisam_vals
{ {
print "set_myisam_vals\n" if $op{debug}; print "set_myisam_vals\n" if $op{debug};
# should be moved elsewere
$questions = $stats{'Questions'}; $questions = $stats{'Questions'};
$key_read_ratio = sprintf "%.2f", $key_read_ratio = sprintf "%.2f",
...@@ -638,7 +756,6 @@ sub set_myisam_vals ...@@ -638,7 +756,6 @@ sub set_myisam_vals
$dms = $DMS_vals{SELECT} + $DMS_vals{INSERT} + $DMS_vals{REPLACE} + $DMS_vals{UPDATE} + $DMS_vals{DELETE}; $dms = $DMS_vals{SELECT} + $DMS_vals{INSERT} + $DMS_vals{REPLACE} + $DMS_vals{UPDATE} + $DMS_vals{DELETE};
$slow_query_t = format_u_time($vars{long_query_time}); $slow_query_t = format_u_time($vars{long_query_time});
} }
sub set_ib_vals sub set_ib_vals
...@@ -658,6 +775,46 @@ sub set_ib_vals ...@@ -658,6 +775,46 @@ sub set_ib_vals
0); 0);
} }
sub set_aria_vals
{
print "set_aria_vals\n" if $op{debug};
$pagecache_read_ratio = sprintf "%.2f",
($stats{'Aria_pagecache_read_requests'} ?
100 - ($stats{'Aria_pagecache_reads'} / $stats{'Aria_pagecache_read_requests'}) * 100 :
0);
$pagecache_write_ratio = sprintf "%.2f",
($stats{'Aria_pagecache_write_requests'} ?
100 - ($stats{'Aria_pagecache_writes'} / $stats{'Aria_pagecache_write_requests'}) * 100 :
0);
$pagecache_block_size = (defined $vars{'aria_block_size'} ?
$vars{'aria_block_size'} :
1024);
$pagecache_buffer_used = $stats{'Aria_pagecache_blocks_used'} * $pagecache_block_size;
$pagecache_buffer_usage = $vars{'aria_pagecache_buffer_size'} -
($stats{'Aria_pagecache_blocks_unused'} * $pagecache_block_size);
}
sub set_subquerycache_vals
{
print "set_subquerycache_vals\n" if $op{debug};
}
sub set_binlog_vals
{
print "set_binlog_vals\n" if $op{debug};
if($stats{'Binlog_cache_use'} gt 0) { $binlog_cache_ratio = $stats{'Binlog_cache_disk_use'} / $stats{'Binlog_cache_use'}; }
else { $binlog_cache_ratio = 0; }
if(defined($stats{'Binlog_stmt_cache_use'}) && $stats{'Binlog_stmt_cache_use'} gt 0) { $binlog_stmt_cache_ratio = $stats{'Binlog_stmt_cache_disk_use'} / $stats{'Binlog_stmt_cache_use'}; }
else { $binlog_stmt_cache_ratio = 0; }
}
sub write_relative_report sub write_relative_report
{ {
print "write_relative_report\n" if $op{debug}; print "write_relative_report\n" if $op{debug};
...@@ -708,6 +865,10 @@ sub write_relative_report ...@@ -708,6 +865,10 @@ sub write_relative_report
$stats{'Innodb_row_lock_time_max'} = $stats_present{'Innodb_row_lock_time_max'}; $stats{'Innodb_row_lock_time_max'} = $stats_present{'Innodb_row_lock_time_max'};
} }
} }
if($have_aria_vals)
{
$stats{'Aria_pagecache_blocks_used'} = $stats_present{'Aria_pagecache_blocks_used'};
}
get_Com_values(); get_Com_values();
...@@ -715,6 +876,9 @@ sub write_relative_report ...@@ -715,6 +876,9 @@ sub write_relative_report
set_myisam_vals(); set_myisam_vals();
set_ib_vals() if $have_innodb_vals; set_ib_vals() if $have_innodb_vals;
set_aria_vals() if $have_aria_vals;
set_subquerycache_vals() if $have_subquerycache_vals;
set_binlog_vals() if $have_binlog_vals;
write_report(); write_report();
} }
...@@ -731,15 +895,27 @@ sub write_report ...@@ -731,15 +895,27 @@ sub write_report
$~ = 'SLOW_DMS', write; $~ = 'SLOW_DMS', write;
write_DMS(); write_DMS();
write_Com(); write_Com();
write_Rows();
$~ = 'SAS', write; $~ = 'SAS', write;
write_qcache(); write_qcache();
$~ = 'REPORT_END', write; $~ = 'REPORT_END', write;
$~ = 'THREADS', write;
if($use_thread_pool)
{
$~ = 'THREADPOOL', write;
} else {
$~ = 'THREADPERCONNECTION', write;
}
$~ = 'TAB', write; $~ = 'TAB', write;
write_InnoDB() if $have_innodb_vals; write_InnoDB() if $have_innodb_vals;
write_Aria() if $have_aria_vals;
write_Subquerycache() if $have_subquerycache_vals;
write_Binlog() if $have_binlog_vals;
write_TokuDB() if $have_tokudb_engine;
} }
sub sec_to_dhms # Seconds to days hours:minutes:seconds sub sec_to_dhms # Seconds to days+hours:minutes:seconds
{ {
my $s = shift; my $s = shift;
my ($d, $h, $m) = (0, 0, 0); my ($d, $h, $m) = (0, 0, 0);
...@@ -761,7 +937,7 @@ sub sec_to_dhms # Seconds to days hours:minutes:seconds ...@@ -761,7 +937,7 @@ sub sec_to_dhms # Seconds to days hours:minutes:seconds
$m = int $s / 60; $m = int $s / 60;
$s -= $m * 60; $s -= $m * 60;
return "$d $h:$m:$s"; return "$d+$h:$m:$s";
} }
sub make_short sub make_short
...@@ -782,12 +958,11 @@ sub make_short ...@@ -782,12 +958,11 @@ sub make_short
} }
# What began as a simple but great idea has become the new standard: # What began as a simple but great idea has become the new standard:
# long_query_time in microseconds. For MySQL 5.1.21+ and 6.0.4+ this # long_query_time in microseconds. For MySQL 5.1.21+ this is now
# is now standard. For 4.1 and 5.0 patches, the architects of this # standard. For 4.1 and 5.0 patches, the architects of this idea
# idea provide: http://www.mysqlperformanceblog.com/mysql-patches/ # provide: http://www.mysqlperformanceblog.com/mysql-patches/
# Relevant notes in MySQL manual: # Relevant notes in MySQL manual:
# http://dev.mysql.com/doc/refman/5.1/en/slow-query-log.html # http://dev.mysql.com/doc/refman/5.1/en/slow-query-log.html
# http://dev.mysql.com/doc/refman/6.0/en/slow-query-log.html
# #
# The format_u_time sub simply beautifies long_query_time. # The format_u_time sub simply beautifies long_query_time.
...@@ -848,7 +1023,7 @@ sub email_report # Email given report to $op{'email'} ...@@ -848,7 +1023,7 @@ sub email_report # Email given report to $op{'email'}
open SENDMAIL, "|/usr/sbin/sendmail -t"; open SENDMAIL, "|/usr/sbin/sendmail -t";
print SENDMAIL "From: mysqlreport\n"; print SENDMAIL "From: mysqlreport\n";
print SENDMAIL "To: $op{email}\n"; print SENDMAIL "To: $op{email}\n";
print SENDMAIL "Subject: MySQL status report on " . ($mycnf{'host'} || 'localhost') . "\n\n"; print SENDMAIL "Subject: $dbms status report on " . ($mycnf{'host'} || 'localhost') . "\n\n";
print SENDMAIL `cat $report`; print SENDMAIL `cat $report`;
close SENDMAIL; close SENDMAIL;
} }
...@@ -979,6 +1154,7 @@ sub write_qcache ...@@ -979,6 +1154,7 @@ sub write_qcache
# ergo this method is slightly more reliable # ergo this method is slightly more reliable
return if not exists $vars{'query_cache_size'}; return if not exists $vars{'query_cache_size'};
return if $vars{'query_cache_size'} == 0; return if $vars{'query_cache_size'} == 0;
return if defined($vars{'query_cache_type'}) and $vars{'query_cache_type'} eq 'OFF';
$qc_mem_used = $vars{'query_cache_size'} - $stats{'Qcache_free_memory'}; $qc_mem_used = $vars{'query_cache_size'} - $stats{'Qcache_free_memory'};
$qc_hi_r = sprintf "%.2f", $stats{'Qcache_hits'} / ($stats{'Qcache_inserts'} ||= 1); $qc_hi_r = sprintf "%.2f", $stats{'Qcache_hits'} / ($stats{'Qcache_inserts'} ||= 1);
...@@ -988,6 +1164,36 @@ sub write_qcache ...@@ -988,6 +1164,36 @@ sub write_qcache
write; write;
} }
sub write_Subquerycache
{
print "write_Subquerycache\n" if $op{debug};
return if not defined $stats{'Subquery_cache_hit'};
return if $stats{'Subquery_cache_hit'} == 0 && $stats{'Subquery_cache_miss'} == 0;
$~ = 'SUBQUERYCACHE';
write;
}
sub write_Binlog
{
print "write_Binlog\n" if $op{debug};
return if $binlog_cache_ratio == 0 && $binlog_stmt_cache_ratio == 0;
$~ = 'BINLOG';
write;
}
sub write_TokuDB
{
print "write_TokuDB\n" if $op{debug};
return if $stats{'Tokudb_cachetable_size_current'} == 0;
$~ = 'TOKUDB';
write;
}
sub write_InnoDB sub write_InnoDB
{ {
print "write_InnoDB\n" if $op{debug}; print "write_InnoDB\n" if $op{debug};
...@@ -998,6 +1204,11 @@ sub write_InnoDB ...@@ -998,6 +1204,11 @@ sub write_InnoDB
$~ = 'IB'; $~ = 'IB';
write; write;
if($use_xtradb)
{
$~ = 'IB_XTRADB';
write;
}
# Innodb_row_lock_ values were added in MySQL 5.0.3 # Innodb_row_lock_ values were added in MySQL 5.0.3
if($MySQL_version >= 50003) if($MySQL_version >= 50003)
...@@ -1005,12 +1216,44 @@ sub write_InnoDB ...@@ -1005,12 +1216,44 @@ sub write_InnoDB
$~ = 'IB_LOCK'; $~ = 'IB_LOCK';
write; write;
} }
if($use_xtradb)
{
$~ = 'IB_LOCK_XTRADB';
write;
}
# Data, Pages, Rows # Data, Pages, Rows
$~ = 'IB_DPR'; $~ = 'IB_DPR';
write; write;
} }
sub write_Aria
{
print "write_Aria\n" if $op{debug};
return if not defined $stats{'Aria_pagecache_blocks_used'};
$~ = 'PAGECACHE_BUFF_MAX';
write;
if($pagecache_buffer_usage != -1) { $~ = 'PAGECACHE_BUFF_USAGE', write }
$~ = 'PAGECACHE_RATIOS';
write;
}
sub write_Rows
{
print "write_Rows\n" if $op{debug};
$rows_using_indexes = $stats{'Handler_read_first'} + $stats{'Handler_read_key'} + $stats{'Handler_read_next'} + $stats{'Handler_read_prev'};
$rows = $rows_using_indexes + $stats{'Handler_read_rnd'} + $stats{'Handler_read_rnd_next'} + $stats{'Sort_rows'};
$~ = 'ROWS';
write;
}
sub have_op sub have_op
{ {
my $key = shift; my $key = shift;
...@@ -1043,19 +1286,17 @@ sub exit_tasks_and_cleanup ...@@ -1043,19 +1286,17 @@ sub exit_tasks_and_cleanup
} }
else else
{ {
if($WIN) { `del $tmpfile`; } unlink $tmpfile;
else { `rm -f $tmpfile`; }
} }
if(!$op{'infile'} && !$relative_infiles) if(!$op{'infile'} && !$relative_infiles)
{ {
if($op{'flush-status'}) if($op{'flush-status'})
{ {
$query = $dbh->prepare("FLUSH STATUS;"); my $query = $dbh->prepare("FLUSH STATUS;");
$query->execute(); $query->execute();
$query->finish();
} }
$query->finish();
$dbh->disconnect(); $dbh->disconnect();
} }
} }
...@@ -1065,19 +1306,19 @@ sub exit_tasks_and_cleanup ...@@ -1065,19 +1306,19 @@ sub exit_tasks_and_cleanup
# #
format MYSQL_TIME = format MYSQL_TIME =
MySQL @<<<<<<<<<<<<<<<< uptime @<<<<<<<<<<< @>>>>>>>>>>>>>>>>>>>>>>>> @<<<<<< @<<<<<<<<<<<<<<<<<< uptime @<<<<<<<<<<< @<<<<<<<<<<<<<<<<<<<<<<<
$vars{'version'}, sec_to_dhms($real_uptime), (($op{infile} || $relative_infiles) ? '' : scalar localtime) $dbms, $vars{'version'}, sec_to_dhms($real_uptime), (($op{infile} || $relative_infiles) ? '' : scalar localtime)
. .
format KEY_BUFF_MAX = format KEY_BUFF_MAX =
__ Key _________________________________________________________________ __ Key _________________________________________________________________
Buffer used @>>>>>> of @>>>>>> %Used: @>>>>> Buffer used @>>>>>> of @>>>>>> %Used: @>>>>>
make_short($key_buffer_used, 1), make_short($vars{'key_buffer_size'}, 1), perc($key_buffer_used, $vars{'key_buffer_size'}) make_short($key_buffer_used, 1), make_short($vars{'key_buffer_size'}, 1), perc($key_buffer_used, $vars{'key_buffer_size'})
. .
format KEY_BUFF_USAGE = format KEY_BUFF_USAGE =
Current @>>>>>> %Usage: @>>>>> Current @>>>>>> %Usage: @>>>>>
make_short($key_buffer_usage, 1), perc($key_buffer_usage, $vars{'key_buffer_size'}) make_short($key_buffer_usage, 1), perc($key_buffer_usage, $vars{'key_buffer_size'})
. .
...@@ -1088,166 +1329,197 @@ Read hit @>>>>>% ...@@ -1088,166 +1329,197 @@ Read hit @>>>>>%
$key_read_ratio $key_read_ratio
__ Questions ___________________________________________________________ __ Questions ___________________________________________________________
Total @>>>>>>>> @>>>>>/s Total @>>>>>>>> @>>>>>/s
make_short($questions), t($questions) make_short($questions), t($questions)
. .
format DTQ = format DTQ =
@<<<<<<< @>>>>>>>> @>>>>>/s @>>>>>> @>>>>> @<<<<<<< @>>>>>>>> @>>>>>/s @>>>>>> @>>>>>
$stat_name, make_short($stat_val), t($stat_val), $stat_label, perc($stat_val, $questions) $stat_name, make_short($stat_val), t($stat_val), $stat_label, perc($stat_val, $questions)
. .
format SLOW_DMS = format SLOW_DMS =
Slow @<<<<<<< @>>>>>> @>>>>>/s @>>>>> %DMS: @>>>>> Log: @>> Slow @<<<<<<< @>>>>>> @>>>>>/s @>>>>> %DMS: @>>>>> Log: @>>
$slow_query_t, make_short($stats{'Slow_queries'}), t($stats{'Slow_queries'}), perc($stats{'Slow_queries'}, $questions), perc($stats{'Slow_queries'}, $dms), $vars{'log_slow_queries'} $slow_query_t, make_short($stats{'Slow_queries'}), t($stats{'Slow_queries'}), perc($stats{'Slow_queries'}, $questions), perc($stats{'Slow_queries'}, $dms), $vars{'log_slow_queries'}
DMS @>>>>>>>> @>>>>>/s @>>>>> DMS @>>>>>>>> @>>>>>/s @>>>>>
make_short($dms), t($dms), perc($dms, $questions) make_short($dms), t($dms), perc($dms, $questions)
. .
format DMS = format DMS =
@<<<<<<< @>>>>>>>> @>>>>>/s @>>>>> @>>>>> @<<<<<<< @>>>>>>>> @>>>>>/s @>>>>> @>>>>>
$stat_name, make_short($stat_val), t($stat_val), perc($stat_val, $questions), perc($stat_val, $dms) $stat_name, make_short($stat_val), t($stat_val), perc($stat_val, $questions), perc($stat_val, $dms)
. .
format COM_1 = format COM_1 =
Com_ @>>>>>>>> @>>>>>/s @>>>>> Com_ @>>>>>>>> @>>>>>/s @>>>>>
make_short($stat_val), t($stat_val), perc($stat_val, $questions) make_short($stat_val), t($stat_val), perc($stat_val, $questions)
. .
format COM_2 = format COM_2 =
@<<<<<<<<<< @>>>>>> @>>>>>/s @>>>>> @<<<<<<<<<< @>>>>>> @>>>>>/s @>>>>>
$stat_name, make_short($stat_val), t($stat_val), perc($stat_val, $questions) $stat_name, make_short($stat_val), t($stat_val), perc($stat_val, $questions)
. .
format SAS = format SAS =
__ SELECT and Sort _____________________________________________________ __ SELECT and Sort _____________________________________________________
Scan @>>>>>> @>>>>/s %SELECT: @>>>>> Scan @>>>>>> @>>>>>/s %SELECT: @>>>>>
make_short($stats{'Select_scan'}), t($stats{'Select_scan'}), perc($stats{'Select_scan'}, $stats{'Com_select'}) make_short($stats{'Select_scan'}), t($stats{'Select_scan'}), perc($stats{'Select_scan'}, $stats{'Com_select'})
Range @>>>>>> @>>>>/s @>>>>> Range @>>>>>> @>>>>>/s @>>>>>
make_short($stats{'Select_range'}), t($stats{'Select_range'}), perc($stats{'Select_range'}, $stats{'Com_select'}) make_short($stats{'Select_range'}), t($stats{'Select_range'}), perc($stats{'Select_range'}, $stats{'Com_select'})
Full join @>>>>>> @>>>>/s @>>>>> Full join @>>>>>> @>>>>>/s @>>>>>
make_short($stats{'Select_full_join'}), t($stats{'Select_full_join'}), perc($stats{'Select_full_join'}, $stats{'Com_select'}) make_short($stats{'Select_full_join'}), t($stats{'Select_full_join'}), perc($stats{'Select_full_join'}, $stats{'Com_select'})
Range check @>>>>>> @>>>>/s @>>>>> Range check @>>>>>> @>>>>>/s @>>>>>
make_short($stats{'Select_range_check'}), t($stats{'Select_range_check'}), perc($stats{'Select_range_check'}, $stats{'Com_select'}) make_short($stats{'Select_range_check'}), t($stats{'Select_range_check'}), perc($stats{'Select_range_check'}, $stats{'Com_select'})
Full rng join @>>>>>> @>>>>/s @>>>>> Full rng join @>>>>>> @>>>>>/s @>>>>>
make_short($stats{'Select_full_range_join'}), t($stats{'Select_full_range_join'}), perc($stats{'Select_full_range_join'}, $stats{'Com_select'}) make_short($stats{'Select_full_range_join'}), t($stats{'Select_full_range_join'}), perc($stats{'Select_full_range_join'}, $stats{'Com_select'})
Sort scan @>>>>>> @>>>>/s Sort scan @>>>>>> @>>>>>/s
make_short($stats{'Sort_scan'}), t($stats{'Sort_scan'}) make_short($stats{'Sort_scan'}), t($stats{'Sort_scan'})
Sort range @>>>>>> @>>>>/s Sort range @>>>>>> @>>>>>/s
make_short($stats{'Sort_range'}), t($stats{'Sort_range'}) make_short($stats{'Sort_range'}), t($stats{'Sort_range'})
Sort mrg pass @>>>>>> @>>>>/s Sort mrg pass @>>>>>> @>>>>>/s
make_short($stats{'Sort_merge_passes'}), t($stats{'Sort_merge_passes'}) make_short($stats{'Sort_merge_passes'}), t($stats{'Sort_merge_passes'})
. .
format QCACHE = format QCACHE =
__ Query Cache _________________________________________________________ __ Query Cache _________________________________________________________
Memory usage @>>>>>> of @>>>>>> %Used: @>>>>> Memory usage @>>>>>> of @>>>>>> %Usage: @>>>>>
make_short($qc_mem_used, 1), make_short($vars{'query_cache_size'}, 1), perc($qc_mem_used, $vars{'query_cache_size'}) make_short($qc_mem_used, 1), make_short($vars{'query_cache_size'}, 1), perc($qc_mem_used, $vars{'query_cache_size'})
Block Fragmnt @>>>>>% Block Fragmnt @>>>>>%
perc($stats{'Qcache_free_blocks'}, $stats{'Qcache_total_blocks'}) perc($stats{'Qcache_free_blocks'}, $stats{'Qcache_total_blocks'})
Hits @>>>>>> @>>>>/s Hits @>>>>>> @>>>>>/s
make_short($stats{'Qcache_hits'}), t($stats{'Qcache_hits'}) make_short($stats{'Qcache_hits'}), t($stats{'Qcache_hits'})
Inserts @>>>>>> @>>>>/s Inserts @>>>>>> @>>>>>/s
make_short($stats{'Qcache_inserts'}), t($stats{'Qcache_inserts'}) make_short($stats{'Qcache_inserts'}), t($stats{'Qcache_inserts'})
Insrt:Prune @>>>>>>:1 @>>>>/s Insrt:Prune @>>>>>>:1 @>>>>>/s
make_short($qc_ip_r), t($stats{'Qcache_inserts'} - $stats{'Qcache_lowmem_prunes'}) make_short($qc_ip_r), t($stats{'Qcache_inserts'} - $stats{'Qcache_lowmem_prunes'})
Hit:Insert @>>>>>>:1 Hit:Insert @>>>>>>:1
$qc_hi_r, t($qc_hi_r) $qc_hi_r, t($qc_hi_r)
. .
format SUBQUERYCACHE =
__ Subquery Cache ______________________________________________________
Hit ratio @>>>>>%
perc($stats{'Subquery_cache_hit'} / ($stats{'Subquery_cache_hit'} + $stats{'Subquery_cache_miss'}))
Hits @>>>>>> @>>>>>/s
make_short($stats{'Subquery_cache_hit'}), t($stats{'Subquery_cache_hit'})
Miss @>>>>>> @>>>>>/s
make_short($stats{'Subquery_cache_miss'}), t($stats{'Subquery_cache_miss'})
.
# Not really the end... # Not really the end...
format REPORT_END = format REPORT_END =
__ Table Locks _________________________________________________________ __ Table Locks _________________________________________________________
Waited @>>>>>>>> @>>>>>/s %Total: @>>>>> Waited @>>>>>>>> @>>>>>/s %Total: @>>>>>
make_short($stats{'Table_locks_waited'}), t($stats{'Table_locks_waited'}), perc($stats{'Table_locks_waited'}, $stats{'Table_locks_waited'} + $stats{'Table_locks_immediate'}); make_short($stats{'Table_locks_waited'}), t($stats{'Table_locks_waited'}), perc($stats{'Table_locks_waited'}, $stats{'Table_locks_waited'} + $stats{'Table_locks_immediate'});
Immediate @>>>>>>>> @>>>>>/s Immediate @>>>>>>>> @>>>>>/s
make_short($stats{'Table_locks_immediate'}), t($stats{'Table_locks_immediate'}) make_short($stats{'Table_locks_immediate'}), t($stats{'Table_locks_immediate'})
__ Tables ______________________________________________________________ __ Tables ______________________________________________________________
Open @>>>>>>>> of @>>> %Cache: @>>>>> Open @>>>>>>>> of @>>>>> %Cache: @>>>>>
$stats{'Open_tables'}, $vars{'table_cache'}, perc($stats{'Open_tables'}, $vars{'table_cache'}) $stats{'Open_tables'}, $vars{'table_cache'}, perc($stats{'Open_tables'}, $vars{'table_cache'})
Opened @>>>>>>>> @>>>>>/s Opened @>>>>>>>> @>>>>>/s
make_short($stats{'Opened_tables'}), t($stats{'Opened_tables'}) make_short($stats{'Opened_tables'}), t($stats{'Opened_tables'})
__ Connections _________________________________________________________ __ Connections _________________________________________________________
Max used @>>>>>>>> of @>>> %Max: @>>>>> Max used @>>>>>>>> of @>>>>> %Max: @>>>>>
$stats{'Max_used_connections'}, $vars{'max_connections'}, perc($stats{'Max_used_connections'}, $vars{'max_connections'}) $stats{'Max_used_connections'}, $vars{'max_connections'}, perc($stats{'Max_used_connections'}, $vars{'max_connections'})
Total @>>>>>>>> @>>>>>/s Total @>>>>>>>> @>>>>>/s
make_short($stats{'Connections'}), t($stats{'Connections'}) make_short($stats{'Connections'}), t($stats{'Connections'})
__ Created Temp ________________________________________________________ __ Created Temp ________________________________________________________
Disk table @>>>>>>>> @>>>>>/s Disk table @>>>>>>>> @>>>>>/s %Disk: @>>>>>
make_short($stats{'Created_tmp_disk_tables'}), t($stats{'Created_tmp_disk_tables'}) make_short($stats{'Created_tmp_disk_tables'}), t($stats{'Created_tmp_disk_tables'}), perc($stats{'Created_tmp_disk_tables'}, $stats{'Created_tmp_tables'})
Table @>>>>>>>> @>>>>>/s Size: @>>>>> Table @>>>>>>>> @>>>>>/s Size: @>>>>>
make_short($stats{'Created_tmp_tables'}), t($stats{'Created_tmp_tables'}), make_short($vars{'tmp_table_size'}, 1, 1) make_short($stats{'Created_tmp_tables'}), t($stats{'Created_tmp_tables'}), make_short($vars{'tmp_table_size'}, 1, 1)
File @>>>>>>>> @>>>>>/s File @>>>>>>>> @>>>>>/s
make_short($stats{'Created_tmp_files'}), t($stats{'Created_tmp_files'}) make_short($stats{'Created_tmp_files'}), t($stats{'Created_tmp_files'})
. .
format TAB = format THREADS =
__ Threads _____________________________________________________________ __ Threads _____________________________________________________________
Running @>>>>>>>> of @>>> Running @>>>>>>>> of @>>>>>
$stats{'Threads_running'}, $stats{'Threads_connected'} $stats{'Threads_running'}, $stats{'Threads_connected'}
Cached @>>>>>>>> of @>>> %Hit: @>>>>> Created @>>>>>>>> @>>>>>/s
$stats{'Threads_cached'}, $vars{'thread_cache_size'}, make_short(100 - perc($stats{'Threads_created'}, $stats{'Connections'}))
Created @>>>>>>>> @>>>>>/s
make_short($stats{'Threads_created'}), t($stats{'Threads_created'}) make_short($stats{'Threads_created'}), t($stats{'Threads_created'})
Slow @>>>>>>>> @>>>>>/s Slow @>>>>>>>> @>>>>>/s
$stats{'Slow_launch_threads'}, t($stats{'Slow_launch_threads'}) $stats{'Slow_launch_threads'}, t($stats{'Slow_launch_threads'})
.
format THREADPERCONNECTION =
Cached @>>>>>>>> of @>>>>> %Hit: @>>>>>
$stats{'Threads_cached'}, $vars{'thread_cache_size'}, make_short(100 - perc($stats{'Threads_created'}, $stats{'Connections'}))
.
format THREADPOOL =
Threadpool @>>>>>>>> of @>>>>> %Used: @>>>>>
$stats{'Threadpool_threads'} + $stats{'Threadpool_idle_threads'}, $vars{'thread_pool_max_threads'}, make_short(perc($stats{'Threadpool_threads'} + $stats{'Threadpool_idle_threads'}, $vars{'thread_pool_max_threads'}))
Running @>>>>>>>> of @>>>>> %Running: @>>>>>
$stats{'Threadpool_threads'}, $vars{'thread_pool_max_threads'}, make_short(perc($stats{'Threadpool_threads'}, $vars{'thread_pool_max_threads'}))
Idle @>>>>>>>> of @>>>>> %Idle: @>>>>>
$stats{'Threadpool_idle_threads'}, $vars{'thread_pool_max_threads'}, make_short(perc($stats{'Threadpool_idle_threads'}, $vars{'thread_pool_max_threads'}))
.
format TAB =
__ Aborted _____________________________________________________________ __ Aborted _____________________________________________________________
Clients @>>>>>>>> @>>>>>/s Clients @>>>>>>>> @>>>>>/s
make_short($stats{'Aborted_clients'}), t($stats{'Aborted_clients'}) make_short($stats{'Aborted_clients'}), t($stats{'Aborted_clients'})
Connects @>>>>>>>> @>>>>>/s Connects @>>>>>>>> @>>>>>/s
make_short($stats{'Aborted_connects'}), t($stats{'Aborted_connects'}) make_short($stats{'Aborted_connects'}), t($stats{'Aborted_connects'})
__ Bytes _______________________________________________________________ __ Bytes _______________________________________________________________
Sent @>>>>>>>> @>>>>>/s Sent @>>>>>>>> @>>>>>/s
make_short($stats{'Bytes_sent'}), t($stats{'Bytes_sent'}) make_short($stats{'Bytes_sent'}), t($stats{'Bytes_sent'})
Received @>>>>>>>> @>>>>>/s Received @>>>>>>>> @>>>>>/s
make_short($stats{'Bytes_received'}), t($stats{'Bytes_received'}) make_short($stats{'Bytes_received'}), t($stats{'Bytes_received'})
. .
format IB = format IB =
__ InnoDB Buffer Pool __________________________________________________ __ InnoDB Buffer Pool __________________________________________________
Usage @>>>>>> of @>>>>>> %Used: @>>>>> Usage @>>>>>> of @>>>>>> %Usage: @>>>>>
make_short($ib_bp_used, 1), make_short($ib_bp_total, 1), perc($ib_bp_used, $ib_bp_total) make_short($ib_bp_used, 1), make_short($ib_bp_total, 1), perc($ib_bp_used, $ib_bp_total)
Read hit @>>>>>% Read hit @>>>>>%
$ib_bp_read_ratio; $ib_bp_read_ratio;
Pages Pages
Free @>>>>>>>> %Total: @>>>>> Free @>>>>>>>> %Total: @>>>>>
make_short($stats{'Innodb_buffer_pool_pages_free'}), perc($stats{'Innodb_buffer_pool_pages_free'}, $stats{'Innodb_buffer_pool_pages_total'}) make_short($stats{'Innodb_buffer_pool_pages_free'}), perc($stats{'Innodb_buffer_pool_pages_free'}, $stats{'Innodb_buffer_pool_pages_total'})
Data @>>>>>>>> @>>>>> %Drty: @>>>>> Data @>>>>>>>> @>>>>> %Drty: @>>>>>
make_short($stats{'Innodb_buffer_pool_pages_data'}), perc($stats{'Innodb_buffer_pool_pages_data'}, $stats{'Innodb_buffer_pool_pages_total'}), perc($stats{'Innodb_buffer_pool_pages_dirty'}, $stats{'Innodb_buffer_pool_pages_data'}) make_short($stats{'Innodb_buffer_pool_pages_data'}), perc($stats{'Innodb_buffer_pool_pages_data'}, $stats{'Innodb_buffer_pool_pages_total'}), perc($stats{'Innodb_buffer_pool_pages_dirty'}, $stats{'Innodb_buffer_pool_pages_data'})
Misc @>>>>>>>> @>>>>> Misc @>>>>>>>> @>>>>>
$stats{'Innodb_buffer_pool_pages_misc'}, perc($stats{'Innodb_buffer_pool_pages_misc'}, $stats{'Innodb_buffer_pool_pages_total'}) $stats{'Innodb_buffer_pool_pages_misc'}, perc($stats{'Innodb_buffer_pool_pages_misc'}, $stats{'Innodb_buffer_pool_pages_total'})
Latched @>>>>>>>> @>>>>> Latched @>>>>>>>> @>>>>>
$stats{'Innodb_buffer_pool_pages_latched'}, perc($stats{'Innodb_buffer_pool_pages_latched'}, $stats{'Innodb_buffer_pool_pages_total'}) $stats{'Innodb_buffer_pool_pages_latched'}, perc($stats{'Innodb_buffer_pool_pages_latched'}, $stats{'Innodb_buffer_pool_pages_total'})
Reads @>>>>>>>> @>>>>>/s Reads @>>>>>>>> @>>>>>/s
make_short($stats{'Innodb_buffer_pool_read_requests'}), t($stats{'Innodb_buffer_pool_read_requests'}) make_short($stats{'Innodb_buffer_pool_read_requests'}), t($stats{'Innodb_buffer_pool_read_requests'})
From file @>>>>>>>> @>>>>>/s @>>>>> From disk @>>>>>>>> @>>>>>/s %Disk: @>>>>>
make_short($stats{'Innodb_buffer_pool_reads'}), t($stats{'Innodb_buffer_pool_reads'}), perc($stats{'Innodb_buffer_pool_reads'}, $stats{'Innodb_buffer_pool_read_requests'}) make_short($stats{'Innodb_buffer_pool_reads'}), t($stats{'Innodb_buffer_pool_reads'}), perc($stats{'Innodb_buffer_pool_reads'}, $stats{'Innodb_buffer_pool_read_requests'})
Ahead Rnd @>>>>>>>> @>>>>>/s Ahead Rnd @>>>>>>>> @>>>>>/s
$stats{'Innodb_buffer_pool_read_ahead_rnd'}, t($stats{'Innodb_buffer_pool_read_ahead_rnd'}) $stats{'Innodb_buffer_pool_read_ahead_rnd'}, t($stats{'Innodb_buffer_pool_read_ahead_rnd'})
Ahead Sql @>>>>>>>> @>>>>>/s # Ahead Sql @>>>>>>>> @>>>>>/s
$stats{'Innodb_buffer_pool_read_ahead_seq'}, t($stats{'Innodb_buffer_pool_read_ahead_seq'}) #$stats{'Innodb_buffer_pool_read_ahead_seq'}, t($stats{'Innodb_buffer_pool_read_ahead_seq'})
Writes @>>>>>>>> @>>>>>/s Writes @>>>>>>>> @>>>>>/s
make_short($stats{'Innodb_buffer_pool_write_requests'}), t($stats{'Innodb_buffer_pool_write_requests'}) make_short($stats{'Innodb_buffer_pool_write_requests'}), t($stats{'Innodb_buffer_pool_write_requests'})
Flushes @>>>>>>>> @>>>>>/s Wait Free @>>>>>>>> @>>>>>/s %Wait: @>>>>>
$stats{'Innodb_buffer_pool_wait_free'}, t($stats{'Innodb_buffer_pool_wait_free'}), perc($stats{'Innodb_buffer_pool_wait_free'}, $stats{'Innodb_buffer_pool_write_requests'})
Flushes @>>>>>>>> @>>>>>/s
make_short($stats{'Innodb_buffer_pool_pages_flushed'}), t($stats{'Innodb_buffer_pool_pages_flushed'}) make_short($stats{'Innodb_buffer_pool_pages_flushed'}), t($stats{'Innodb_buffer_pool_pages_flushed'})
Wait Free @>>>>>>>> @>>>>>/s .
$stats{'Innodb_buffer_pool_wait_free'}, t($stats{'Innodb_buffer_pool_wait_free'})
format IB_XTRADB =
LRU @>>>>>>>> @>>>>>/s %LRU: @>>>>>
make_short($stats{'Innodb_buffer_pool_pages_lru_flushed'}), t($stats{'Innodb_buffer_pool_pages_lru_flushed'}), perc($stats{'Innodb_buffer_pool_pages_lru_flushed'}, $stats{'Innodb_buffer_pool_pages_flushed'})
. .
format IB_LOCK = format IB_LOCK =
__ InnoDB Lock _________________________________________________________ __ InnoDB Lock _________________________________________________________
Waits @>>>>>>>> @>>>>>/s Waits @>>>>>>>> @>>>>>/s
$stats{'Innodb_row_lock_waits'}, t($stats{'Innodb_row_lock_waits'}) $stats{'Innodb_row_lock_waits'}, t($stats{'Innodb_row_lock_waits'})
Current @>>>>>>>> Current @>>>>>>>>
$stats{'Innodb_row_lock_current_waits'} $stats{'Innodb_row_lock_current_waits'}
...@@ -1260,15 +1532,20 @@ $stats{'Innodb_row_lock_time_avg'} ...@@ -1260,15 +1532,20 @@ $stats{'Innodb_row_lock_time_avg'}
$stats{'Innodb_row_lock_time_max'} $stats{'Innodb_row_lock_time_max'}
. .
format IB_LOCK_XTRADB =
Trx history @>>>>>>>>
make_short($stats{'Innodb_history_list_length'})
.
format IB_DPR = format IB_DPR =
__ InnoDB Data, Pages, Rows ____________________________________________ __ InnoDB Data, Pages, Rows ____________________________________________
Data Data
Reads @>>>>>>>> @>>>>>/s Reads @>>>>>>>> @>>>>>/s
make_short($stats{'Innodb_data_reads'}), t($stats{'Innodb_data_reads'}) make_short($stats{'Innodb_data_reads'}), t($stats{'Innodb_data_reads'})
Writes @>>>>>>>> @>>>>>/s Writes @>>>>>>>> @>>>>>/s
make_short($stats{'Innodb_data_writes'}), t($stats{'Innodb_data_writes'}) make_short($stats{'Innodb_data_writes'}), t($stats{'Innodb_data_writes'})
fsync @>>>>>>>> @>>>>>/s fsync @>>>>>>>> @>>>>>/s
make_short($stats{'Innodb_data_fsyncs'}), t($stats{'Innodb_data_fsyncs'}) make_short($stats{'Innodb_data_fsyncs'}), t($stats{'Innodb_data_fsyncs'})
Pending Pending
Reads @>>>>>>>> Reads @>>>>>>>>
...@@ -1279,20 +1556,71 @@ $stats{'Innodb_data_pending_writes'}, t($stats{'Innodb_data_pending_writes'}) ...@@ -1279,20 +1556,71 @@ $stats{'Innodb_data_pending_writes'}, t($stats{'Innodb_data_pending_writes'})
$stats{'Innodb_data_pending_fsyncs'}, t($stats{'Innodb_data_pending_fsyncs'}) $stats{'Innodb_data_pending_fsyncs'}, t($stats{'Innodb_data_pending_fsyncs'})
Pages Pages
Created @>>>>>>>> @>>>>>/s Created @>>>>>>>> @>>>>>/s
make_short($stats{'Innodb_pages_created'}), t($stats{'Innodb_pages_created'}) make_short($stats{'Innodb_pages_created'}), t($stats{'Innodb_pages_created'})
Read @>>>>>>>> @>>>>>/s Read @>>>>>>>> @>>>>>/s
make_short($stats{'Innodb_pages_read'}), t($stats{'Innodb_pages_read'}) make_short($stats{'Innodb_pages_read'}), t($stats{'Innodb_pages_read'})
Written @>>>>>>>> @>>>>>/s Written @>>>>>>>> @>>>>>/s
make_short($stats{'Innodb_pages_written'}), t($stats{'Innodb_pages_written'}) make_short($stats{'Innodb_pages_written'}), t($stats{'Innodb_pages_written'})
Rows Rows
Deleted @>>>>>>>> @>>>>>/s Deleted @>>>>>>>> @>>>>>/s
make_short($stats{'Innodb_rows_deleted'}), t($stats{'Innodb_rows_deleted'}) make_short($stats{'Innodb_rows_deleted'}), t($stats{'Innodb_rows_deleted'})
Inserted @>>>>>>>> @>>>>>/s Inserted @>>>>>>>> @>>>>>/s
make_short($stats{'Innodb_rows_inserted'}), t($stats{'Innodb_rows_inserted'}) make_short($stats{'Innodb_rows_inserted'}), t($stats{'Innodb_rows_inserted'})
Read @>>>>>>>> @>>>>>/s Read @>>>>>>>> @>>>>>/s
make_short($stats{'Innodb_rows_read'}), t($stats{'Innodb_rows_read'}) make_short($stats{'Innodb_rows_read'}), t($stats{'Innodb_rows_read'})
Updated @>>>>>>>> @>>>>>/s Updated @>>>>>>>> @>>>>>/s
make_short($stats{'Innodb_rows_updated'}), t($stats{'Innodb_rows_updated'}) make_short($stats{'Innodb_rows_updated'}), t($stats{'Innodb_rows_updated'})
. .
format PAGECACHE_BUFF_MAX =
__ Aria Pagecache ______________________________________________________
Buffer used @>>>>>> of @>>>>>> %Used: @>>>>>
make_short($pagecache_buffer_used, 1), make_short($vars{'aria_pagecache_buffer_size'}, 1), perc($pagecache_buffer_used, $vars{'aria_pagecache_buffer_size'})
.
format PAGECACHE_BUFF_USAGE =
Current @>>>>>> %Usage: @>>>>>
make_short($pagecache_buffer_usage, 1), perc($pagecache_buffer_usage, $vars{'aria_pagecache_buffer_size'})
.
format PAGECACHE_RATIOS =
Write hit @>>>>>%
$pagecache_write_ratio
Read hit @>>>>>%
$pagecache_read_ratio
.
format BINLOG =
__ Binary Log Cache _____________________________________________________
Disk use
Transactional @>>>>>%
perc($binlog_cache_ratio)
Non transactional @>>>>>%
perc($binlog_stmt_cache_ratio)
.
format TOKUDB =
__ TokuDB ______________________________________________________________
Cachetable @>>>>>> of @>>>>>> %Usage: @>>>>>
make_short($stats{Tokudb_cachetable_size_current}, 1), make_short($vars{tokudb_cache_size}, 1), perc($stats{Tokudb_cachetable_size_current}, $vars{tokudb_cache_size})
Miss @>>>>>> @>>>>>/s
make_short($stats{'Tokudb_cachetable_miss'}), t($stats{'Tokudb_cachetable_miss'})
Evictions @>>>>>> @>>>>>/s
make_short($stats{'Tokudb_cachetable_evictions'}), t($stats{'Tokudb_cachetable_evictions'})
.
format ROWS =
__ Rows ________________________________________________________________
Rows @>>>>>>>> @>>>>>/s
make_short($rows), t($rows)
Using idx @>>>>>>>> @>>>>>/s %Index: @>>>>>
make_short($rows_using_indexes), t($rows_using_indexes), perc($rows_using_indexes,$rows)
Rows/question @>>>>>>
make_short($rows/$questions)
.
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment