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

Beregning af InnoDB-bufferpoolstørrelse til din MySQL-server

Hvad er en InnoDB Buffer Pool?

InnoDB-bufferpuljen er hukommelsespladsen, der rummer mange datastrukturer i hukommelsen af ​​InnoDB, buffere, caches, indekser og endda rækkedata. innodb_buffer_pool_size er MySQL-konfigurationsparameteren, der specificerer mængden af ​​hukommelse, der er allokeret til InnoDB-bufferpuljen af ​​MySQL. Dette er en af ​​de vigtigste indstillinger i MySQL-hosting-konfigurationen og bør konfigureres baseret på den tilgængelige system-RAM.

I dette indlæg vil vi lede dig gennem to tilgange til at indstille din InnoDB bufferpuljestørrelsesværdi, undersøge fordele og ulemper ved disse praksisser og også foreslå en unik metode til at nå frem til en optimal værdi baseret på størrelsen af ​​dit system RAM.

Fremgangsmåde 1. Tommelfingerregelmetode

Den mest almindelige praksis er at indstille denne værdi til 70 % – 80 % af systemets RAM. Selvom det fungerer godt i de fleste tilfælde, er denne metode muligvis ikke optimal i alle konfigurationer. Lad os tage eksemplet med et system med 192 GB RAM. Baseret på ovenstående metode kommer vi frem til omkring 150 GB for bufferpuljens størrelse. Dette er dog ikke rigtig et optimalt tal, da det ikke fuldt ud udnytter den store RAM-størrelse, der er tilgængelig i systemet, og efterlader omkring 40 GB hukommelse. Denne forskel kan være endnu mere markant, efterhånden som vi går over til systemer med større konfigurationer, hvor vi bør udnytte den tilgængelige RAM i højere grad.

Fremgangsmåde 2. En mere nuanceret tilgang

Denne tilgang er baseret på en mere detaljeret forståelse af de interne elementer i InnoDB-bufferpuljen og dens interaktioner, hvilket er meget godt beskrevet i bogen High Performance MySQL.

Lad os se på følgende metode til at beregne InnoDB-bufferpuljens størrelse.

  1. Start med samlet RAM tilgængelig.
  2. Træk et passende beløb fra til OS-behovene.
  3. Træk et passende beløb fra for alle MySQL-behov (såsom forskellige MySQL-buffere, midlertidige tabeller, forbindelsespuljer og replikeringsrelaterede buffere).
  4. Del resultatet med 105 %, som er en tilnærmelse af de overhead, der kræves for at styre selve bufferpuljen.

Lad os for eksempel se på et system med 192 GB RAM, der kun bruger InnoDB og har en samlet logfilstørrelse på omkring 4 GB. Vi kan bruge en regel som 'maksimalt 2GB eller 5% af samlet RAM' til OS behovsallokering som anbefalet i ovenstående bog, som kommer til omkring 9,6GB. Derefter vil vi også tildele omkring 4 GB til andre MySQL-behov, hovedsageligt under hensyntagen til logfilstørrelsen. Denne metode resulterer i omkring 170 GB for vores InnoDB-bufferpuljestørrelse, hvilket er omkring 88,5 % udnyttelse af den tilgængelige RAM-størrelse.

Selvom vi brugte reglen 'maksimalt 2 GB eller 5% af samlet RAM' til at beregne vores hukommelsesallokering til OS-behov ovenfor, fungerer den samme regel ikke særlig godt i alle tilfælde , specifikt til systemer med mellemstore RAM'er mellem 2 GB og 32 GB. For eksempel, i et system med 3 GB RAM efterlader tildeling af 2 GB til OS-behov ikke meget til InnoDB-bufferpuljen, mens tildeling af 5 % af RAM bare er for lidt til vores OS-behov.

Så lad os finjustere ovenstående OS-allokeringsregel og undersøge InnoDB-beregningsmetoden på tværs af forskellige RAM-konfigurationer:

Til systemer med mindre RAM (<=1 GB)

For systemer, der kører med mindre end 1 GB RAM, er det bedre at vælge MySQL standardkonfigurationsværdien på 128 MB for InnoDB bufferpuljestørrelse.

Til systemer med mellemstor RAM (1 GB – 32 GB)

I betragtning af tilfældet med systemer med en RAM-størrelse på 1GB – 32GB, kan vi beregne OS behov ved at bruge denne grove heuristik:

256 MB + 256 * log2(RAM-størrelse i GB)

Rationaliseringen her er, at for lave RAM-konfigurationer starter vi med en basisværdi på 256 MB for OS-behov og øger denne allokering i en logaritmisk skala som mængden af ​​RAM stiger. På denne måde kan vi komme med en deterministisk formel til at allokere RAM til vores OS-behov. Vi vil også allokere den samme mængde hukommelse til vores MySQL andre behov. I et system med 3 GB RAM ville vi f.eks. foretage en rimelig tildeling af 660 MB til OS-behov og yderligere 660 MB til MySQL andre behov, hvilket resulterer i en værdi på omkring 1,6 GB for vores InnoDB-bufferpuljestørrelse.

Til systemer med større RAM (> 32 GB)

For systemer med RAM-størrelser større end 32 GB vil vi vende tilbage til at beregne OS-behov som 5 % af vores system-RAM-størrelse og samme mængde for MySQL andre behov. Så for et system med en RAM-størrelse på 192 GB, vil vores metode lande på omkring 165 GB for InnoDB bufferpuljestørrelse, hvilket igen er en optimal værdi, der skal bruges.

InnoDB Buffer Pool Size Calculator

Beregn den optimale værdi for RAM i enhver størrelse:





InnoDB Buffer Pool Size Calculator - Beregn det optimale tal for enhver system-RAM-størrelse Klik for at tweete

Plot af InnoDB-bufferpoolstørrelse for forskellige RAM-størrelser

Word of advarsel for InnoDB Buffer Pool Størrelsesberegninger

Overvejelserne i dette blogindlæg er for Linux-systemer, der er dedikeret til MySQL. For Windows-systemer eller systemer, der kører flere applikationer sammen med MySQL, kan disse observationer være unøjagtige. Det er også vigtigt at bemærke, at selvom vi kan bruge disse værktøjer som referencer, kræver det virkelig god erfaring, eksperimentering, kontinuerlig overvågning og finjustering for at få den rigtige størrelse til din innodb_buffer_pool_size.


  1. Læs uforpligtet isolationsniveau

  2. oracle diff:hvordan man sammenligner to tabeller?

  3. SQL-forespørgsel for at slette tabel i MySQL

  4. Returner kun de numeriske værdier fra en PostgreSQL-databasekolonne