Optimisation des paramètres MySQL - mysqld manque de mémoire

15

Je suis un peu confus quant aux paramètres à modifier dans mon fichier my.conf à optimiser pour mon serveur (le serveur mysql continue de planter en raison de notre trafic élevé).

Voici le fichier my.cnf:

[mysqld]

user            = mysql
pid-file        = /var/run/mysqld/mysqld.pid
socket          = /var/run/mysqld/mysqld.sock
port            = 3306
basedir         = /usr
datadir         = /var/lib/mysql
tmpdir          = /tmp
lc-messages-dir = /usr/share/mysql
skip-external-locking

key_buffer              = 16M
max_allowed_packet      = 16M
myisam-recover         = BACKUP
#max_connections        = 100
#table_cache            = 64
#thread_concurrency     = 10

query_cache_limit       = 1M
query_cache_size        = 16M

Et les spécifications du serveur sont:

CPU Cores   2 cores
RAM (Memory)    1GB
SSD (Disk Space)    20GB

Exécuter Ubuntu 12.04 LTS

Voici mes partitions:

NAME   FSTYPE   SIZE MOUNTPOINT LABEL
vda              20G            
├─vda1 ext4     476M /boot      
├─vda2 swap     477M [SWAP]     
└─vda3 ext4    19.1G / 

Toute aide serait très appréciée.

En regardant les journaux d'erreurs, je peux voir que mysqld était à court de mémoire:

Feb 17 11:02:06 111488 kernel: [8276839.559141] Out of memory: Kill process 20719 (mysqld) score 75 or sacrifice child
Feb 17 11:02:06 111488 kernel: [8276839.559209] Killed process 20719 (mysqld) total-vm:1347424kB, anon-rss:30524kB, file-rss:0kB
babbaggeii
la source

Réponses:

10

Réponse générale du wiki serverguide :

Tuner MySQL Installez mysqltuner

MySQL Tuner est un outil utile qui se connecte à une instance MySQL en cours d'exécution et propose des suggestions sur la meilleure façon de le configurer pour votre charge de travail. Plus le serveur fonctionne depuis longtemps, meilleurs sont les conseils que mysqltuner peut fournir. Dans un environnement de production, pensez à attendre au moins 24 heures avant d'exécuter l'outil. Vous pouvez obtenir installer mysqltuner à partir des référentiels Ubuntu:

sudo apt-get install mysqltuner

Puis une fois installé, lancez-le:

 mysqltuner

et attendre son rapport final. La section supérieure fournit des informations générales sur le serveur de base de données et la section inférieure fournit des suggestions de réglage à modifier dans votre my.cnf. La plupart d'entre elles peuvent être modifiées en direct sur le serveur sans redémarrer, consultez la documentation officielle de MySQL (lien dans la section Ressources) pour les variables pertinentes à changer en production. Ce qui suit fait partie d'un exemple de rapport d'une base de données de production qui montre qu'il peut être avantageux d'augmenter la quantité de cache de requêtes:

-------- Recommandations ----------------------------------------- ------------
Recommandations générales:
    Exécutez OPTIMIZE TABLE pour défragmenter les tables pour de meilleures performances
    Augmentez progressivement table_cache pour éviter les limites des descripteurs de fichiers
Variables à ajuster:
    key_buffer_size (> 1.4G)
    query_cache_size (> 32M)
    table_cache (> 64)
    innodb_buffer_pool_size (> = 22G)

Un dernier commentaire sur l'optimisation des bases de données: alors que nous pouvons généralement dire que certains paramètres sont les meilleurs, les performances peuvent varier d'une application à l'autre. Par exemple, ce qui fonctionne le mieux pour Wordpress n'est peut-être pas le meilleur pour Drupal, Joomla ou les applications propriétaires. Les performances dépendent des types de requêtes, de l'utilisation des index, de l'efficacité de la conception de la base de données, etc. Il peut être utile de passer du temps à rechercher des conseils de réglage de base de données en fonction des applications pour lesquelles vous l'utilisez. Une fois que vous avez dépassé un certain point, les ajustements que vous apportez n'entraîneront que des améliorations mineures, et vous ferez mieux d'améliorer l'application ou d'étendre votre environnement de base de données en utilisant un matériel plus puissant ou en ajoutant des serveurs esclaves.


  • Regardez la section des mesures de performances du rapport mysqltuner. Gardez la mémoire maximale possible sous 50%.
  • tmp_table_size, max_heap_table_size variable: gardez-les égaux et élevés.
  • join_buffer_size, augmenter en petites quantités; il sera multiplié par max_connections.
  • innodb_buffer_pool_size. Faites-le haut.
Rinzwind
la source
1

un autre correctif possible consiste à utiliser ce qui suit dans la section [mysqld] de votre configuration /etc/mysql/my.cnf.

performance_schema = off

Source: /server/564748/mysql-mariadb-crashes-frequently

Svetoslav Marinov
la source
0

Résolution pour docker composer

mysql:
    volumes:
        - ./config/mysql/my.cnf:/etc/mysql/conf.d/my.cnf

Contenu de la configuration ./config/mysql/my.cnf

[mysqld]
performance_schema = off
hubertinio
la source