Wat is een InnoDB-bufferpool?
InnoDB-bufferpool is de geheugenruimte die veel in-memory datastructuren van InnoDB, buffers, caches, indexen en zelfs rijgegevens bevat. innodb_buffer_pool_size is de MySQL-configuratieparameter die de hoeveelheid geheugen specificeert die door MySQL aan de InnoDB-bufferpool wordt toegewezen. Dit is een van de belangrijkste instellingen in de MySQL-hostingconfiguratie en moet worden geconfigureerd op basis van het beschikbare systeem-RAM.
In dit bericht zullen we je door twee benaderingen leiden om de waarde van je InnoDB-bufferpoolgrootte in te stellen, de voor- en nadelen van die praktijken te onderzoeken en ook een unieke methode voor te stellen om kom tot een optimale waarde op basis van de grootte van uw systeem-RAM.
Benadering 1. Vuistregelmethode
De meest gevolgde praktijk is om deze waarde in te stellen op 70% – 80% van het systeem-RAM. Hoewel het in de meeste gevallen goed werkt, is deze methode mogelijk niet in alle configuraties optimaal. Laten we het voorbeeld nemen van een systeem met 192 GB RAM. Op basis van de bovenstaande methode komen we uit op ongeveer 150 GB voor de grootte van de bufferpool. Dit is echter niet echt een optimaal aantal omdat het niet volledig gebruik maakt van de grote RAM-grootte die beschikbaar is in het systeem en ongeveer 40 GB geheugen achterlaat. Dit verschil kan nog groter zijn naarmate we overstappen op systemen met grotere configuraties waar we het beschikbare RAM-geheugen in grotere mate zouden moeten gebruiken.
Aanpak 2. Een meer genuanceerde aanpak
Deze benadering is gebaseerd op een meer gedetailleerd begrip van de interne onderdelen van de InnoDB-bufferpool en zijn interacties, die zeer goed worden beschreven in het boek High Performance MySQL.
Laten we eens kijken naar de volgende methode om de grootte van de InnoDB-bufferpool te berekenen.
- Begin met het totale beschikbare RAM-geheugen.
- Trek een geschikt bedrag af voor de behoeften van het besturingssysteem.
- Trek een geschikt bedrag af voor alle MySQL-behoeften (zoals verschillende MySQL-buffers, tijdelijke tabellen, verbindingspools en replicatiegerelateerde buffers).
- Deel het resultaat door 105%, wat een benadering is van de overhead die nodig is om de bufferpool zelf te beheren.
Laten we bijvoorbeeld eens kijken naar een systeem met 192 GB RAM met alleen InnoDB en een totale logbestandgrootte van ongeveer 4 GB. We kunnen een regel gebruiken zoals 'maximaal 2 GB of 5% van het totale RAM-geheugen' voor de toewijzing van OS-behoeften, zoals aanbevolen in het bovenstaande boek, wat neerkomt op ongeveer 9,6 GB. Vervolgens zullen we ook ongeveer 4 GB toewijzen voor andere MySQL-behoeften, waarbij we voornamelijk rekening houden met de grootte van het logbestand. Deze methode resulteert in ongeveer 170 GB voor onze InnoDB-bufferpoolgrootte, wat ongeveer 88,5% is van het beschikbare RAM-geheugen.
Hoewel we de regel 'maximaal 2 GB of 5% van het totale RAM-geheugen' hebben gebruikt om onze geheugentoewijzing voor de OS-behoeften hierboven te berekenen, werkt dezelfde regel niet in alle gevallen erg goed , specifiek voor systemen met middelgrote RAM's tussen 2 GB en 32 GB. In een systeem met 3 GB RAM, bijvoorbeeld, laat het toewijzen van 2 GB voor OS-behoeften niet veel over voor de InnoDB-bufferpool, terwijl het toewijzen van 5% RAM gewoon te weinig is voor onze OS-behoeften.
Laten we de bovenstaande OS-toewijzingsregel verfijnen en de InnoDB-berekeningsmethode onderzoeken voor verschillende RAM-configuraties:
Voor systemen met klein RAM-geheugen (<=1GB)
Voor systemen met minder dan 1 GB RAM is het beter om de MySQL-standaardconfiguratiewaarde van 128 MB te gebruiken voor de grootte van de InnoDB-bufferpool.
Voor systemen met middelgroot RAM (1GB – 32GB)
Gezien het geval van systemen met een RAM-grootte van 1GB – 32GB, kunnen we de OS-behoeften berekenen met behulp van deze ruwe heuristiek:
256 MB + 256 * log2 (RAM-grootte in GB)
De rationalisatie hier is dat we, voor configuraties met weinig RAM, beginnen met een basiswaarde van 256 MB voor OS-behoeften en deze toewijzing op een logaritmische schaal verhogen als de hoeveelheid RAM neemt toe. Op deze manier kunnen we een deterministische formule bedenken om RAM toe te wijzen voor onze OS-behoeften. We zullen dezelfde hoeveelheid geheugen ook toewijzen aan onze andere MySQL-behoeften. In een systeem met 3 GB RAM zouden we bijvoorbeeld een redelijke toewijzing maken van 660 MB voor OS-behoeften en nog eens 660 MB voor andere MySQL-behoeften, wat resulteert in een waarde van ongeveer 1,6 GB voor onze InnoDB-bufferpoolgrootte.
Voor systemen met groter RAM-geheugen (> 32 GB)
Voor systemen met een RAM-grootte van meer dan 32 GB, zouden we teruggaan naar het berekenen van de OS-behoeften als 5% van onze systeem-RAM-grootte, en hetzelfde bedrag voor MySQL andere behoeften. Dus voor een systeem met een RAM-grootte van 192 GB, komt onze methode uit op ongeveer 165 GB voor de grootte van de InnoDB-bufferpool, wat opnieuw een optimale waarde is om te gebruiken.
InnoDB Buffer Pool Size Calculator
Bereken de optimale waarde voor RAM van elk formaat:
InnoDB Buffer Pool Size Calculator - Bereken het optimale aantal voor elk systeem RAM sizeClick To Tweet
Perceel van InnoDB-bufferpoolgrootte voor verschillende RAM-groottes
Waarschuwing voor berekeningen van de grootte van de InnoDB-bufferpool
De overwegingen in deze blogpost gelden voor Linux-systemen die speciaal zijn bedoeld voor MySQL. Voor Windows-systemen of systemen die meerdere applicaties samen met MySQL draaien, kunnen deze waarnemingen onnauwkeurig zijn. Het is ook belangrijk op te merken dat, hoewel we deze tools als referentie kunnen gebruiken, er echt goede ervaring, experimenten, continue monitoring en fijnafstemming voor nodig zijn om de juiste maat voor je innodb_buffer_pool_size te krijgen.