Création section config mem

This commit is contained in:
whirigoyen 2022-01-25 11:30:11 +01:00
parent 72bf84b10f
commit ff3db0a0cd

View file

@ -96,6 +96,7 @@ Sur Debian 8, c'est le paquet `libmysqlclient-dev`.
Sur Debian 9 (et Debian 8 avec backports), c'est le meta-paquet `default-libmysqlclient-dev` qui permet de facilement installer la paquet adapté à votre base de données.
### MySQL 5.7
<https://dev.mysql.com/doc/mysql-apt-repo-quick-guide/>
@ -117,6 +118,7 @@ On peut ensuite installer les paquets :
> *Note* : il faudra alors installer *mytop* en récupérant le package de Debian 8
## Configuration
Le fichier de configuration principal est `/etc/mysql/my.cnf` qui inclue notamment les fichiers `.cnf` présents dans les sous-répertoires `conf.d/` et `mariadb.conf.d/`.
@ -129,9 +131,9 @@ Le fichier `/etc/mysql/mariadb.conf.d/z-evolinux-defaults.cnf` contient nos opti
[mysqld]
###### Connexions
# Maximum de connexions concurrentes (defaut = 100)... provoque un "Too many connections"
# Maximum de connexions concurrentes (défaut = 100)... provoque un "Too many connections"
max_connections = 250
# Maximum de connexions en attente en cas de max_connections atteint (defaut = 50)
# Maximum de connexions en attente en cas de max_connections atteint (défaut = 50)
back_log = 100
# Maximum d'erreurs avant de blacklister un hote
max_connect_errors = 10
@ -141,12 +143,12 @@ slow_query_log_file = /var/log/mysql/mysql-slow.log
long_query_time = 10
###### Tailles
# Taille reservee au buffer des index MyIsam
# A ajuster selon les resultatsutilisateurs
# Taille réservée au buffer des index MyIsam
# A ajuster selon les résultats utilisateurs
key_buffer_size = 512M
# Taille max des paquets envoyés/reçus … provoque un "Packet too large"
max_allowed_packet = 64M
# Taille de la memoire reserve pour un thread
# Taille de la mémoire réservée pour un thread
thread_stack = 192K
# A mettre le nombre de threads CPU alloues pour MySQL
thread_cache_size = 1
@ -154,28 +156,28 @@ thread_cache_size = 1
max_heap_table_size = 64M
###### Cache
# max_connections x nbre max de tables dans une jointure (defaut = 64)
# max_connections x nombre max de tables dans une jointure (défaut = 64)
table_open_cache = 4096
table_definition_cache = 4096
# Taille max des requetes cachees (defaut = 1M)
# Taille max des requêtes cachées (défaut = 1M)
query_cache_limit = 8M
# Taille reservee pour le cache (defaut = 0)
# Taille réservée pour le cache (défaut = 0)
query_cache_size = 256M
# Type de requetes a cacher (defaut = 1 : tout peut etre cache)
# Type de requêtes à cacher (défaut = 1 : tout peut être caché)
query_cache_type = 1
# Cache tables
max_heap_table_size = 128M
tmp_table_size = 128M
###### InnoDB
# Si InnoDB n'est pas utilise... le desactiver
# Si InnoDB n'est pas utilisé... le désactiver
#skip-innodb
# En general, il est plus optimum d'avoir un fichier par table
# En général, il est plus optimum d'avoir un fichier par table
innodb_file_per_table
# Taille memoire allouee pour le cache des datas et index
# A ajuster en fonction de sa RAM (si serveur dedie a MySQL, on peut aller jusqu'a 80%)
# Taille mémoire allouée pour le cache des datas et index
# A ajuster en fonction de sa RAM (si serveur dédié à MySQL, on peut aller jusqu'à 70%)
innodb_buffer_pool_size = 512M
# Nombre maximum de threads systeme concurents
# Nombre maximum de threads système concurrents
innodb_thread_concurrency = 16
# Ajuste la valeur des logs InnoDB
# (attention, il faut ensuite stopper MySQL et effacer les fichiers ib_logfile*)
@ -183,7 +185,7 @@ innodb_thread_concurrency = 16
#innodb_log_files_in_group = 2
###### Misc
# charset utf8 par defaut
# Charset utf8 par défaut
character-set-server=utf8
collation-server=utf8_general_ci
# Patch MySQL 5.5.53
@ -212,21 +214,57 @@ Pour activer les connexions réseau à distance, il faut ajouter la configuratio
bind-address = 0.0.0.0
~~~
Pour plus d'informations sur l'optimisation avancée de MySQL, consultez le guide [/HowtoMySQL/Optimize]().
> *Note* : Sous Debian 8, nous mettons notre configuration dans `/etc/mysql/conf.d/evolinux.cnf`
### Configuration de la mémoire (InnoDB)
Selon les ressources de la machine, il faut optimiser davantage les options (par défaut, la configuration est adaptée pour une machine avec très peu de mémoire vive !).
On conseille au minimum d'ajuster *thread_cache_size* et *innodb_buffer_pool_size* :
On conseille au minimum d'ajuster `thread_cache_size` et `innodb_buffer_pool_size` :
~~~{.ini}
[mysqld]
# Nombre de threads CPU alloués pour MySQL
thread_cache_size = 2
# Mémoire allouée pour le cache InnoDB (si serveur dédié, on peut aller jusqu'à 80% de la RAM)
# Mémoire allouée pour le cache InnoDB (si serveur dédié à MySQL, on peut aller jusqu'à 70% de la RAM)
innodb_buffer_pool_size = 2G
~~~
Pour plus d'informations sur l'optimisation avancée de MySQL, consultez le guide [/HowtoMySQL/Optimize]().
**Attention :** MySQL consomme plus de mémoire que ce qui est indiqué dans la variable `innodb_buffer_pool_size`. Celle-ci n'est que la taille totale du tampon mémoire utilisable par les instances des « workers » de InnoDB.
> *Note* : Sous Debian 8, nous mettons notre configuration dans `/etc/mysql/conf.d/evolinux.cnf`
Si MySQL utilise trop de mémoire, le système va swapper, et on peut observer une importante baisse des performances. Pour vérifier que MySQL ne swappe pas, il faut que les valeurs `si` et `so` de la commande suivante soient égales à zéro :
~~~
# vmstat
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
0 0 976884 3301840 200564 1540540 0 0 6 53 0 0 2 1 96 1 0
~~~
Il est possible d'ajuster dynamiquement (= sans redémarrer) la variable `innodb_buffer_pool_size`. Elle doit être un multiple de `innodb_buffer_pool_chunk_size` x `innodb_buffer_pool_instances` (par défaut 128M x 8), en octets (1 Go = 1073741824 octets).
~~~
# Afficher la valeur de innodb_buffer_pool_size :
mysql > SELECT @@innodb_buffer_pool_size;
# Redimensionner dynamiquement innodb_buffer_pool_size :
mysql > SET GLOBAL innodb_buffer_pool_size=...; # en octets
# Afficher l'avancement du redimensionnement dynamique :
mysql > SHOW STATUS WHERE Variable_name='InnoDB_buffer_pool_resize_status';
+----------------------------------+----------------------------------------------------+
| Variable_name | Value |
+----------------------------------+----------------------------------------------------+
| Innodb_buffer_pool_resize_status | Completed resizing buffer pool at ... |
+----------------------------------+----------------------------------------------------+
~~~
Il faut ensuite penser à ajuster aussi la valeur de `innodb_buffer_pool_size` dans `/etc/mysql/mariadb.conf.d/zzz-evolinux-custom.cnf` comme indiqué ci-dessus.
Pour aller plus loin : <https://mariadb.com/kb/en/mariadb-memory-allocation/>
## datadir / tmpdir
@ -252,6 +290,7 @@ Par défaut il utilise `/tmp` mais vu qu'il est parfois nécessaire d'avoir plus
tmpdir = /srv/mysql-tmpdir
~~~
### Liste toutes les permissions utilisateurs
Si vous avez installé le paquet `percona-toolkit` vous pouvez utiliser la commande `pt-show-grants`. De nombreuses options permettent de filtrer la sortie par base, utilisateur, type de permissions…