L'utilizzo massimo della memoria di MySQL dipende molto dall'hardware, dalle tue impostazioni e il database stesso.
Hardware
L'hardware è la parte ovvia. Maggiore è la quantità di RAM, migliori saranno i dischi ftw, più veloci . Non credere a quelle lettere di notizie mensili o settimanali però. MySQL non scala in modo lineare, nemmeno su hardware Oracle. È un po' più complicato di così.
La conclusione è:non esiste una regola generale per ciò che è consigliato per il tuo Configurazione MySQL. Tutto dipende dall'utilizzo attuale o dalle proiezioni.
Impostazioni e database
MySQL offre innumerevoli variabili e switch per ottimizzarne il comportamento. Se riscontri problemi, devi davvero sederti e leggere il manuale (f'ing).
Per quanto riguarda il database, alcuni importanti vincoli:
- Motore di tabelle (
InnoDB
,MyISAM
, ...) - dimensione
- indici
- utilizzo
La maggior parte dei suggerimenti MySQL su StackOverflow ti parlerà di 5-8 cosiddette impostazioni importanti. Prima di tutto, non tutti contano, ad es. allocare molte risorse a InnoDB e non utilizzare InnoDB non ha molto senso perché quelle risorse vengono sprecate.
Oppure - molte persone suggeriscono di aumentare il max_connection
variabile -- beh, non sanno che implica anche che MySQL allocherà più risorse per soddisfare quelle max_connections
-- se mai necessario. La soluzione più ovvia potrebbe essere chiudere la connessione al database nel tuo DBAL o abbassare il wait_timeout
per liberare quei thread.
Se capisci dove sto, c'è davvero molto, molto su cui leggere e imparare.
Motori
I table engine sono una decisione piuttosto importante, molte persone se ne dimenticano all'inizio e poi si ritrovano improvvisamente a combattere con un MyISAM
da 30 GB tabella che blocca e blocca la loro intera applicazione.
Non intendo dire MyISAM fa schifo , ma InnoDB
può essere modificato per rispondere quasi o quasi alla stessa velocità di MyISAM
e offre cose come il blocco delle righe su UPDATE
mentre MyISAM
blocca l'intera tabella quando viene scritta.
Se sei libero di eseguire MySQL sulla tua infrastruttura, potresti anche voler controllare il server percona
perché includendo molti contributi di aziende come Facebook e Google (lo sanno subito), include anche il sostituto drop-in di Percona per InnoDB
, chiamato XtraDB
.
Vedi il mio succo per la configurazione di percona-server (e -client) (su Ubuntu):http://gist.github .com/637669
Taglia
La dimensione del database è molto, molto importante:che ci crediate o no, la maggior parte delle persone su Intarwebs non ha mai gestito una configurazione MySQL ampia e intensa, ma esistono davvero. Alcune persone trolleranno e diranno qualcosa come "Usa PostgreSQL!!! 111", ma per ora ignoriamole.
La linea di fondo è:a giudicare dalle dimensioni, è necessario prendere una decisione sull'hardware. Non puoi davvero far funzionare velocemente un database da 80 GB con 1 GB di RAM.
Indici
Non lo è:più siamo, meglio è. Devono essere impostati solo gli indici necessari e l'utilizzo deve essere verificato con EXPLAIN
. Aggiungi a questo EXPLAIN
di MySQL è davvero limitato, ma è un inizio.
Configurazioni suggerite
A proposito di questi my-large.cnf
e my-medium.cnf
file -- non so nemmeno per chi sono stati scritti. Arrotolalo da solo.
Inizio per l'ottimizzazione
Un ottimo inizio è il tuning primer
. È uno script bash (suggerimento:avrai bisogno di linux) che prende l'output di SHOW VARIABLES
e SHOW STATUS
e lo avvolge in una raccomandazione si spera utile. Se il tuo server ha funzionato per un po' di tempo, la raccomandazione sarà migliore poiché ci saranno dati su cui basarli.
Tuttavia, il primer per l'accordatura non è una salsa magica. Dovresti comunque leggere tutte le variabili che suggerisce di modificare.
Lettura
Mi piace davvero consigliare il mysqlperformanceblog . È un'ottima risorsa per tutti i tipi di suggerimenti relativi a MySQL. E non si tratta solo di MySQL, sanno anche molto sull'hardware giusto o consigliano configurazioni per AWS, ecc. Questi ragazzi hanno anni e anni di esperienza.
Un'altra grande risorsa è planet-mysql , ovviamente.