Skip to content

Commit

Permalink
Merge pull request #750 from jmrenouard/master
Browse files Browse the repository at this point in the history
New version 2.5.2
  • Loading branch information
jmrenouard authored Feb 6, 2024
2 parents 65b1c13 + 4fdd801 commit 7ffd825
Show file tree
Hide file tree
Showing 3 changed files with 86 additions and 36 deletions.
2 changes: 1 addition & 1 deletion USAGE.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# NAME

MySQLTuner 2.5.1 - MySQL High Performance Tuning Script
MySQLTuner 2.5.2 - MySQL High Performance Tuning Script

# IMPORTANT USAGE GUIDELINES

Expand Down
90 changes: 59 additions & 31 deletions mysqltuner.pl
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
#!/usr/bin/env perl
# mysqltuner.pl - Version 2.5.1
# mysqltuner.pl - Version 2.5.2
# High Performance MySQL Tuning Script
# Copyright (C) 2015-2023 Jean-Marie Renouard - [email protected]
# Copyright (C) 2006-2023 Major Hayden - [email protected]
Expand Down Expand Up @@ -57,7 +56,7 @@ package main;
#use Env;

# Set up a few variables for use in the script
my $tunerversion = "2.5.1";
my $tunerversion = "2.5.2";
my ( @adjvars, @generalrec );

# Set defaults
Expand Down Expand Up @@ -238,8 +237,9 @@ package main;
if ( not defined( $opt{structstat} ) or $opt{nostructstat} == 1 )
; # Don't print table struct information
$opt{myisamstat} = 1
if ( not defined( $opt{myisamstat} ));
$opt{myisamstat} = 0 if ($opt{nomyisamstat} == 1 ); # Don't print MyISAM table information
if ( not defined( $opt{myisamstat} ) );
$opt{myisamstat} = 0
if ( $opt{nomyisamstat} == 1 ); # Don't print MyISAM table information

