Come posso ottimizzare l'utilizzo della memoria di MySQL?


9

MY SETUP ( esempio )

Sto eseguendo Linux su un'istanza EC2 extra large di Amazon High CPU con le seguenti specifiche:

  • 7 GB di memoria
  • 20 unità di calcolo EC2 (8 core virtuali con 2,5 unità di calcolo EC2 ciascuna)
  • 1690 GB di memoria di istanza locale
  • Piattaforma a 64 bit

Ho due grandi database MySQL in esecuzione sul motore di archiviazione MyISAM. Uno è 2 GB e l'altro è 500 MB. Mi piacerebbe assicurarmi che MySQL stia utilizzando tutta la RAM possibile / necessaria per massimizzare la velocità delle query. So che ci sono un sacco di opzioni di configurazione della memoria di MySQL come key_buffer_sizee MyISAM_sort_buffer_size,ma non ho familiarità con l'ottimizzazione di queste.

DOMANDE

  1. Come si controlla quale memoria MySQL sta attualmente utilizzando su un sistema Linux?
  2. Come massimizzare / ottimizzare l'utilizzo della memoria MySQL?
  3. Supponendo che le mie query e il mio schema siano ottimizzati, quali altri cambiamenti dovrei considerare?

è possibile verificare con il programma htop.
neworld,

Massimizzare l'utilizzo della memoria non sarà l'intero database in memoria. Devi avere un filesystem basato su RAM ...

4
Il filesystem basato su RAM non è sicuro. Se il server si
arresta in modo

Risposte:


7

Questo è un argomento difficile Non è possibile rispondere qui, interi libri sono stati scritti su questo. Consiglio di aumentare la dimensione del tuo innodb_buffer_pool_size. Se stai usando le tabelle myisam, controlla key_buffer_size. Anche table_cache e max_connections dovrebbero essere considerati.

Ecco qualcosa che può aiutarti:

http://www.mysqlperformanceblog.com/2006/09/29/what-to-tune-in-mysql-server-after-installation/ http://www.mysqlperformanceblog.com/2007/11/01/innodb- performance-optimisation-basics / http://www.mysqlperformanceblog.com/2007/11/03/choosing-innodb_buffer_pool_size/

MODIFICARE:

Come ha detto @ drew010, è importante considerare il tipo di utilizzo del DB. L'accordatura per un DB con lettura pesante è molto diversa da una scrittura pesante. Inoltre, puoi prendere in considerazione altre strategie. Come Memcached, database nosql, ecc.


2
D'accordo, sono piuttosto piccoli database relativamente parlando. Se ti aspetti un sacco di accesso in lettura al database, puoi prendere in considerazione una sorta di sistema di memorizzazione nella cache come memcached che l'applicazione può utilizzare per archiviare i valori dal database per ridurre gli hit nel database. Se stai eseguendo principalmente inserti, il disco sarà un fattore molto importante. In una certa misura la domanda dipende da quali siano i casi d'uso. Se i dati non cambiano molto, allora la cache delle query mysql dovrebbe aiutare molto con query più veloci. Assicurati anche che i tuoi indici / chiavi primarie siano buoni.
drew010,

+1 hai ragione fratello. Supponevo che stesse chiedendo un tuning di base, ma è importante considerare l'uso del DB e altre cose. Ancora una volta, non posso essere discusso qui, penso.
santiago.basulto,

1

Se devi essere sicuro che MySQL utilizzi tutta la memoria di cui ha bisogno, devi passare a InnoDB. A meno che tu non usi le FULLTEXTcapacità di ricerca di MySQL , non ci saranno problemi seri.

Nel caso di MyISAM vengono utilizzate diverse cache, tra cui buffer di chiavi MySQL interno e cache di sistema. Se vuoi le migliori prestazioni devi lasciare spazio a una delle cache, ma non consiglio ancora MyISAM a tale scopo, specialmente se i tuoi database sono pesanti in scrittura: MyISAM blocca l'intera tabella in scrittura, mentre InnoDB blocca solo le righe interessate.

Anche se metti tutti i tuoi database in memoria, puoi comunque avere query a esecuzione lenta a causa di indici insufficienti o altri motivi.

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.