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. 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 ### MySQL 5.7
<https://dev.mysql.com/doc/mysql-apt-repo-quick-guide/> <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 > *Note* : il faudra alors installer *mytop* en récupérant le package de Debian 8
## Configuration ## 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/`. 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] [mysqld]
###### Connexions ###### 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 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 back_log = 100
# Maximum d'erreurs avant de blacklister un hote # Maximum d'erreurs avant de blacklister un hote
max_connect_errors = 10 max_connect_errors = 10
@ -141,12 +143,12 @@ slow_query_log_file = /var/log/mysql/mysql-slow.log
long_query_time = 10 long_query_time = 10
###### Tailles ###### Tailles
# Taille reservee au buffer des index MyIsam # Taille réservée au buffer des index MyIsam
# A ajuster selon les resultatsutilisateurs # A ajuster selon les résultats utilisateurs
key_buffer_size = 512M key_buffer_size = 512M
# Taille max des paquets envoyés/reçus … provoque un "Packet too large" # Taille max des paquets envoyés/reçus … provoque un "Packet too large"
max_allowed_packet = 64M 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 thread_stack = 192K
# A mettre le nombre de threads CPU alloues pour MySQL # A mettre le nombre de threads CPU alloues pour MySQL
thread_cache_size = 1 thread_cache_size = 1
@ -154,28 +156,28 @@ thread_cache_size = 1
max_heap_table_size = 64M max_heap_table_size = 64M
###### Cache ###### 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_open_cache = 4096
table_definition_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 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 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 query_cache_type = 1
# Cache tables # Cache tables
max_heap_table_size = 128M max_heap_table_size = 128M
tmp_table_size = 128M tmp_table_size = 128M
###### InnoDB ###### InnoDB
# Si InnoDB n'est pas utilise... le desactiver # Si InnoDB n'est pas utilisé... le désactiver
#skip-innodb #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 innodb_file_per_table
# Taille memoire allouee pour le cache des datas et index # Taille mémoire allouée 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%) # A ajuster en fonction de sa RAM (si serveur dédié à MySQL, on peut aller jusqu'à 70%)
innodb_buffer_pool_size = 512M innodb_buffer_pool_size = 512M
# Nombre maximum de threads systeme concurents # Nombre maximum de threads système concurrents
innodb_thread_concurrency = 16 innodb_thread_concurrency = 16
# Ajuste la valeur des logs InnoDB # Ajuste la valeur des logs InnoDB
# (attention, il faut ensuite stopper MySQL et effacer les fichiers ib_logfile*) # (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 #innodb_log_files_in_group = 2
###### Misc ###### Misc
# charset utf8 par defaut # Charset utf8 par défaut
character-set-server=utf8 character-set-server=utf8
collation-server=utf8_general_ci collation-server=utf8_general_ci
# Patch MySQL 5.5.53 # 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 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 !). 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} ~~~{.ini}
[mysqld] [mysqld]
# Nombre de threads CPU alloués pour MySQL # Nombre de threads CPU alloués pour MySQL
thread_cache_size = 2 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 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 ## 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 tmpdir = /srv/mysql-tmpdir
~~~ ~~~
### Liste toutes les permissions utilisateurs ### 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… 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…