MySQL:s maximala minnesanvändning beror mycket på hårdvara, dina inställningar och själva databasen.
Hårdvara
Hårdvaran är den självklara delen. Ju mer RAM desto roligare, snabbare diskar ftw . Tro dock inte på dessa månatliga eller veckovisa nyhetsbrev. MySQL skalas inte linjärt - inte ens på Oracle-hårdvara. Det är lite knepigare än så.
Summan av kardemumman är:det finns ingen generell tumregel för vad som rekommenderas för din MySQL-inställning. Allt beror på den aktuella användningen eller projektionerna.
Inställningar och databas
MySQL erbjuder otaliga variabler och switchar för att optimera dess beteende. Om du stöter på problem måste du verkligen sätta dig ner och läsa (f'ing) manualen.
När det gäller databasen -- några viktiga begränsningar:
- tabellmotor (
InnoDB
,MyISAM
, ...) - storlek
- index
- användning
De flesta MySQL-tips om stackoverflow kommer att berätta om 5-8 så kallade viktiga inställningar. För det första spelar inte alla roll - t.ex. att allokera mycket resurser till InnoDB och inte använda InnoDB är inte så vettigt eftersom dessa resurser är bortkastade.
Eller - många föreslår att max_connection
utökas variabel -- ja, lite vet de, det innebär också att MySQL kommer att allokera mer resurser för att tillgodose dessa max_connections
- om det någonsin behövs. Den mer uppenbara lösningen kan vara att stänga databasanslutningen i din DBAL eller att sänka wait_timeout
för att frigöra dessa trådar.
Om du fångar min drift -- det finns verkligen mycket, mycket att läsa på och lära sig.
Motorer
Bordsmotorer är ett ganska viktigt beslut, många glömmer dem tidigt och finner sig plötsligt slåss med en MyISAM
i storleken 30 GB. tabell som låser och blockerar hela applikationen.
Jag menar inte att säga MyISAM suger , men InnoDB
kan justeras för att svara nästan eller nästan lika snabbt som MyISAM
och erbjuder sådant som radlåsning på UPDATE
medan MyISAM
låser hela tabellen när den skrivs till.
Om du är fri att köra MySQL på din egen infrastruktur, kanske du också vill kolla in percona-server
eftersom det bland annat inkluderar många bidrag från företag som Facebook och Google (de vet snabbt), inkluderar även Perconas egen drop-in ersättare för InnoDB
, kallad XtraDB
.
Se min kärna för percona-server (och -klient) installation (på Ubuntu):http://gist.github .com/637669
Storlek
Databasstorleken är väldigt, väldigt viktig -- tro det eller ej, de flesta människor på Intarwebs har aldrig hanterat en stor och skriver intensiv MySQL-installation men de finns verkligen. Vissa människor kommer att trolla och säga något i stil med "Använd PostgreSQL!!!111", men låt oss ignorera dem tills vidare.
Summan av kardemumman är:att döma av storleken, beslut om hårdvara ska fattas. Du kan inte riktigt få en 80 GB databas att köras snabbt på 1 GB RAM.
Indeks
Det är det inte:ju fler, desto roligare. Endast nödvändiga index ska ställas in och användningen måste kontrolleras med EXPLAIN
. Lägg till att MySQL:s EXPLAIN
är verkligen begränsad, men det är en början.
Föreslagna konfigurationer
Om dessa my-large.cnf
och my-medium.cnf
filer -- jag vet inte ens vem de skrevs för. Rulla din egen.
Tuning primer
En bra början är tuning primer
. Det är ett bash-skript (tips:du behöver linux) som tar utdata från SHOW VARIABLES
och SHOW STATUS
och lindar in det i förhoppningsvis användbar rekommendation. Om din server har kört en tid kommer rekommendationen att vara bättre eftersom det kommer att finnas data att basera dem på.
Stämningsprimern är dock ingen magisk sås. Du bör fortfarande läsa på om alla variabler som föreslås ändras.
Läser
Jag gillar verkligen att rekommendera mysqlperformancebloggen . Det är en fantastisk resurs för alla typer av MySQL-relaterade tips. Och det är inte bara MySQL, de vet också mycket om rätt hårdvara eller rekommenderar inställningar för AWS, etc.. Dessa killar har många års erfarenhet.
En annan bra resurs är planet-mysql , naturligtvis.