sql >> Databasteknik >  >> RDS >> Mysql

MySQL maximal minnesanvändning

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.



  1. 1052:Kolumn 'id' i fältlistan är tvetydig

  2. Hur använder jag lösenordshashning med PDO för att göra min kod säkrare?

  3. SQL WHERE.. IN sats flera kolumner

  4. Inte en giltig månad när du infogar data i Oracle