sql >> Database teknologi >  >> RDS >> Mysql

MySQL maksimalt hukommelsesforbrug

MySQL's maksimale hukommelsesforbrug afhænger meget af hardware, dine indstillinger og selve databasen.

Hardware

Hardwaren er den åbenlyse del. Jo mere RAM jo bedre, hurtigere diske ftw . Tro dog ikke på de månedlige eller ugentlige nyhedsbreve. MySQL skalerer ikke lineært - ikke engang på Oracle-hardware. Det er lidt vanskeligere end det.

Den nederste linje er:Der er ingen generel tommelfingerregel for, hvad der anbefales til din MySQL opsætning. Det hele afhænger af den aktuelle brug eller projektionerne.

Indstillinger og database

MySQL tilbyder utallige variabler og switches for at optimere dens adfærd. Hvis du løber ind i problemer, skal du virkelig sætte dig ned og læse (f'ing) manualen.

Hvad angår databasen -- et par vigtige begrænsninger:

  • tabelmotor (InnoDB , MyISAM , ...)
  • størrelse
  • indekser
  • brug

De fleste MySQL-tip om stackoverflow vil fortælle dig om 5-8 såkaldte vigtige indstillinger. For det første er det ikke alle, der betyder noget - f.eks. at allokere mange ressourcer til InnoDB og ikke bruge InnoDB giver ikke megen mening, fordi disse ressourcer er spildt.

Eller - mange mennesker foreslår at øge max_connection variabel -- godt, lidt ved de, det betyder også, at MySQL vil allokere flere ressourcer for at imødekomme disse max_connections - hvis det nogensinde er nødvendigt. Den mere oplagte løsning kan være at lukke databaseforbindelsen i din DBAL eller at sænke wait_timeout for at frigøre disse tråde.

Hvis du fanger min drift -- der er virkelig meget, meget at læse op på og lære.

Motorer

Bordmotorer er en ret vigtig beslutning, mange mennesker glemmer dem tidligt og pludselig kæmper med en MyISAM på 30 GB størrelse. tabel, som låser og blokerer hele deres applikation.

Jeg mener ikke at sige MyISAM stinker , men InnoDB kan justeres til at reagere næsten eller næsten lige så hurtigt som MyISAM og tilbyder sådan noget som rækkelåsning på UPDATE mens MyISAM låser hele tabellen, når den skrives til.

Hvis du er fri til at køre MySQL på din egen infrastruktur, kan du måske også tjekke percona-server fordi blandt at inkludere en masse bidrag fra virksomheder som Facebook og Google (de ved det hurtigt), inkluderer det også Perconas egen drop-in erstatning for InnoDB , kaldet XtraDB .

Se mit indhold for opsætning af percona-server (og -klient) (på Ubuntu):http://gist.github .com/637669

Størrelse

Databasestørrelsen er meget, meget vigtig -- tro det eller ej, de fleste mennesker på Intarwebs har aldrig håndteret en stor og skriver intens MySQL-opsætning, men de eksisterer virkelig. Nogle mennesker vil trolde og sige noget som "Brug PostgreSQL!!!111", men lad os ignorere dem for nu.

Den nederste linje er:at dømme ud fra størrelsen, skal der træffes beslutning om hardwaren. Du kan ikke rigtig få en 80 GB database til at køre hurtigt på 1 GB RAM.

Indeks

Det er det ikke:jo flere, jo bedre. Kun nødvendige indekser skal indstilles, og brugen skal kontrolleres med EXPLAIN . Tilføj dertil MySQL's EXPLAIN er virkelig begrænset, men det er en begyndelse.

Foreslåede konfigurationer

Om disse my-large.cnf og my-medium.cnf filer -- jeg ved ikke engang, hvem de er skrevet til. Rul din egen.

Tuning primer

En god start er tuning-primeren . Det er et bash-script (tip:du skal bruge linux), som tager outputtet fra SHOW VARIABLES og SHOW STATUS og pakker det ind i en forhåbentlig nyttig anbefaling. Hvis din server har kørt noget tid, vil anbefalingen være bedre, da der vil være data at basere dem på.

Tuning primeren er dog ikke en magisk sauce. Du bør stadig læse op på alle de variabler, det foreslår at ændre.

Læser

Jeg kan virkelig godt lide at anbefale mysqlperformanceblog . Det er en fantastisk ressource til alle slags MySQL-relaterede tips. Og det er ikke kun MySQL, de ved også meget om den rigtige hardware eller anbefaler opsætninger til AWS osv.. Disse fyre har mange års erfaring.

En anden stor ressource er planet-mysql selvfølgelig.



  1. MySQL FULDSTÆNDIG JOIN?

  2. OPENJSON "Forkert syntaks nær søgeordet 'med'." i SQL Server (LØST)

  3. Hvorfor er det mere sikkert at bruge en mysql-forberedt sætning end at bruge de almindelige escape-funktioner?

  4. Ret "FEJL 1136 (21S01):Kolonneantal stemmer ikke overens med værdiantallet i række 2", når du bruger VALUES Statement i MySQL