Optymalizacja ustawień MySQL - kończy się brak pamięci w mysqld

15

Jestem trochę zdezorientowany co do ustawień, które należy zmienić w pliku my.conf, aby zoptymalizować pod kątem mojego serwera (serwer mysql ulega awarii z powodu dużego ruchu).

Oto plik 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

A specyfikacje serwera to:

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

Uruchamianie Ubuntu 12.04 LTS

Oto moje partycje:

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

Każda pomoc będzie mile widziana.

Patrząc na dzienniki błędów, widzę, że mysqld zabrakło pamięci:

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
źródło

Odpowiedzi:

10

Ogólna odpowiedź z wiki przewodnika serwera :

Tuner MySQL Zainstaluj mysqltuner

MySQL Tuner to przydatne narzędzie, które połączy się z działającą instancją MySQL i zaoferuje sugestie, w jaki sposób można go najlepiej skonfigurować pod kątem obciążenia. Im dłużej serwer działa, tym lepsza porada może zapewnić mysqltuner. W środowisku produkcyjnym należy rozważyć odczekanie co najmniej 24 godzin przed uruchomieniem narzędzia. Możesz pobrać mysqltuner z repozytoriów Ubuntu:

sudo apt-get install mysqltuner

Następnie po zainstalowaniu uruchom go:

 mysqltuner

i czekam na raport końcowy. Górna sekcja zawiera ogólne informacje o serwerze bazy danych, a dolna sekcja zawiera sugestie dostrajania, które należy zmienić w pliku my.cnf. Większość z nich można zmienić na żywo na serwerze bez ponownego uruchamiania, przejrzyj oficjalną dokumentację MySQL (link w sekcji Zasoby), aby znaleźć odpowiednie zmienne do zmiany w produkcji. Poniżej znajduje się część przykładowego raportu z produkcyjnej bazy danych, który pokazuje, że zwiększenie pamięci podręcznej zapytań może przynieść pewne korzyści:

-------- Zalecenia ----------------------------------------- ------------
Ogólne zalecenia:
    Uruchom OPTIMIZE TABLE, aby defragmentować tabele w celu uzyskania lepszej wydajności
    Zwiększaj stopniowo table_cache, aby uniknąć limitów deskryptorów plików
Zmienne do dostosowania:
    key_buffer_size (> 1.4G)
    query_cache_size (> 32M)
    table_cache (> 64)
    innodb_buffer_pool_size (> = 22G)

Ostatni komentarz na temat dostrajania baz danych: Chociaż ogólnie możemy powiedzieć, że niektóre ustawienia są najlepsze, wydajność może się różnić w zależności od aplikacji. Na przykład to, co działa najlepiej dla Wordpress, może nie być najlepsze dla aplikacji Drupal, Joomla lub zastrzeżonych. Wydajność zależy od rodzajów zapytań, użycia indeksów, wydajności projektu bazy danych i tak dalej. Przydatne może być poświęcenie czasu na wyszukiwanie wskazówek dostrajania baz danych na podstawie aplikacji, z których korzystasz. Po przekroczeniu pewnego punktu wszelkie wprowadzone zmiany spowodują jedynie niewielkie ulepszenia, a lepiej będzie ulepszyć aplikację lub spojrzeć na skalowanie środowiska bazy danych za pomocą mocniejszego sprzętu lub dodając serwery podrzędne.


  • Obejrzyj sekcję metryki wydajności raportu mysqltuner. Zachowaj maksymalną możliwą pamięć poniżej 50%.
  • tmp_table_size, max_heap_table_size variable: utrzymuj je równe i wysokie.
  • join_buffer_size, wzrost w małych ilościach; zostanie pomnożony przez max_connections.
  • innodb_buffer_pool_size. Zrób to wysoko.
Rinzwind
źródło
0

Rozdzielczość komponowania dokera

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

Skonfiguruj zawartość ./config/mysql/my.cnf

[mysqld]
performance_schema = off
hubertinio
źródło