#265 TOP 15 queries with temp table to disk
#260 Memory used > 100% ? #258
This commit is contained in:
commit
5872fcc1ee
2 changed files with 333 additions and 97 deletions
238
README.it.md
Normal file
238
README.it.md
Normal file
|
@ -0,0 +1,238 @@
|
||||||
|
MySQLTuner-perl
|
||||||
|
====
|
||||||
|
[](https://travis-ci.org/major/MySQLTuner-perl)
|
||||||
|
[](http://opensource.box.com/badges)
|
||||||
|
[](http://opensource.box.com/badges)
|
||||||
|
[](http://isitmaintained.com/project/major/MySQLTuner-perl "Average time to resolve an issue")
|
||||||
|
[](http://isitmaintained.com/project/major/MySQLTuner-perl "Percentage of issues still open")
|
||||||
|
[](https://opensource.org/licenses/GPL-3.0/)
|
||||||
|
|
||||||
|
**MySQLTuner** è uno script Perl che permette di analizzare velocemente una installazione di MySQL, nonché di apportare modifiche per migliorare le prestazioni e la stabilità. In modo coinciso sono riportati lo stato attuale delle variabili di configurazione e i dati sullo stato del sistema, corredati da suggerimenti di base per il miglioramento delle prestazioni.
|
||||||
|
|
||||||
|
**MySQLTuner** supporta, in quest'ultima versione, circa 250 indicatori per i server MySQL/MariaDB/Percona.
|
||||||
|
|
||||||
|
**MySQLTuner** è attivamente manutenuto e nuovi indicatori sono aggiunti di settimana in settimana, supportando un gran numero di configurazioni tra le quali , , , metriche relative al SO Linux, , , , ...
|
||||||
|
|
||||||
|
Maggiori dettagli sugli indicatori
|
||||||
|
.
|
||||||
|
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
MySQLTuner ha bisogno di te:
|
||||||
|
===
|
||||||
|
|
||||||
|
**MySQLTuner** ha bisogno di collaboratori per documentazione, codice e suggerimenti ..
|
||||||
|
|
||||||
|
* Problemi e suggerimenti possono essere riportati su [GitHub tracker](https://github.com/major/MySQLTuner-perl/issues).
|
||||||
|
* La guida per contribuire è disponibile in inglese: [MySQLTuner contributing guide](https://github.com/major/MySQLTuner-perl/blob/master/CONTRIBUTING.md)
|
||||||
|
* Dai un Stella a **MySQLTuner project** su [GitHub](https://github.com/major/MySQLTuner-perl)
|
||||||
|
|
||||||
|
Compatibilità:
|
||||||
|
====
|
||||||
|
|
||||||
|
* MySQL 5.7 (pieno supporto)
|
||||||
|
* MySQL 5.6 (pieno supporto)
|
||||||
|
* MySQL 5.5 (pieno supporto)
|
||||||
|
* MariaDB 10.1 (pieno supporto)
|
||||||
|
* MariaDB 10.0 (pieno supporto)
|
||||||
|
* Percona Server 5.6 (pieno supporto)
|
||||||
|
* Percona XtraDB cluster (pieno supporto)
|
||||||
|
* MySQL 3.23, 4.0, 4.1, 5.0, 5.1 (supporto parziale - versione deprecata)
|
||||||
|
* Perl 5.6 o successivi (col pacchetto [perl-doc](http://search.cpan.org/~dapm/perl-5.14.4/pod/perldoc.pod))
|
||||||
|
* Sistemi operativi basati su Unix/Linux (testato su Linux, varianti di BSD e di Solaris)
|
||||||
|
* Windows non è supportato al momento (gradito aiuto!!!!!)
|
||||||
|
* Accesso completo in lettura al server MySQL (accesso root a livello di SO raccomandato per MySQL < 5.1)
|
||||||
|
* supporto al rilevamento di vulnerabilità CVE da [https://cve.mitre.org](https://cve.mitre.org)
|
||||||
|
|
||||||
|
***ATTENZIONE***
|
||||||
|
--
|
||||||
|
È **estremamente importante** che tu capisca appieno ogni singola modifica apportata alla configurazione del server MySQL.
|
||||||
|
Qualora non capissi appieno qualche parte dell'output dello script o se non capissi quanto raccomandato **dovresti consultare** un DBA esperto o un amministratore di sistema di cui hai fiducia.
|
||||||
|
Testa **sempre** le modifiche su ambienti ad hoc e tieni sempre presente che miglioramenti in un settore potrebbero **influenzare negativamente** MySQL in altri settori.
|
||||||
|
|
||||||
|
**Seriamente - consulta la sezione FAQ che segue.**
|
||||||
|
|
||||||
|
Cosa verifica esattamente MySQLTuner ?
|
||||||
|
--
|
||||||
|
Tutti i controlli effettuati da **MySQLTuner** sono documentati in [MySQLTuner Internals](https://github.com/major/MySQLTuner-perl/blob/master/INTERNALS.md).
|
||||||
|
|
||||||
|
Download/Installazione
|
||||||
|
--
|
||||||
|
|
||||||
|
Si può semplicemente scaricare l'intero codice utilizzando `git clone` seguito dalla URL riportata sopra.
|
||||||
|
Il modo più semplice è il seguente:
|
||||||
|
|
||||||
|
wget http://mysqltuner.pl/ -O mysqltuner.pl
|
||||||
|
wget https://raw.githubusercontent.com/major/MySQLTuner-perl/master/basic_passwords.txt -O basic_passwords.txt
|
||||||
|
wget https://raw.githubusercontent.com/major/MySQLTuner-perl/master/vulnerabilities.csv -O vulnerabilities.csv
|
||||||
|
perl mysqltuner.pl
|
||||||
|
|
||||||
|
Ovviamente è possibile assegnare il permesso di esecuzione in modo da poter lanciare il comando senza chiamare l'interprete `perl` (`chmod +x mysqltuner.pl`).
|
||||||
|
|
||||||
|
Casi d'uso
|
||||||
|
--
|
||||||
|
|
||||||
|
__Uso:__ Minimale locale
|
||||||
|
|
||||||
|
perl mysqltuner.pl
|
||||||
|
|
||||||
|
__Uso:__ Minimale da remoto
|
||||||
|
|
||||||
|
perl mysqltuner.pl --host targetDNS_IP --user admin_user --pass admin_password
|
||||||
|
|
||||||
|
__Uso:__ Abilitando il massimo livello di informazione in output su MySQL/MariaDb senza usare l'optione di debug
|
||||||
|
|
||||||
|
perl mysqltuner.pl --verbose
|
||||||
|
perl mysqltuner.pl --buffers --dbstat --idxstat --sysstat --pfstat
|
||||||
|
|
||||||
|
|
||||||
|
__Uso:__ Abilitando la verifica delle vulnerabilità CVE per la versione di MariaDB o MySQL installata
|
||||||
|
|
||||||
|
perl mysqltuner.pl --cvefile=vulnerabilities.csv
|
||||||
|
|
||||||
|
__Uso:__ Salvando i risultati su un file con le stesse informazione mostrate a video
|
||||||
|
|
||||||
|
perl mysqltuner.pl --outputfile /tmp/result_mysqltuner.txt
|
||||||
|
|
||||||
|
__Uso:__ Salvando i risultati su un file **senza mostrare nulla a video**
|
||||||
|
|
||||||
|
perl mysqltuner.pl --silent --outputfile /tmp/result_mysqltuner.txt
|
||||||
|
|
||||||
|
__Uso:__ Utilizzando un modello per personalizzare il file di output, con la sintassi di [Text::Template](https://metacpan.org/pod/Text::Template).
|
||||||
|
|
||||||
|
perl mysqltuner.pl --silent --reportfile /tmp/result_mysqltuner.txt --template=/tmp/mymodel.tmpl
|
||||||
|
|
||||||
|
__Uso:__ Abilitando la modalità di debug
|
||||||
|
|
||||||
|
perl mysqltuner.pl --debug
|
||||||
|
|
||||||
|
FAQ
|
||||||
|
--
|
||||||
|
|
||||||
|
**Domanda: MySQLTuner sistemerà il mio server MySQL lento?**
|
||||||
|
|
||||||
|
**No.** MySQLTuner è uno script che legge solamente. Non scriverà alcun file di configurazione, non modificherà lo stato di alcun demone né chiamerà tua madre per augurarle buon compleanno.
|
||||||
|
Ti darà una panoramica delle prestazioni del tuo server, facendo alcune raccomandazioni basilari circa i miglioramenti che tu puoi apportare. *assicurati di leggere l'avviso precedente prima di seguire qualsiasi raccomandazione.*
|
||||||
|
|
||||||
|
**Domanda: Posso eliminare il mio DBA ora?**
|
||||||
|
|
||||||
|
**MySQLTuner non sostituirà il tuo DBA in alcun modo.** Se il tuo DBA continuamente occupa il tuo parcheggio e ruba il tuo cibo dal frigo puoi considerare l'opzione - ma resta una tua scelta.
|
||||||
|
|
||||||
|
**Domanda: Perché MySQLTuner continua a chiedermi ogni volta le credenziali di login di MySQL?**
|
||||||
|
|
||||||
|
Lo script cerca di arguirle in ogni modo possibile. Cercando file `~/.my.cnf`, file di password di Plesk e provando il login di root con password vuota.
|
||||||
|
Se nessuno di questi modi ha successo, allora la password viene richiesta. Se preferisci che lo script giri in modo automatico, senza interazione con l'utente, allora crea un file `.my.cnf` nella tua cartella home che contenga:
|
||||||
|
|
||||||
|
[client]
|
||||||
|
user=someusername
|
||||||
|
pass=thatuserspassword
|
||||||
|
|
||||||
|
Una volta creato, assicurati che tu sia il proprietario (owner) e che i permessi siano 0600. Questo dovrebbe preservare le tue credenziali di login per i database da occhi indiscreti, in condizioni normali.
|
||||||
|
Se un [Terminator modello T-1000 apparisse vestito da Carabiniere](https://it.wikipedia.org/wiki/T-1000) e chiedesse le tue credenziali non avresti poi tante scelte.
|
||||||
|
|
||||||
|
**Domanda: C'è qualche altro modo per rendere sicure le credenziali sulle ultime versioni di MySQL e MariaDB ?**
|
||||||
|
|
||||||
|
Potresti utilizzare il comando `mysql_config_editor`.
|
||||||
|
|
||||||
|
$ mysql_config_editor set --login-path=client --user=someusername --password --host=localhost
|
||||||
|
Enter passord: ********
|
||||||
|
$
|
||||||
|
|
||||||
|
Che crea il file `~/.mylogin.cnf` con i prmessi di accesso appropriati.
|
||||||
|
|
||||||
|
Per avere informazioni sulle credenziali salvate, si usi ilseguente comando:
|
||||||
|
|
||||||
|
$mysql_config_editor print
|
||||||
|
[client]
|
||||||
|
user = someusername
|
||||||
|
password = *****
|
||||||
|
host = localhost
|
||||||
|
|
||||||
|
**Domanda: Quali sono i privilegi minimi, nel database, necessari per un utente *mysqltuner* ad hoc ?**
|
||||||
|
|
||||||
|
mysql>GRANT SELECT, PROCESS,EXECUTE, REPLICATION CLIENT,SHOW DATABASES,SHOW VIEW ON *.* FOR 'mysqltuner'@'localhost' identified by pwd1234;
|
||||||
|
|
||||||
|
**Domanda: Non funziona sul mio SO! Che succede?!**
|
||||||
|
|
||||||
|
Questo genere di cose sono destinate ad accadere. Ecco i dettagli di cui ho bisogno per indagare sul problema:
|
||||||
|
|
||||||
|
* SO e versione del SO
|
||||||
|
* Architettura (x86, x86_64, IA64, Commodore 64)
|
||||||
|
* Versione esatta di MySQL
|
||||||
|
* Da dove viene la tua versione di MySQL (pacchetto del SO, sorgenti, etc.)
|
||||||
|
* Il testo completo dell'errore
|
||||||
|
* L'output dei comandi `SHOW VARIABLES;` e `SHOW GLOBAL STATUS;`(se possibile)
|
||||||
|
|
||||||
|
**Domanda: Come eseguo il check per le vulnerabilità CVE ?**
|
||||||
|
|
||||||
|
* Scarica il file `vulnerabilities.csv`da questo repository.
|
||||||
|
* Usa l'opzione `--cvefile` per eseguire i test delle CVE
|
||||||
|
|
||||||
|
**Domanda: Come uso mysqltuner da un altro computer ?**
|
||||||
|
Grazie a [@rolandomysqldba](http://dba.stackexchange.com/users/877/rolandomysqldba)
|
||||||
|
|
||||||
|
* You will still have to connect like a mysql client:
|
||||||
|
* Ti dovrai collegare come un client mysql:
|
||||||
|
|
||||||
|
Connessione e Autenticazione
|
||||||
|
|
||||||
|
--host <hostname> Si connette a un host remoto per eseguire i test (default: localhost)
|
||||||
|
--socket <socket> Usa un socket per effettuare una connessione locale
|
||||||
|
--port <port> Porta per la connessione (default: 3306)
|
||||||
|
--user <username> Username per l'autenticazione
|
||||||
|
--pass <password> Password per l'autenticazione
|
||||||
|
--defaults-file <path> defaults file per le credenziali
|
||||||
|
|
||||||
|
Poiché si sta utilizzando un host remoto, si utilizzino i seguenti parametri per fornire allo script i valori del SO
|
||||||
|
|
||||||
|
--forcemem <size> Valore della RAM installata, in megabyte
|
||||||
|
--forceswap <size> Valore della memoria di swap configurata, in megabyte
|
||||||
|
|
||||||
|
* Potresti dover contattare il sistemista del server remoto per conoscere i valori di RAM e swap
|
||||||
|
|
||||||
|
Se il database ha troppe tabelle, o tabelle veramente grandi, si usi:
|
||||||
|
|
||||||
|
--skipsize Non elenca le tabelle ed i rispettivi tipi e dimensioni (default: on)
|
||||||
|
(Raccomandato per server con molte tabelle)
|
||||||
|
|
||||||
|
MySQLTuner e Vagrant
|
||||||
|
--
|
||||||
|
**MySQLTuner** contiene le seguenti configurazioni per Vagrant:
|
||||||
|
* Fedora Core 23 / MariaDB 10.0
|
||||||
|
* Fedora Core 23 / MariaDB 10.1
|
||||||
|
* Fedora Core 23 / MySQL 5.6
|
||||||
|
* Fedora Core 23 / MySQL 5.7
|
||||||
|
|
||||||
|
**Vagrant File** sono collocati nella sotto-directory di Vagrant.
|
||||||
|
* Segui questi due passaggi dopo l'installazione di Vagrant:
|
||||||
|
* Rinominare `VagrantFile_for_Mxxx` in `Vagrantfile`
|
||||||
|
* `vagrant up`
|
||||||
|
|
||||||
|
**MySQLTuner** contiene una configurazione Vagrant a scopo di test e sviluppo
|
||||||
|
* Installare VirtualBox e Vagrant
|
||||||
|
* https://www.virtualbox.org/wiki/Downloads
|
||||||
|
* https://www.vagrantup.com/downloads.html
|
||||||
|
* Clone del repository
|
||||||
|
* git clone https://github.com/major/MySQLTuner-perl.git
|
||||||
|
* Installare i plugin di Vagrant `vagrant-hostmanager` e `vagrant-vbguest`
|
||||||
|
* `vagrant plugin install vagrant-hostmanager`
|
||||||
|
* `vagrant plugin install vagrant-vbguest`
|
||||||
|
* Aggiungere un box Fedora Core 23 dal sito ufficiale di Fedora
|
||||||
|
* `vagrant box add --name fc23 https://download.fedoraproject.org/pub/fedora/linux/releases/23/Cloud/x86_64/Images/Fedora-Cloud-Base-Vagrant-23-20151030.x86_64.vagrant-virtualbox.box`
|
||||||
|
* Creare una directory `data`
|
||||||
|
* `mkdir data`
|
||||||
|
* Rinominare `Vagrantfile_MariaDB10.0` in `Vagrantfile`
|
||||||
|
* `cp MySQLTuner-perl/Vagrant/Vagrantfile_for_MariaDB10.0 Vagrantfile`
|
||||||
|
* Start vagrant
|
||||||
|
* `vagrant up`
|
||||||
|
|
||||||
|
MySQLTuner ha bisogno di te:
|
||||||
|
--
|
||||||
|
|
||||||
|
**MySQLTuner** ha bisogno di collaboratori per documentazione, codice e suggerimenti ..
|
||||||
|
|
||||||
|
* Problemi e suggerimenti possono essere riportati su [GitHub tracker](https://github.com/major/MySQLTuner-perl/issues).
|
||||||
|
* La guida per contribuire è disponibile in inglese: [MySQLTuner contributing guide](https://github.com/major/MySQLTuner-perl/blob/master/CONTRIBUTING.md)
|
||||||
|
* Dai un Stella a **MySQLTuner project** su [GitHub](https://github.com/major/MySQLTuner-perl)
|
||||||
|
|
132
mysqltuner.pl
132
mysqltuner.pl
|
@ -681,7 +681,7 @@ sub mysql_setup {
|
||||||
$opt{port} = ( $opt{port} eq 0 ) ? 3306 : $opt{port};
|
$opt{port} = ( $opt{port} eq 0 ) ? 3306 : $opt{port};
|
||||||
|
|
||||||
# If we're doing a remote connection, but forcemem wasn't specified, we need to exit
|
# If we're doing a remote connection, but forcemem wasn't specified, we need to exit
|
||||||
if ( $opt{'forcemem'} eq 0
|
if ( $opt{'forcemem'} eq 0
|
||||||
&& ( $opt{host} ne "127.0.0.1" )
|
&& ( $opt{host} ne "127.0.0.1" )
|
||||||
&& ( $opt{host} ne "localhost" ) )
|
&& ( $opt{host} ne "localhost" ) )
|
||||||
{
|
{
|
||||||
|
@ -873,7 +873,7 @@ sub mysql_setup {
|
||||||
$mysqllogin = "-u $name";
|
$mysqllogin = "-u $name";
|
||||||
|
|
||||||
if ( length($password) > 0 ) {
|
if ( length($password) > 0 ) {
|
||||||
$mysqllogin .= " -p\"$password\"";
|
$mysqllogin .= " -p'$password'";
|
||||||
}
|
}
|
||||||
$mysqllogin .= $remotestring;
|
$mysqllogin .= $remotestring;
|
||||||
my $loginstatus = `$mysqladmincmd ping $mysqllogin 2>&1`;
|
my $loginstatus = `$mysqladmincmd ping $mysqllogin 2>&1`;
|
||||||
|
@ -1343,7 +1343,7 @@ sub get_kernel_info() {
|
||||||
'fs.aio-max-nr > 1M (echo 1048576 > /proc/sys/fs/aio-max-nr)';
|
'fs.aio-max-nr > 1M (echo 1048576 > /proc/sys/fs/aio-max-nr)';
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
infoprint "Max Number of AIO events is > 1M.";
|
infoprint "Max Number of AIO events is > 1M.";
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -1658,7 +1658,7 @@ sub get_replication_status {
|
||||||
badprint
|
badprint
|
||||||
"This replication slave is not running but seems to be configured.";
|
"This replication slave is not running but seems to be configured.";
|
||||||
}
|
}
|
||||||
if ( defined($io_running)
|
if ( defined($io_running)
|
||||||
&& $io_running =~ /yes/i
|
&& $io_running =~ /yes/i
|
||||||
&& $sql_running =~ /yes/i )
|
&& $sql_running =~ /yes/i )
|
||||||
{
|
{
|
||||||
|
@ -1767,7 +1767,7 @@ sub check_architecture {
|
||||||
}
|
}
|
||||||
elsif ( `uname` =~ /Darwin/ && `uname -m` =~ /x86_64/ ) {
|
elsif ( `uname` =~ /Darwin/ && `uname -m` =~ /x86_64/ ) {
|
||||||
|
|
||||||
# Darwin gibas.local 12.3.0 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.3.0 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;
|
$arch = 64;
|
||||||
goodprint "Operating on 64-bit architecture";
|
goodprint "Operating on 64-bit architecture";
|
||||||
}
|
}
|
||||||
|
@ -1898,7 +1898,7 @@ sub check_storage_engines {
|
||||||
# Now we build a database list, and loop through it to get storage engine stats for tables
|
# Now we build a database list, and loop through it to get storage engine stats for tables
|
||||||
foreach my $db (@dblist) {
|
foreach my $db (@dblist) {
|
||||||
chomp($db);
|
chomp($db);
|
||||||
if ( $db eq "information_schema"
|
if ( $db eq "information_schema"
|
||||||
or $db eq "performance_schema"
|
or $db eq "performance_schema"
|
||||||
or $db eq "mysql"
|
or $db eq "mysql"
|
||||||
or $db eq "lost+found" )
|
or $db eq "lost+found" )
|
||||||
|
@ -2516,7 +2516,7 @@ sub mysql_stats {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( $arch
|
if ( $arch
|
||||||
&& $arch == 32
|
&& $arch == 32
|
||||||
&& $mycalc{'max_used_memory'} > 2 * 1024 * 1024 * 1024 )
|
&& $mycalc{'max_used_memory'} > 2 * 1024 * 1024 * 1024 )
|
||||||
{
|
{
|
||||||
|
@ -2751,7 +2751,7 @@ sub mysql_stats {
|
||||||
|
|
||||||
# Temporary tables
|
# Temporary tables
|
||||||
if ( $mystat{'Created_tmp_tables'} > 0 ) {
|
if ( $mystat{'Created_tmp_tables'} > 0 ) {
|
||||||
if ( $mycalc{'pct_temp_disk'} > 25
|
if ( $mycalc{'pct_temp_disk'} > 25
|
||||||
&& $mycalc{'max_tmp_table_size'} < 256 * 1024 * 1024 )
|
&& $mycalc{'max_tmp_table_size'} < 256 * 1024 * 1024 )
|
||||||
{
|
{
|
||||||
badprint
|
badprint
|
||||||
|
@ -2868,7 +2868,7 @@ sub mysql_stats {
|
||||||
. $myvar{'open_files_limit'}
|
. $myvar{'open_files_limit'}
|
||||||
. ") variable " );
|
. ") variable " );
|
||||||
push( @generalrec,
|
push( @generalrec,
|
||||||
"should be greater than $table_cache_var ( "
|
"should be greater than $table_cache_var ("
|
||||||
. $myvar{$table_cache_var}
|
. $myvar{$table_cache_var}
|
||||||
. ")" );
|
. ")" );
|
||||||
}
|
}
|
||||||
|
@ -2916,28 +2916,26 @@ sub mysql_stats {
|
||||||
|
|
||||||
# Binlog cache
|
# Binlog cache
|
||||||
if ( defined $mycalc{'pct_binlog_cache'} ) {
|
if ( defined $mycalc{'pct_binlog_cache'} ) {
|
||||||
if ( $mycalc{'pct_binlog_cache'} < 90
|
if ( $mycalc{'pct_binlog_cache'} < 90
|
||||||
&& $mystat{'Binlog_cache_use'} > 0 ) {
|
&& $mystat{'Binlog_cache_use'} > 0 ) {
|
||||||
badprint "Binlog cache memory access: "
|
badprint "Binlog cache memory access: "
|
||||||
. $mycalc{'pct_binlog_cache'} . "% ( "
|
. $mycalc{'pct_binlog_cache'} . "% ("
|
||||||
. (
|
. ( $mystat{'Binlog_cache_use'} - $mystat{'Binlog_cache_disk_use'} )
|
||||||
$mystat{'Binlog_cache_use'} - $mystat{'Binlog_cache_disk_use'} )
|
|
||||||
. " Memory / "
|
. " Memory / "
|
||||||
. $mystat{'Binlog_cache_use'}
|
. $mystat{'Binlog_cache_use'}
|
||||||
. " Total)";
|
. " Total)";
|
||||||
push( @generalrec,
|
push( @generalrec,
|
||||||
"Increase binlog_cache_size (Actual value: "
|
"Increase binlog_cache_size (Actual value: "
|
||||||
. $myvar{'binlog_cache_size'}
|
. $myvar{'binlog_cache_size'}
|
||||||
. ") " );
|
. ")" );
|
||||||
push( @adjvars,
|
push( @adjvars,
|
||||||
"binlog_cache_size ("
|
"binlog_cache_size ("
|
||||||
. hr_bytes( $myvar{'binlog_cache_size'} + 16 * 1024 * 1024 )
|
. hr_bytes( $myvar{'binlog_cache_size'} + 16 * 1024 * 1024 )
|
||||||
. " ) " );
|
. ")" );
|
||||||
} else {
|
} else {
|
||||||
goodprint "Binlog cache memory access: "
|
goodprint "Binlog cache memory access: "
|
||||||
. $mycalc{'pct_binlog_cache'} . "% ( "
|
. $mycalc{'pct_binlog_cache'} . "% ("
|
||||||
. (
|
. ( $mystat{'Binlog_cache_use'} - $mystat{'Binlog_cache_disk_use'} )
|
||||||
$mystat{'Binlog_cache_use'} - $mystat{'Binlog_cache_disk_use'} )
|
|
||||||
. " Memory / "
|
. " Memory / "
|
||||||
. $mystat{'Binlog_cache_use'}
|
. $mystat{'Binlog_cache_use'}
|
||||||
. " Total)";
|
. " Total)";
|
||||||
|
@ -3004,7 +3002,7 @@ sub mysql_myisam {
|
||||||
badprint
|
badprint
|
||||||
"None of your MyISAM tables are indexed - add indexes immediately";
|
"None of your MyISAM tables are indexed - add indexes immediately";
|
||||||
} else {
|
} else {
|
||||||
if ( $myvar{'key_buffer_size'} < $mycalc{'total_myisam_indexes'}
|
if ( $myvar{'key_buffer_size'} < $mycalc{'total_myisam_indexes'}
|
||||||
&& $mycalc{'pct_keys_from_mem'} < 95 )
|
&& $mycalc{'pct_keys_from_mem'} < 95 )
|
||||||
{
|
{
|
||||||
badprint "Key buffer size / total MyISAM indexes: "
|
badprint "Key buffer size / total MyISAM indexes: "
|
||||||
|
@ -3090,7 +3088,7 @@ sub mariadb_threadpool {
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( $myvar{'have_innodb'} eq 'YES' ) {
|
if ( $myvar{'have_innodb'} eq 'YES' ) {
|
||||||
if ( $myvar{'thread_pool_size'} < 16
|
if ( $myvar{'thread_pool_size'} < 16
|
||||||
or $myvar{'thread_pool_size'} > 36 )
|
or $myvar{'thread_pool_size'} > 36 )
|
||||||
{
|
{
|
||||||
badprint
|
badprint
|
||||||
|
@ -3167,7 +3165,7 @@ sub mysqsl_pfs {
|
||||||
# Top user per connection
|
# Top user per connection
|
||||||
subheaderprint "Performance schema: Top 5 user per connection";
|
subheaderprint "Performance schema: Top 5 user per connection";
|
||||||
my $nbL=1;
|
my $nbL=1;
|
||||||
for my $lQuery(select_array ('select user, total_connections from sys.user_summary order by total_connections desc LIMIT 5')) {
|
for my $lQuery(select_array ('select user, total_connections from sys.user_summary order by total_connections desc LIMIT 5')) {
|
||||||
infoprint " +-- $nbL: $lQuery conn(s)";
|
infoprint " +-- $nbL: $lQuery conn(s)";
|
||||||
$nbL++;
|
$nbL++;
|
||||||
}
|
}
|
||||||
|
@ -3250,7 +3248,7 @@ sub mysqsl_pfs {
|
||||||
# Top host per connection
|
# Top host per connection
|
||||||
subheaderprint "Performance schema: Top 5 host per connection";
|
subheaderprint "Performance schema: Top 5 host per connection";
|
||||||
$nbL=1;
|
$nbL=1;
|
||||||
for my $lQuery(select_array ('select host, total_connections from sys.host_summary order by total_connections desc LIMIT 5')) {
|
for my $lQuery(select_array ('select host, total_connections from sys.host_summary order by total_connections desc LIMIT 5')) {
|
||||||
infoprint " +-- $nbL: $lQuery conn(s)";
|
infoprint " +-- $nbL: $lQuery conn(s)";
|
||||||
$nbL++;
|
$nbL++;
|
||||||
}
|
}
|
||||||
|
@ -3415,7 +3413,7 @@ sub mysqsl_pfs {
|
||||||
# Process per allocated memory
|
# Process per allocated memory
|
||||||
subheaderprint "Performance schema: Process per allocated memory";
|
subheaderprint "Performance schema: Process per allocated memory";
|
||||||
$nbL=1;
|
$nbL=1;
|
||||||
for my $lQuery(select_array ("select concat(user,concat('/', IFNULL(Command,'NONE'))) AS PROC, current_memory from sys.processlist ORDER BY current_memory DESC;" )) {
|
for my $lQuery(select_array ("select concat(user,concat('/', IFNULL(Command,'NONE'))) AS PROC, current_memory from sys.processlist ORDER BY current_memory DESC;" )) {
|
||||||
infoprint " +-- $nbL: $lQuery";
|
infoprint " +-- $nbL: $lQuery";
|
||||||
$nbL++;
|
$nbL++;
|
||||||
}
|
}
|
||||||
|
@ -3548,7 +3546,7 @@ sub mysqsl_pfs {
|
||||||
infoprint "No information found or indicators desactivated." if ($nbL == 1);
|
infoprint "No information found or indicators desactivated." if ($nbL == 1);
|
||||||
|
|
||||||
|
|
||||||
# FILE by IO read bytes
|
# FILE by IO read bytes
|
||||||
subheaderprint "Performance schema: FILE by IO read bytes";
|
subheaderprint "Performance schema: FILE by IO read bytes";
|
||||||
$nbL=1;
|
$nbL=1;
|
||||||
for my $lQuery(select_array ("use sys;(select file, total_read from io_global_by_file_by_bytes where total_read like '%MiB' order by total_read DESC) UNION (select file, total_read from io_global_by_file_by_bytes where total_read like '%KiB' order by total_read DESC LIMIT 15);")) {
|
for my $lQuery(select_array ("use sys;(select file, total_read from io_global_by_file_by_bytes where total_read like '%MiB' order by total_read DESC) UNION (select file, total_read from io_global_by_file_by_bytes where total_read like '%KiB' order by total_read DESC LIMIT 15);")) {
|
||||||
|
@ -3557,7 +3555,7 @@ sub mysqsl_pfs {
|
||||||
}
|
}
|
||||||
infoprint "No information found or indicators desactivated." if ($nbL == 1);
|
infoprint "No information found or indicators desactivated." if ($nbL == 1);
|
||||||
|
|
||||||
# FILE by IO written bytes
|
# FILE by IO written bytes
|
||||||
subheaderprint "Performance schema: FILE by IO written bytes";
|
subheaderprint "Performance schema: FILE by IO written bytes";
|
||||||
$nbL=1;
|
$nbL=1;
|
||||||
for my $lQuery(select_array ("use sys;(select file, total_written from io_global_by_file_by_bytes where total_written like '%MiB' order by total_written DESC) UNION (select file, total_written from io_global_by_file_by_bytes where total_written like '%KiB' order by total_written DESC LIMIT 15);")) {
|
for my $lQuery(select_array ("use sys;(select file, total_written from io_global_by_file_by_bytes where total_written like '%MiB' order by total_written DESC) UNION (select file, total_written from io_global_by_file_by_bytes where total_written like '%KiB' order by total_written DESC LIMIT 15);")) {
|
||||||
|
@ -3604,7 +3602,7 @@ sub mysqsl_pfs {
|
||||||
infoprint "No information found or indicators desactivated." if ($nbL == 1);
|
infoprint "No information found or indicators desactivated." if ($nbL == 1);
|
||||||
|
|
||||||
# Event Wait by write bytes
|
# Event Wait by write bytes
|
||||||
subheaderprint "Performance schema: Event Wait written bytes";
|
subheaderprint "Performance schema: Event Wait written bytes";
|
||||||
$nbL=1;
|
$nbL=1;
|
||||||
for my $lQuery(select_array ("use sys;(select event_name, total_written from io_global_by_wait_by_bytes where total_written like '%MiB' order by total_written DESC) UNION (select event_name, total_written from io_global_by_wait_by_bytes where total_written like '%KiB' order by total_written DESC LIMIT 15);")) {
|
for my $lQuery(select_array ("use sys;(select event_name, total_written from io_global_by_wait_by_bytes where total_written like '%MiB' order by total_written DESC) UNION (select event_name, total_written from io_global_by_wait_by_bytes where total_written like '%KiB' order by total_written DESC LIMIT 15);")) {
|
||||||
infoprint " +-- $nbL: $lQuery";
|
infoprint " +-- $nbL: $lQuery";
|
||||||
|
@ -3661,7 +3659,7 @@ sub mysqsl_pfs {
|
||||||
# TOP 15 high read latency index
|
# TOP 15 high read latency index
|
||||||
subheaderprint "Performance schema: TOP 15 high read latency index";
|
subheaderprint "Performance schema: TOP 15 high read latency index";
|
||||||
$nbL=1;
|
$nbL=1;
|
||||||
for my $lQuery(select_array ('use sys;select table_schema, table_name,index_name, select_latency from schema_index_statistics ORDER BY select_latency DESC LIMIT 15;')) {
|
for my $lQuery(select_array ('use sys;select table_schema, table_name,index_name, select_latency from schema_index_statistics ORDER BY select_latency DESC LIMIT 15;')) {
|
||||||
infoprint " +-- $nbL: $lQuery";
|
infoprint " +-- $nbL: $lQuery";
|
||||||
$nbL++;
|
$nbL++;
|
||||||
}
|
}
|
||||||
|
@ -3670,7 +3668,7 @@ sub mysqsl_pfs {
|
||||||
# TOP 15 high insert latency index
|
# TOP 15 high insert latency index
|
||||||
subheaderprint "Performance schema: TOP 15 most modified indexes";
|
subheaderprint "Performance schema: TOP 15 most modified indexes";
|
||||||
$nbL=1;
|
$nbL=1;
|
||||||
for my $lQuery(select_array ('use sys;select table_schema, table_name,index_name, insert_latency from schema_index_statistics ORDER BY insert_latency DESC LIMIT 15;')) {
|
for my $lQuery(select_array ('use sys;select table_schema, table_name,index_name, insert_latency from schema_index_statistics ORDER BY insert_latency DESC LIMIT 15;')) {
|
||||||
infoprint " +-- $nbL: $lQuery";
|
infoprint " +-- $nbL: $lQuery";
|
||||||
$nbL++;
|
$nbL++;
|
||||||
}
|
}
|
||||||
|
@ -3679,7 +3677,7 @@ sub mysqsl_pfs {
|
||||||
# TOP 15 high update latency index
|
# TOP 15 high update latency index
|
||||||
subheaderprint "Performance schema: TOP 15 high update latency index";
|
subheaderprint "Performance schema: TOP 15 high update latency index";
|
||||||
$nbL=1;
|
$nbL=1;
|
||||||
for my $lQuery(select_array ('use sys;select table_schema, table_name,index_name, update_latency from schema_index_statistics ORDER BY update_latency DESC LIMIT 15;')) {
|
for my $lQuery(select_array ('use sys;select table_schema, table_name,index_name, update_latency from schema_index_statistics ORDER BY update_latency DESC LIMIT 15;')) {
|
||||||
infoprint " +-- $nbL: $lQuery";
|
infoprint " +-- $nbL: $lQuery";
|
||||||
$nbL++;
|
$nbL++;
|
||||||
}
|
}
|
||||||
|
@ -3688,7 +3686,7 @@ sub mysqsl_pfs {
|
||||||
# TOP 15 high delete latency index
|
# TOP 15 high delete latency index
|
||||||
subheaderprint "Performance schema: TOP 15 high delete latency index";
|
subheaderprint "Performance schema: TOP 15 high delete latency index";
|
||||||
$nbL=1;
|
$nbL=1;
|
||||||
for my $lQuery(select_array ('use sys;select table_schema, table_name,index_name, delete_latency from schema_index_statistics ORDER BY delete_latency DESC LIMIT 15;')) {
|
for my $lQuery(select_array ('use sys;select table_schema, table_name,index_name, delete_latency from schema_index_statistics ORDER BY delete_latency DESC LIMIT 15;')) {
|
||||||
infoprint " +-- $nbL: $lQuery";
|
infoprint " +-- $nbL: $lQuery";
|
||||||
$nbL++;
|
$nbL++;
|
||||||
}
|
}
|
||||||
|
@ -3715,7 +3713,7 @@ sub mysqsl_pfs {
|
||||||
# TOP 15 high read latency tables
|
# TOP 15 high read latency tables
|
||||||
subheaderprint "Performance schema: TOP 15 high read latency tables";
|
subheaderprint "Performance schema: TOP 15 high read latency tables";
|
||||||
$nbL=1;
|
$nbL=1;
|
||||||
for my $lQuery(select_array ('use sys;select table_schema, table_name, fetch_latency from schema_table_statistics ORDER BY fetch_latency DESC LIMIT 15;')) {
|
for my $lQuery(select_array ('use sys;select table_schema, table_name, fetch_latency from schema_table_statistics ORDER BY fetch_latency DESC LIMIT 15;')) {
|
||||||
infoprint " +-- $nbL: $lQuery";
|
infoprint " +-- $nbL: $lQuery";
|
||||||
$nbL++;
|
$nbL++;
|
||||||
}
|
}
|
||||||
|
@ -3724,7 +3722,7 @@ sub mysqsl_pfs {
|
||||||
# TOP 15 high insert latency tables
|
# TOP 15 high insert latency tables
|
||||||
subheaderprint "Performance schema: TOP 15 high insert latency tables";
|
subheaderprint "Performance schema: TOP 15 high insert latency tables";
|
||||||
$nbL=1;
|
$nbL=1;
|
||||||
for my $lQuery(select_array ('use sys;select table_schema, table_name, insert_latency from schema_table_statistics ORDER BY insert_latency DESC LIMIT 15;')) {
|
for my $lQuery(select_array ('use sys;select table_schema, table_name, insert_latency from schema_table_statistics ORDER BY insert_latency DESC LIMIT 15;')) {
|
||||||
infoprint " +-- $nbL: $lQuery";
|
infoprint " +-- $nbL: $lQuery";
|
||||||
$nbL++;
|
$nbL++;
|
||||||
}
|
}
|
||||||
|
@ -3733,7 +3731,7 @@ sub mysqsl_pfs {
|
||||||
# TOP 15 high update latency tables
|
# TOP 15 high update latency tables
|
||||||
subheaderprint "Performance schema: TOP 15 high update latency tables";
|
subheaderprint "Performance schema: TOP 15 high update latency tables";
|
||||||
$nbL=1;
|
$nbL=1;
|
||||||
for my $lQuery(select_array ('use sys;select table_schema, table_name, update_latency from schema_table_statistics ORDER BY update_latency DESC LIMIT 15;')) {
|
for my $lQuery(select_array ('use sys;select table_schema, table_name, update_latency from schema_table_statistics ORDER BY update_latency DESC LIMIT 15;')) {
|
||||||
infoprint " +-- $nbL: $lQuery";
|
infoprint " +-- $nbL: $lQuery";
|
||||||
$nbL++;
|
$nbL++;
|
||||||
}
|
}
|
||||||
|
@ -3742,7 +3740,7 @@ sub mysqsl_pfs {
|
||||||
# TOP 15 high delete latency tables
|
# TOP 15 high delete latency tables
|
||||||
subheaderprint "Performance schema: TOP 15 high delete latency tables";
|
subheaderprint "Performance schema: TOP 15 high delete latency tables";
|
||||||
$nbL=1;
|
$nbL=1;
|
||||||
for my $lQuery(select_array ('use sys;select table_schema, table_name, delete_latency from schema_table_statistics ORDER BY delete_latency DESC LIMIT 15;')) {
|
for my $lQuery(select_array ('use sys;select table_schema, table_name, delete_latency from schema_table_statistics ORDER BY delete_latency DESC LIMIT 15;')) {
|
||||||
infoprint " +-- $nbL: $lQuery";
|
infoprint " +-- $nbL: $lQuery";
|
||||||
$nbL++;
|
$nbL++;
|
||||||
}
|
}
|
||||||
|
@ -3757,7 +3755,7 @@ sub mysqsl_pfs {
|
||||||
}
|
}
|
||||||
infoprint "No information found or indicators desactivated." if ($nbL == 1);
|
infoprint "No information found or indicators desactivated." if ($nbL == 1);
|
||||||
|
|
||||||
subheaderprint "Performance schema: Tables not using InnoDb buffer";
|
subheaderprint "Performance schema: Tables not using InnoDB buffer";
|
||||||
$nbL=1;
|
$nbL=1;
|
||||||
for my $lQuery(select_array (' Select table_schema, table_name from sys.schema_table_statistics_with_buffer where innodb_buffer_allocated IS NULL;')) {
|
for my $lQuery(select_array (' Select table_schema, table_name from sys.schema_table_statistics_with_buffer where innodb_buffer_allocated IS NULL;')) {
|
||||||
infoprint " +-- $nbL: $lQuery";
|
infoprint " +-- $nbL: $lQuery";
|
||||||
|
@ -3765,14 +3763,14 @@ sub mysqsl_pfs {
|
||||||
}
|
}
|
||||||
infoprint "No information found or indicators desactivated." if ($nbL == 1);
|
infoprint "No information found or indicators desactivated." if ($nbL == 1);
|
||||||
|
|
||||||
subheaderprint "Performance schema: Table not using InnoDb buffer";
|
subheaderprint "Performance schema: Table not using InnoDB buffer";
|
||||||
$nbL=1;
|
$nbL=1;
|
||||||
for my $lQuery(select_array (' Select table_schema, table_name from sys.schema_table_statistics_with_buffer where innodb_buffer_allocated IS NULL;')) {
|
for my $lQuery(select_array (' Select table_schema, table_name from sys.schema_table_statistics_with_buffer where innodb_buffer_allocated IS NULL;')) {
|
||||||
infoprint " +-- $nbL: $lQuery";
|
infoprint " +-- $nbL: $lQuery";
|
||||||
$nbL++;
|
$nbL++;
|
||||||
}
|
}
|
||||||
infoprint "No information found or indicators desactivated." if ($nbL == 1);
|
infoprint "No information found or indicators desactivated." if ($nbL == 1);
|
||||||
subheaderprint "Performance schema: Table not using InnoDb buffer";
|
subheaderprint "Performance schema: Table not using InnoDB buffer";
|
||||||
$nbL=1;
|
$nbL=1;
|
||||||
for my $lQuery(select_array (' Select table_schema, table_name from sys.schema_table_statistics_with_buffer where innodb_buffer_allocated IS NULL;')) {
|
for my $lQuery(select_array (' Select table_schema, table_name from sys.schema_table_statistics_with_buffer where innodb_buffer_allocated IS NULL;')) {
|
||||||
infoprint " +-- $nbL: $lQuery";
|
infoprint " +-- $nbL: $lQuery";
|
||||||
|
@ -3780,18 +3778,18 @@ sub mysqsl_pfs {
|
||||||
}
|
}
|
||||||
infoprint "No information found or indicators desactivated." if ($nbL == 1);
|
infoprint "No information found or indicators desactivated." if ($nbL == 1);
|
||||||
|
|
||||||
subheaderprint "Performance schema: Top 15 Tables using InnoDb buffer";
|
subheaderprint "Performance schema: Top 15 Tables using InnoDB buffer";
|
||||||
$nbL=1;
|
$nbL=1;
|
||||||
for my $lQuery(select_array ('Select table_schema, table_name,innodb_buffer_allocated from sys.schema_table_statistics_with_buffer where innodb_buffer_allocated IS NOT NULL ORDER BY innodb_buffer_allocated DESC LIMIT 15;')) {
|
for my $lQuery(select_array ('select table_schema,table_name,innodb_buffer_allocated from sys.schema_table_statistics_with_buffer where innodb_buffer_allocated IS NOT NULL ORDER BY innodb_buffer_allocated DESC LIMIT 15;')) {
|
||||||
infoprint " +-- $nbL: $lQuery";
|
infoprint " +-- $nbL: $lQuery";
|
||||||
$nbL++;
|
$nbL++;
|
||||||
}
|
}
|
||||||
infoprint "No information found or indicators desactivated." if ($nbL == 1);
|
infoprint "No information found or indicators desactivated." if ($nbL == 1);
|
||||||
|
|
||||||
|
|
||||||
subheaderprint "Performance schema: Top 15 Tables with InnoDb buffer free";
|
subheaderprint "Performance schema: Top 15 Tables with InnoDB buffer free";
|
||||||
$nbL=1;
|
$nbL=1;
|
||||||
for my $lQuery(select_array ('Select table_schema, table_name,innodb_buffer_free from sys.schema_table_statistics_with_buffer where innodb_buffer_allocated IS NOT NULL ORDER BY innodb_buffer_free DESC LIMIT 15;')) {
|
for my $lQuery(select_array ('select table_schema,table_name,innodb_buffer_free from sys.schema_table_statistics_with_buffer where innodb_buffer_allocated IS NOT NULL ORDER BY innodb_buffer_free DESC LIMIT 15;')) {
|
||||||
infoprint " +-- $nbL: $lQuery";
|
infoprint " +-- $nbL: $lQuery";
|
||||||
$nbL++;
|
$nbL++;
|
||||||
}
|
}
|
||||||
|
@ -3896,7 +3894,7 @@ sub mysqsl_pfs {
|
||||||
|
|
||||||
subheaderprint "Performance schema: TOP 15 total latency queries with sort";
|
subheaderprint "Performance schema: TOP 15 total latency queries with sort";
|
||||||
$nbL=1;
|
$nbL=1;
|
||||||
for my $lQuery(select_array ('use sys;select db, query, total_latency AS search from statements_with_sorting ORDER BY total_latency DESC LIMIT 15;')) {
|
for my $lQuery(select_array ('use sys;select db, query, total_latency AS search from statements_with_sorting ORDER BY total_latency DESC LIMIT 15;')) {
|
||||||
infoprint " +-- $nbL: $lQuery";
|
infoprint " +-- $nbL: $lQuery";
|
||||||
$nbL++;
|
$nbL++;
|
||||||
}
|
}
|
||||||
|
@ -3904,7 +3902,7 @@ sub mysqsl_pfs {
|
||||||
|
|
||||||
subheaderprint "Performance schema: TOP 15 merge queries with sort";
|
subheaderprint "Performance schema: TOP 15 merge queries with sort";
|
||||||
$nbL=1;
|
$nbL=1;
|
||||||
for my $lQuery(select_array ('use sys;select db, query, sort_merge_passes AS search from statements_with_sorting ORDER BY sort_merge_passes DESC LIMIT 15;')) {
|
for my $lQuery(select_array ('use sys;select db, query, sort_merge_passes AS search from statements_with_sorting ORDER BY sort_merge_passes DESC LIMIT 15;')) {
|
||||||
infoprint " +-- $nbL: $lQuery";
|
infoprint " +-- $nbL: $lQuery";
|
||||||
$nbL++;
|
$nbL++;
|
||||||
}
|
}
|
||||||
|
@ -3912,7 +3910,7 @@ sub mysqsl_pfs {
|
||||||
|
|
||||||
subheaderprint "Performance schema: TOP 15 average sort merges queries with sort";
|
subheaderprint "Performance schema: TOP 15 average sort merges queries with sort";
|
||||||
$nbL=1;
|
$nbL=1;
|
||||||
for my $lQuery(select_array ('use sys;select db, query, avg_sort_merges AS search from statements_with_sorting ORDER BY avg_sort_merges DESC LIMIT 15;')) {
|
for my $lQuery(select_array ('use sys;select db, query, avg_sort_merges AS search from statements_with_sorting ORDER BY avg_sort_merges DESC LIMIT 15;')) {
|
||||||
infoprint " +-- $nbL: $lQuery";
|
infoprint " +-- $nbL: $lQuery";
|
||||||
$nbL++;
|
$nbL++;
|
||||||
}
|
}
|
||||||
|
@ -3920,7 +3918,7 @@ sub mysqsl_pfs {
|
||||||
|
|
||||||
subheaderprint "Performance schema: TOP 15 scans queries with sort";
|
subheaderprint "Performance schema: TOP 15 scans queries with sort";
|
||||||
$nbL=1;
|
$nbL=1;
|
||||||
for my $lQuery(select_array ('use sys;select db, query, sorts_using_scans AS search from statements_with_sorting ORDER BY sorts_using_scans DESC LIMIT 15;')) {
|
for my $lQuery(select_array ('use sys;select db, query, sorts_using_scans AS search from statements_with_sorting ORDER BY sorts_using_scans DESC LIMIT 15;')) {
|
||||||
infoprint " +-- $nbL: $lQuery";
|
infoprint " +-- $nbL: $lQuery";
|
||||||
$nbL++;
|
$nbL++;
|
||||||
}
|
}
|
||||||
|
@ -3928,7 +3926,7 @@ sub mysqsl_pfs {
|
||||||
|
|
||||||
subheaderprint "Performance schema: TOP 15 range queries with sort";
|
subheaderprint "Performance schema: TOP 15 range queries with sort";
|
||||||
$nbL=1;
|
$nbL=1;
|
||||||
for my $lQuery(select_array ('use sys;select db, query, sort_using_range AS search from statements_with_sorting ORDER BY sort_using_range DESC LIMIT 15;')) {
|
for my $lQuery(select_array ('use sys;select db, query, sort_using_range AS search from statements_with_sorting ORDER BY sort_using_range DESC LIMIT 15;')) {
|
||||||
infoprint " +-- $nbL: $lQuery";
|
infoprint " +-- $nbL: $lQuery";
|
||||||
$nbL++;
|
$nbL++;
|
||||||
}
|
}
|
||||||
|
@ -3984,7 +3982,7 @@ sub mysqsl_pfs {
|
||||||
|
|
||||||
subheaderprint "Performance schema: TOP 15 queries with temp table to disk";
|
subheaderprint "Performance schema: TOP 15 queries with temp table to disk";
|
||||||
$nbL=1;
|
$nbL=1;
|
||||||
for my $lQuery(select_array ('use sys;select db, query, disk_tmp_tables from statements_with_sorting ORDER BY disk_tmp_tables DESC LIMIT 15;')) {
|
for my $lQuery(select_array ('use sys;select db, query, disk_tmp_tables from statements_with_sorting ORDER BY disk_tmp_tables DESC LIMIT 15;')) {
|
||||||
infoprint " +-- $nbL: $lQuery";
|
infoprint " +-- $nbL: $lQuery";
|
||||||
$nbL++;
|
$nbL++;
|
||||||
}
|
}
|
||||||
|
@ -4005,7 +4003,7 @@ sub mysqsl_pfs {
|
||||||
|
|
||||||
subheaderprint "Performance schema: TOP 15 class events by number";
|
subheaderprint "Performance schema: TOP 15 class events by number";
|
||||||
$nbL=1;
|
$nbL=1;
|
||||||
for my $lQuery(select_array ('use sys;select event_class, total from wait_classes_global_by_latency ORDER BY total DESC LIMIT 15;')) {
|
for my $lQuery(select_array ('use sys;select event_class, total from wait_classes_global_by_latency ORDER BY total DESC LIMIT 15;')) {
|
||||||
infoprint " +-- $nbL: $lQuery";
|
infoprint " +-- $nbL: $lQuery";
|
||||||
$nbL++;
|
$nbL++;
|
||||||
}
|
}
|
||||||
|
@ -4021,7 +4019,7 @@ sub mysqsl_pfs {
|
||||||
|
|
||||||
subheaderprint "Performance schema: TOP 15 class events by total latency";
|
subheaderprint "Performance schema: TOP 15 class events by total latency";
|
||||||
$nbL=1;
|
$nbL=1;
|
||||||
for my $lQuery(select_array ('use sys;select event_class, total_latency from wait_classes_global_by_latency ORDER BY total_latency DESC LIMIT 15;')) {
|
for my $lQuery(select_array ('use sys;select event_class, total_latency from wait_classes_global_by_latency ORDER BY total_latency DESC LIMIT 15;')) {
|
||||||
infoprint " +-- $nbL: $lQuery";
|
infoprint " +-- $nbL: $lQuery";
|
||||||
$nbL++;
|
$nbL++;
|
||||||
}
|
}
|
||||||
|
@ -4037,7 +4035,7 @@ sub mysqsl_pfs {
|
||||||
|
|
||||||
subheaderprint "Performance schema: TOP 15 class events by max latency";
|
subheaderprint "Performance schema: TOP 15 class events by max latency";
|
||||||
$nbL=1;
|
$nbL=1;
|
||||||
for my $lQuery(select_array ('use sys;select event_class, max_latency from wait_classes_global_by_latency ORDER BY max_latency DESC LIMIT 15;')) {
|
for my $lQuery(select_array ('use sys;select event_class, max_latency from wait_classes_global_by_latency ORDER BY max_latency DESC LIMIT 15;')) {
|
||||||
infoprint " +-- $nbL: $lQuery";
|
infoprint " +-- $nbL: $lQuery";
|
||||||
$nbL++;
|
$nbL++;
|
||||||
}
|
}
|
||||||
|
@ -4289,14 +4287,14 @@ having sum(if(c.column_key in ('PRI','UNI'), 1,0)) = 0"
|
||||||
else {
|
else {
|
||||||
goodprint "All tables get a primary key";
|
goodprint "All tables get a primary key";
|
||||||
}
|
}
|
||||||
my @nonInnoDbTables = select_array(
|
my @nonInnoDBTables = select_array(
|
||||||
"select CONCAT(table_schema,CONCAT('.', table_name)) from information_schema.tables where ENGINE <> 'InnoDb' and table_schema not in ('mysql', 'performance_schema', 'information_schema')"
|
"select CONCAT(table_schema,CONCAT('.', table_name)) from information_schema.tables where ENGINE <> 'InnoDB' and table_schema not in ('mysql', 'performance_schema', 'information_schema')"
|
||||||
);
|
);
|
||||||
if ( scalar(@nonInnoDbTables) > 0 ) {
|
if ( scalar(@nonInnoDBTables) > 0 ) {
|
||||||
badprint "Following table(s) are not InnoDB table:";
|
badprint "Following table(s) are not InnoDB table:";
|
||||||
push @generalrec,
|
push @generalrec,
|
||||||
"Ensure that all table(s) are InnoDB tables for Galera replication";
|
"Ensure that all table(s) are InnoDB tables for Galera replication";
|
||||||
foreach my $badtable (@nonInnoDbTables) {
|
foreach my $badtable (@nonInnoDBTables) {
|
||||||
badprint "\t$badtable";
|
badprint "\t$badtable";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -4311,11 +4309,11 @@ having sum(if(c.column_key in ('PRI','UNI'), 1,0)) = 0"
|
||||||
goodprint "Binlog format is in ROW mode.";
|
goodprint "Binlog format is in ROW mode.";
|
||||||
}
|
}
|
||||||
if ( $myvar{'innodb_flush_log_at_trx_commit'} != 0 ) {
|
if ( $myvar{'innodb_flush_log_at_trx_commit'} != 0 ) {
|
||||||
badprint "Innodb flush log at each commit should be disabled.";
|
badprint "InnoDB flush log at each commit should be disabled.";
|
||||||
push @adjvars, "innodb_flush_log_at_trx_commit = 0";
|
push @adjvars, "innodb_flush_log_at_trx_commit = 0";
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
goodprint "Innodb flush log at each commit is disabled for Galera.";
|
goodprint "InnoDB flush log at each commit is disabled for Galera.";
|
||||||
}
|
}
|
||||||
|
|
||||||
infoprint "Read consistency mode :" . $myvar{'wsrep_causal_reads'};
|
infoprint "Read consistency mode :" . $myvar{'wsrep_causal_reads'};
|
||||||
|
@ -4533,7 +4531,7 @@ sub mysql_innodb {
|
||||||
. $myvar{'innodb_thread_concurrency'} ;
|
. $myvar{'innodb_thread_concurrency'} ;
|
||||||
}
|
}
|
||||||
# InnoDB Buffer Pull Size
|
# InnoDB Buffer Pull Size
|
||||||
if ( $myvar{'innodb_file_per_table'} == "ON" ) {
|
if ( $myvar{'innodb_file_per_table'} eq "ON" ) {
|
||||||
goodprint "InnoDB File per table is activated";
|
goodprint "InnoDB File per table is activated";
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
@ -4558,16 +4556,16 @@ sub mysql_innodb {
|
||||||
. ") if possible." );
|
. ") if possible." );
|
||||||
}
|
}
|
||||||
if ($mycalc{'innodb_log_size_pct'} < 20 or $mycalc{'innodb_log_size_pct'} > 30) {
|
if ($mycalc{'innodb_log_size_pct'} < 20 or $mycalc{'innodb_log_size_pct'} > 30) {
|
||||||
badprint "Ratio InnoDB log file size / InnoDb Buffer pool size (".
|
badprint "Ratio InnoDB log file size / InnoDB Buffer pool size (".
|
||||||
$mycalc{'innodb_log_size_pct'}.
|
$mycalc{'innodb_log_size_pct'}.
|
||||||
" %): " . hr_bytes( $myvar{'innodb_log_file_size'} ) . "/"
|
" %): " . hr_bytes( $myvar{'innodb_log_file_size'} ) . "/"
|
||||||
. hr_bytes( $myvar{'innodb_buffer_pool_size'} ) . " should be equal 25%";
|
. hr_bytes( $myvar{'innodb_buffer_pool_size'} ) . " should be equal 25%";
|
||||||
push( @adjvars,
|
push( @adjvars,
|
||||||
"innodb_log_file_size should be equals to 1/4 of buffer pool size (= "
|
"innodb_log_file_size should be equals to 1/4 of buffer pool size (="
|
||||||
. hr_bytes_rnd( $myvar{'innodb_buffer_pool_size'}/4 ) . ") if possible." );
|
. hr_bytes_rnd( $myvar{'innodb_buffer_pool_size'}/4 ) . ") if possible." );
|
||||||
} else {
|
} else {
|
||||||
goodprint "InnoDB log file size / InnoDb Buffer pool size: "
|
goodprint "InnoDB log file size / InnoDB Buffer pool size: "
|
||||||
. hr_bytes( $myvar{'innodb_buffer_pool_size'} ) . "/"
|
. hr_bytes( $myvar{'innodb_log_file_size'} ) . "/"
|
||||||
. hr_bytes( $myvar{'innodb_buffer_pool_size'} ) . " should be equal 25%";
|
. hr_bytes( $myvar{'innodb_buffer_pool_size'} ) . " should be equal 25%";
|
||||||
}
|
}
|
||||||
# InnoDB Buffer Pull Instances (MySQL 5.6.6+)
|
# InnoDB Buffer Pull Instances (MySQL 5.6.6+)
|
||||||
|
@ -4785,7 +4783,7 @@ sub mysql_databases {
|
||||||
|
|
||||||
foreach (@dblist) {
|
foreach (@dblist) {
|
||||||
chomp($_);
|
chomp($_);
|
||||||
if ( $_ eq "information_schema"
|
if ( $_ eq "information_schema"
|
||||||
or $_ eq "performance_schema"
|
or $_ eq "performance_schema"
|
||||||
or $_ eq "mysql"
|
or $_ eq "mysql"
|
||||||
or $_ eq "" )
|
or $_ eq "" )
|
||||||
|
@ -4807,7 +4805,7 @@ sub mysql_databases {
|
||||||
. (
|
. (
|
||||||
join ", ",
|
join ", ",
|
||||||
select_array(
|
select_array(
|
||||||
"SELECT DISTINCT(TABLE_COLLATION) FROM information_schema.TABLES WHERE TABLE_SCHEMA='$_';"
|
"SELECT DISTINCT(TABLE_COLLATION) FROM information_schema.TABLES WHERE TABLE_SCHEMA='$_';"
|
||||||
)
|
)
|
||||||
) . ")";
|
) . ")";
|
||||||
infoprint " +-- ROWS : "
|
infoprint " +-- ROWS : "
|
||||||
|
@ -4872,13 +4870,13 @@ sub mysql_databases {
|
||||||
}
|
}
|
||||||
|
|
||||||
my @distinct_column_charset = select_array(
|
my @distinct_column_charset = select_array(
|
||||||
"select DISTINCT(CHARACTER_SET_NAME) from information_schema.COLUMNS where CHARACTER_SET_NAME IS NOT NULL AND TABLE_SCHEMA ='$_'"
|
"select DISTINCT(CHARACTER_SET_NAME) from information_schema.COLUMNS where CHARACTER_SET_NAME IS NOT NULL AND TABLE_SCHEMA ='$_'"
|
||||||
);
|
);
|
||||||
infoprint "Charsets for $dbinfo[0] database table column: "
|
infoprint "Charsets for $dbinfo[0] database table column: "
|
||||||
. join( ', ', @distinct_column_charset );
|
. join( ', ', @distinct_column_charset );
|
||||||
if ( scalar(@distinct_column_charset) > 1 ) {
|
if ( scalar(@distinct_column_charset) > 1 ) {
|
||||||
badprint $dbinfo[0]
|
badprint $dbinfo[0]
|
||||||
. " table column(s) has several charsets defined for all text like column(s).";
|
. " table column(s) has several charsets defined for all text like column(s).";
|
||||||
push( @generalrec,
|
push( @generalrec,
|
||||||
"Limit charset for column to one charset if possible for "
|
"Limit charset for column to one charset if possible for "
|
||||||
. $dbinfo[0]
|
. $dbinfo[0]
|
||||||
|
@ -4890,13 +4888,13 @@ sub mysql_databases {
|
||||||
}
|
}
|
||||||
|
|
||||||
my @distinct_column_collation = select_array(
|
my @distinct_column_collation = select_array(
|
||||||
"select DISTINCT(COLLATION_NAME) from information_schema.COLUMNS where COLLATION_NAME IS NOT NULL AND TABLE_SCHEMA ='$_'"
|
"select DISTINCT(COLLATION_NAME) from information_schema.COLUMNS where COLLATION_NAME IS NOT NULL AND TABLE_SCHEMA ='$_'"
|
||||||
);
|
);
|
||||||
infoprint "Collations for $dbinfo[0] database table column: "
|
infoprint "Collations for $dbinfo[0] database table column: "
|
||||||
. join( ', ', @distinct_column_collation );
|
. join( ', ', @distinct_column_collation );
|
||||||
if ( scalar(@distinct_column_collation) > 1 ) {
|
if ( scalar(@distinct_column_collation) > 1 ) {
|
||||||
badprint $dbinfo[0]
|
badprint $dbinfo[0]
|
||||||
. " table column(s) has several collations defined for all text like column(s).";
|
. " table column(s) has several collations defined for all text like column(s).";
|
||||||
push( @generalrec,
|
push( @generalrec,
|
||||||
"Limit collations for column to one collation if possible for "
|
"Limit collations for column to one collation if possible for "
|
||||||
. $dbinfo[0]
|
. $dbinfo[0]
|
||||||
|
|
Loading…
Reference in a new issue