Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

New version 2.5.2 #750

Merged
merged 5 commits into from
Feb 6, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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 - jmrenouard@gmail.com
# Copyright (C) 2006-2023 Major Hayden - major@mhtx.net
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