my.ini

Le but de ce chapitre est de mettre en place un bon fichier my.ini

En premier lieu, on regarde la mémoire libre ainsi que le nombre de processeur

cat /proc/meminfo
MemTotal:        3064328 kB
MemFree:          697228 kB
MemAvailable:    1337368 kB

cat /proc/cpuinfo 
2 processeur

Regardons ensuite le nombre de tables (nous prenons ici l'exemple de https://dev.mysql.com/doc/employee/en/employees-installation.html)

Remplissons la et faisons les requetes automatiques

mysql < employees.sql
mysql -t < test_employees_md5.sql

Configuration réseau et de base

bind_address                    = 127.0.0.1 # mettre  0.0.0.0 pour les connexions distantes
max_allowed_packet              = 256M # taille d'un packet de donnée
max_connect_errors              = 1000000 # eviction d'un client apres max_connect_errors
skip_external_locking # pour MyISAM desaloue les lock systeme
skip_name_resolve # pas de résolution DNS
sql_mode                       ="NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES"
tmpdir                          = /tmp
#user                            = mysql En cas d'installation en mode service, il faut préciser l'utilisateur qui execute le service

Parametrage du nombre de connexion:

Cela est issue au runtime de :

show status like '%connected%'

et faire

max_connections                = 151                                 # nombre de connexion maximal
max_user_connections           = 145                                 # nombre de connexion pour un utilisateur
thread_cache_size              = 151                                 # =max_connexions

Variable de sessions

sort_buffer_size               = 2M                                  # Could be too big for many small sorts
tmp_table_size                 = 32M                                 # taille des table temporaire

read_buffer_size               = 128k                                # a verifier avec le calcul mémoire
read_rnd_buffer_size           = 256k                                # a verifier avec le calcul mémoire
join_buffer_size               = 128k                                # a verifier avec le calcul mémoire


# Other buffers and caches

table_definition_cache         = 1400                                # nombre de table dans la base de donnée au max au min show global status like 'open_tables';
table_open_cache               = 2000                                # approximativement show global status like 'opened_tables'; / max_connection
table_open_cache_instances     = 16                                  # New default in 5.7

Parametrage de InnoDB

default_storage_engine          = InnoDB # le moteur de stockage est InnoDB
innodb_buffer_pool_instances    = 1     # 1 instance par Giga, donc ici 1 pour buffer pool chunk size de 1G
innodb_buffer_pool_size         = 410M    # 80% de la RAM
innodb_file_per_table           = 1
innodb_flush_log_at_trx_commit  = 0
innodb_flush_method             = O_DIRECT
innodb_file_format             = Barracuda # format du fichier interne 
innodb_log_buffer_size          = 5M # entre 5 et 10% du log file size
innodb_log_file_size            = 64M # 25% du buffer pool
innodb_stats_on_metadata        = 0
#innodb_temp_data_file_path     = ibtmp1:64M:autoextend:max:20G # Control the maximum size for the ibtmp1 file
innodb_thread_concurrency      = 4     # nombre de CPU -1/2
innodb_read_io_threads          = 8
innodb_write_io_threads         = 8

Les deux derniers paramètres sont issue de SHOW ENGINE INNODB STATUS et en particulier du nombre de requete pending qui doivent être intéfieur a pending*64<io_thread

Parametrage de MyISAM

key_buffer_size                = 8M                                  # 25% de la RAM 
myisam_recover_options         = 'BACKUP,FORCE'

Et enfin les logs:

log_warnings                   = 2                                   # MySQL 5.6, equivalent à log_error_verbosity = 3
# log_error_verbosity            = 3                                   # MySQL 5.7, equivalent ) log_warnings = 2,a supprimer pour mariadb
innodb_print_all_deadlocks     = 1


# Slow Query Log

slow_query_log_file            = %INSTANCEDIR%/log/%UNAME%_%INSTANCE%_slow.log   
slow_query_log                 = 0
log_queries_not_using_indexes  = 0                                   # pour les developpeurs
long_query_time                = 0.5
min_examined_row_limit         = 100

# Replication

#server_id                      = %SERVERID%                            # id
#log_bin                        = %INSTANCEDIR%/binlog/%UNAME%_%INSTANCE%_binlog            #emplacement
# master_verify_checksum         = ON                                  # MySQL 5.6
#binlog_cache_size              = 1M
#binlog_stmt_cache_size         = 1M
#max_binlog_size                = 128M                                # en fonction du trafic
#sync_binlog                    = 1                                   # Mettre a 0 pour avoir des problemes
#expire_logs_days               = 5                                   # We will survive easter holidays
#binlog_format                  = ROW                                 # ROW est ok pour la replication
# binlog_row_image               = MINIMAL                             # Since 5.6
# auto_increment_increment       = 2                                   # Pour Master/Master mettre 2 
# auto_increment_offset          = 1                                   # Pour Master/Master mettre 1 et 2

Calcul de la mémoire

Utiliser https://www.mysqlcalculator.com/ qui fait le calcul de la mémoire du serveur:

key_buffer_size
+ query_cache_size
+ tmp_table_size
+ innodb_buffer_pool_size
+ innodb_additional_mem_pool_size
+ innodb_log_buffer_size
+ max_connections
×
(sort_buffer_size
+ read_buffer_size
+ read_rnd_buffer_size
+ join_buffer_size
+ thread_stack
+ binlog_cache_size )

On remarqueras le nombre de connexions maximuns influe enormément sur la mémoire


Revision #8
Created 17 June 2020 10:08:41 by ggpilou2
Updated 18 June 2020 09:20:46 by ggpilou2