# for RPM distributions
$opt{cvefile} = "/usr/share/mysqltuner/vulnerabilities.csv"
Expand Down Expand Up @@ -815,7 +815,8 @@ sub mysql_setup {
if ( $opt{socket} ne 0 ) {
if ( $opt{port} ne 0 ) {
$remotestring = " -S $opt{socket} -P $opt{port}";
} else {
}
else {
$remotestring = " -S $opt{socket}";
}
}
Expand Down Expand Up @@ -1580,7 +1581,9 @@ sub log_file_recommendations {
$numLi++;
debugprint "$numLi: $logLi"
if $logLi =~ /warning|error/i and $logLi !~ /Logging to/;
$nbErrLog++ if $logLi =~ /error/i and $logLi !~ /(Logging to|\[Warning\].*ERROR_FOR_DIVISION_BY_ZERO)/;
$nbErrLog++
if $logLi =~ /error/i
and $logLi !~ /(Logging to|\[Warning\].*ERROR_FOR_DIVISION_BY_ZERO)/;
$nbWarnLog++ if $logLi =~ /warning/i;
push @lastShutdowns, $logLi
if $logLi =~ /Shutdown complete/ and $logLi !~ /Innodb/i;
Expand Down Expand Up @@ -2526,7 +2529,7 @@ sub check_architecture {
}
elsif ( `uname` =~ /Darwin/ && `uname -m` =~ /x86_64/ ) {

# Darwin gibas.local 12.5.1 Darwin Kernel Version 12.3.0: Sun Jan 6 22:37:10 PST 2013; root:xnu-2050.22.13~1/RELEASE_X86_64 x86_64
# Darwin gibas.local 12.5.2 Darwin Kernel Version 12.3.0: Sun Jan 6 22:37:10 PST 2013; root:xnu-2050.22.13~1/RELEASE_X86_64 x86_64
$arch = 64;
goodprint "Operating on 64-bit architecture";
}
Expand Down Expand Up @@ -3180,7 +3183,7 @@ sub calculations {
unless defined $mystat{'Innodb_buffer_pool_reads'};
$mycalc{'pct_read_efficiency'} = percentage(
$mystat{'Innodb_buffer_pool_read_requests'},
(
(
$mystat{'Innodb_buffer_pool_read_requests'} +
$mystat{'Innodb_buffer_pool_reads'}
)
Expand Down Expand Up @@ -3211,6 +3214,12 @@ sub calculations {
$mystat{'Innodb_buffer_pool_pages_total'}
) if defined $mystat{'Innodb_buffer_pool_pages_total'};

$mycalc{'innodb_buffer_alloc_pct'} = select_one(
"select round( 100* sum(allocated)/( select VARIABLE_VALUE "
. "FROM performance_schema.global_variables "
. "WHERE VARIABLE_NAME='innodb_buffer_pool_size' ) ,2)"
. 'FROM sys.x\$innodb_buffer_stats_by_table;' );

# Binlog Cache
if ( $myvar{'log_bin'} ne 'OFF' ) {
$mycalc{'pct_binlog_cache'} = percentage(
Expand Down Expand Up @@ -6282,11 +6291,11 @@ sub mysql_innodb {
. hr_bytes( $myvar{'innodb_log_buffer_size'} );
}
if ( defined $mystat{'Innodb_buffer_pool_pages_free'} ) {
infoprint " +-- InnoDB Log Buffer Free: "
infoprint " +-- InnoDB Buffer Free: "
. hr_bytes( $mystat{'Innodb_buffer_pool_pages_free'} ) . "";
}
if ( defined $mystat{'Innodb_buffer_pool_pages_total'} ) {
infoprint " +-- InnoDB Log Buffer Used: "
infoprint " +-- InnoDB Buffer Used: "
. hr_bytes( $mystat{'Innodb_buffer_pool_pages_total'} ) . "";
}
}
Expand Down Expand Up @@ -6355,6 +6364,21 @@ sub mysql_innodb {
. hr_bytes( $enginestats{'InnoDB'} )
. ") if possible." );
}

# select round( 100* sum(allocated)/( select VARIABLE_VALUE
# FROM performance_schema.global_variables
# where VARIABLE_NAME='innodb_buffer_pool_size' )
# ,2) as "PCT ALLOC/BUFFER POOL"
#from sys.x$innodb_buffer_stats_by_table;

if ( $mycalc{innodb_buffer_alloc_pct} < 80 ) {
badprint "Ratio Buffer Pool allocated / Buffer Pool Size: "
. $mycalc{'innodb_buffer_alloc_pct'} . '%';
}
else {
goodprint "Ratio Buffer Pool allocated / Buffer Pool Size: "
. $mycalc{'innodb_buffer_alloc_pct'} . '%';
}
if ( $mycalc{'innodb_log_size_pct'} < 20
or $mycalc{'innodb_log_size_pct'} > 30 )
{
Expand Down Expand Up @@ -6515,15 +6539,17 @@ sub mysql_innodb {
. $mycalc{'pct_read_efficiency'} . "% ("
. $mystat{'Innodb_buffer_pool_read_requests'}
. " hits / "
. ( $mystat{'Innodb_buffer_pool_reads'} + $mystat{'Innodb_buffer_pool_read_requests'} )
. ( $mystat{'Innodb_buffer_pool_reads'} +
$mystat{'Innodb_buffer_pool_read_requests'} )
. " total)";
}
else {
goodprint "InnoDB Read buffer efficiency: "
. $mycalc{'pct_read_efficiency'} . "% ("
. $mystat{'Innodb_buffer_pool_read_requests'}
. " hits / "
. ( $mystat{'Innodb_buffer_pool_reads'} + $mystat{'Innodb_buffer_pool_read_requests'} )
. ( $mystat{'Innodb_buffer_pool_reads'} +
$mystat{'Innodb_buffer_pool_read_requests'} )
. " total)";
}

Expand All @@ -6539,7 +6565,7 @@ sub mysql_innodb {
. $mystat{'Innodb_log_write_requests'}
. " total)";
push( @adjvars,
"innodb_log_buffer_size (> "
"innodb_log_buffer_size (> "
. hr_bytes_rnd( $myvar{'innodb_log_buffer_size'} )
. ")" );
}
Expand Down Expand Up @@ -6691,20 +6717,21 @@ sub mysql_databases {
percentage( $totaldbinfo[2], $totaldbinfo[3] ) . "%";
$result{'Databases'}{'All databases'}{'Total Size'} = $totaldbinfo[3];
print "\n" unless ( $opt{'silent'} or $opt{'json'} );
my $nbViews=0;
my $nbTables=0;
my $nbViews = 0;
my $nbTables = 0;

foreach (@dblist) {
my @dbinfo = split /\s/,
select_one(
"SELECT TABLE_SCHEMA, SUM(TABLE_ROWS), SUM(DATA_LENGTH), SUM(INDEX_LENGTH), SUM(DATA_LENGTH+INDEX_LENGTH), COUNT(DISTINCT ENGINE), COUNT(TABLE_NAME), COUNT(DISTINCT(TABLE_COLLATION)), COUNT(DISTINCT(ENGINE)) FROM information_schema.TABLES WHERE TABLE_SCHEMA='$_' GROUP BY TABLE_SCHEMA ORDER BY TABLE_SCHEMA"
);
next unless defined $dbinfo[0];
infoprint "Database: " . $dbinfo[0] . "";
$nbTables=select_one(

infoprint "Database: " . $dbinfo[0] . "";
$nbTables = select_one(
"SELECT count(*) from information_schema.TABLES WHERE TABLE_TYPE ='BASE TABLE' AND TABLE_SCHEMA='$_'"
);
infoprint " +-- TABLE : $nbTables";
);
infoprint " +-- TABLE : $nbTables";
infoprint " +-- VIEW : "
. select_one(
"SELECT count(*) from information_schema.TABLES WHERE TABLE_TYPE ='VIEW' AND TABLE_SCHEMA='$_'"
Expand Down Expand Up @@ -6760,10 +6787,10 @@ sub mysql_databases {
) . " TABLE(s)";
}

if ( $nbTables == 0 ) {
badprint " No table in $dbinfo[0] database";
next;
}
if ( $nbTables == 0 ) {
badprint " No table in $dbinfo[0] database";
next;
}
badprint "Index size is larger than data size for $dbinfo[0] \n"
if ( $dbinfo[2] ne 'NULL' )
and ( $dbinfo[3] ne 'NULL' )
Expand All @@ -6774,7 +6801,7 @@ sub mysql_databases {
. " storage engines. Be careful. \n";
push @generalrec,
"Select one storage engine (InnoDB is a good choice) for all tables in $dbinfo[0] database ($dbinfo[5] engines detected)";
}
}
$result{'Databases'}{ $dbinfo[0] }{'Rows'} = $dbinfo[1];
$result{'Databases'}{ $dbinfo[0] }{'Tables'} = $dbinfo[6];
$result{'Databases'}{ $dbinfo[0] }{'Collations'} = $dbinfo[7];
Expand Down Expand Up @@ -7078,12 +7105,13 @@ sub mysql_indexes {
infoprint " +-- COMMENT : " . $info[5] if defined $info[5];
$found++;
}
my $nbTables=select_one(
my $nbTables = select_one(
"SELECT count(*) from information_schema.TABLES WHERE TABLE_TYPE ='BASE TABLE' AND TABLE_SCHEMA='$dbname'"
);
badprint "No index found for $dbname database" if $found == 0 and $nbTables>1;
);
badprint "No index found for $dbname database"
if $found == 0 and $nbTables > 1;
push @generalrec, "Add indexes on tables from $dbname database"
if $found == 0 and $nbTables>1;
if $found == 0 and $nbTables > 1;
}
return
unless ( defined( $myvar{'performance_schema'} )
Expand Down Expand Up @@ -7371,7 +7399,7 @@ sub which {
=head1 NAME
MySQLTuner 2.5.1 - MySQL High Performance Tuning Script
MySQLTuner 2.5.2 - MySQL High Performance Tuning Script
=head1 IMPORTANT USAGE GUIDELINES
Expand Down
Loading

0 comments on commit 7ffd825

Please sign in to comment.