Ottimizzazione delle impostazioni di MySQL - mysqld esaurisce la memoria


15

Sono un po 'confuso su quali impostazioni modificare nel mio file my.conf per ottimizzare per il mio server (il server mysql continua a bloccarsi a causa del nostro traffico elevato).

Ecco il file 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

E le specifiche del server sono:

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

Esecuzione di Ubuntu 12.04 LTS

Ecco le mie partizioni:

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

Qualsiasi aiuto sarebbe molto apprezzato.

Guardando i log degli errori, posso vedere che mysqld era esaurito:

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

Risposte:


10

Risposta generale dal wiki della guida del server :

Sintonizzatore MySQL Installa mysqltuner

MySQL Tuner è uno strumento utile che si collegherà a un'istanza MySQL in esecuzione e offrirà suggerimenti su come configurarlo al meglio per il tuo carico di lavoro. Più a lungo il server è in esecuzione, migliore è il consiglio che mysqltuner può fornire. In un ambiente di produzione, considerare di attendere almeno 24 ore prima di eseguire lo strumento. Puoi ottenere mysqltuner di installazione dai repository di Ubuntu:

sudo apt-get install mysqltuner

Quindi, una volta installato, eseguilo:

 mysqltuner

e attendo il suo rapporto finale. La sezione superiore fornisce informazioni generali sul server di database e la sezione inferiore fornisce suggerimenti di ottimizzazione da modificare in my.cnf. La maggior parte di questi può essere modificata dal vivo sul server senza riavviare, consultare la documentazione ufficiale di MySQL (collegamento nella sezione Risorse) per le variabili rilevanti da modificare in produzione. Di seguito è parte di un report di esempio da un database di produzione che mostra che potrebbe esserci qualche beneficio dall'aumentare la quantità di cache delle query:

-------- Consigli ----------------------------------------- ------------
Raccomandazioni generali:
    Esegui OPTIMIZE TABLE per deframmentare le tabelle per prestazioni migliori
    Aumentare gradualmente table_cache per evitare i limiti del descrittore di file
Variabili da regolare:
    key_buffer_size (> 1.4G)
    query_cache_size (> 32M)
    table_cache (> 64)
    innodb_buffer_pool_size (> = 22G)

Un ultimo commento sull'ottimizzazione dei database: anche se possiamo affermare in generale che alcune impostazioni sono le migliori, le prestazioni possono variare da un'applicazione all'altra. Ad esempio, ciò che funziona meglio per Wordpress potrebbe non essere il migliore per Drupal, Joomla o applicazioni proprietarie. Le prestazioni dipendono dal tipo di query, dall'uso degli indici, dall'efficienza della progettazione del database e così via. Potresti trovare utile dedicare del tempo alla ricerca di suggerimenti per l'ottimizzazione del database in base alle applicazioni per cui lo stai utilizzando. Una volta superato un certo punto, eventuali modifiche apportate comporteranno solo lievi miglioramenti e migliorerai sia il miglioramento dell'applicazione, sia il ridimensionamento dell'ambiente del database tramite l'utilizzo di hardware più potente o l'aggiunta di server slave.


  • Guarda la sezione delle metriche delle prestazioni del rapporto mysqltuner. Mantenere la memoria massima possibile inferiore al 50%.
  • tmp_table_size, max_heap_table_size variable: mantenerli uguali e alti.
  • join_buffer_size, aumento di piccole quantità; sarà moltiplicato per max_connections.
  • innodb_buffer_pool_size. Fallo alto.


0

Risoluzione per la composizione docker

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

Contenuto della configurazione ./config/mysql/my.cnf

[mysqld]
performance_schema = off
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.