Optimieren der MySQL-Einstellungen - mysqld geht der Speicher aus

15

Ich bin ein bisschen verwirrt darüber, welche Einstellungen in meiner my.conf-Datei geändert werden müssen, um sie für meinen Server zu optimieren (der MySQL-Server stürzt aufgrund unseres hohen Datenverkehrs immer wieder ab).

Hier ist die my.cnf-Datei:

[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

Und die Serverspezifikationen sind:

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

Ausführen von Ubuntu 12.04 LTS

Hier sind meine Partitionen:

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

Jede Hilfe wäre sehr dankbar.

Wenn ich mir die Fehlerprotokolle ansehe, sehe ich, dass mysqld nicht genügend Speicher hat:

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
quelle

Antworten:

10

Allgemeine Antwort aus dem Serverguide-Wiki :

MySQL Tuner Installieren Sie mysqltuner

MySQL Tuner ist ein nützliches Tool, mit dem Sie eine Verbindung zu einer laufenden MySQL-Instanz herstellen und Vorschläge zur optimalen Konfiguration für Ihre Workload machen können. Je länger der Server läuft, desto besser können die Ratschläge von mysqltuner sein. Warten Sie in einer Produktionsumgebung mindestens 24 Stunden, bevor Sie das Tool ausführen. Sie können mysqltuner von den Ubuntu-Repositories installieren:

sudo apt-get install mysqltuner

Sobald es installiert ist, starte es:

 mysqltuner

und warten Sie auf den Abschlussbericht. Der obere Abschnitt enthält allgemeine Informationen zum Datenbankserver und der untere Abschnitt enthält Optimierungsvorschläge für Ihre my.cnf. Die meisten dieser Änderungen können ohne Neustart live auf dem Server vorgenommen werden. Durchsuchen Sie die offizielle MySQL-Dokumentation (Link im Abschnitt Ressourcen) nach den relevanten Variablen, die sich in der Produktion ändern können. Das Folgende ist Teil eines Beispielberichts aus einer Produktionsdatenbank, aus dem hervorgeht, dass die Vergrößerung des Abfrage-Caches einige Vorteile mit sich bringt:

-------- Empfehlungen ----------------------------------------- ------------
Allgemeine Empfehlungen:
    Führen Sie OPTIMIZE TABLE aus, um Tabellen für eine bessere Leistung zu defragmentieren
    Erhöhen Sie den Wert für table_cache schrittweise, um Beschränkungen für Dateideskriptoren zu vermeiden
Zu ändernde Variablen:
    key_buffer_size (> 1.4G)
    query_cache_size (> 32 Millionen)
    table_cache (> 64)
    innodb_buffer_pool_size (> = 22G)

Ein letzter Kommentar zum Optimieren von Datenbanken: Obwohl wir allgemein sagen können, dass bestimmte Einstellungen die besten sind, kann die Leistung von Anwendung zu Anwendung variieren. Beispielsweise ist das, was für Wordpress am besten funktioniert, möglicherweise nicht das Beste für Drupal, Joomla oder proprietäre Anwendungen. Die Leistung hängt von den Abfragetypen, der Verwendung von Indizes, der Effizienz des Datenbankdesigns usw. ab. Möglicherweise ist es hilfreich, einige Zeit damit zu verbringen, nach Tipps zur Datenbankoptimierung zu suchen, je nachdem, für welche Anwendungen Sie sie verwenden. Sobald Sie einen bestimmten Punkt überschritten haben, führen Anpassungen nur noch zu geringfügigen Verbesserungen. Sie können entweder die Anwendung verbessern oder die Datenbankumgebung durch die Verwendung leistungsfähigerer Hardware oder das Hinzufügen von Slave-Servern erweitern.


  • Sehen Sie sich den Abschnitt mit den Leistungsmetriken im mysqltuner-Bericht an. Halten Sie den maximal möglichen Speicher unter 50%.
  • tmp_table_size, max_heap_table_size variable: halte diese gleich und hoch.
  • join_buffer_sizein kleinen Mengen zu erhöhen; es wird multipliziert mit max_connections.
  • innodb_buffer_pool_size. Mach es hoch.
Rinzwind
quelle
1

Ein weiterer möglicher Fix besteht darin, den folgenden Befehl im Abschnitt [mysqld] Ihrer /etc/mysql/my.cnf-Konfiguration zu verwenden.

performance_schema = off

Quelle: /server/564748/mysql-mariadb-crashes-häufig

Svetoslav Marinov
quelle
0

Auflösung für Docker verfassen

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

Config content ./config/mysql/my.cnf

[mysqld]
performance_schema = off
hubertinio
quelle