sql >> Databáze >  >> RDS >> Mysql

Výpočet velikosti vyrovnávací paměti InnoDB pro váš server MySQL

Co je to InnoDB Buffer Pool?

Vyrovnávací paměť InnoDB je paměťový prostor, který obsahuje mnoho datových struktur InnoDB v paměti, vyrovnávacích pamětí, mezipamětí, indexů a dokonce i řádkových dat. innodb_buffer_pool_size je konfigurační parametr MySQL, který určuje množství paměti alokované do fondu vyrovnávacích pamětí InnoDB pomocí MySQL. Toto je jedno z nejdůležitějších nastavení v konfiguraci hostingu MySQL a mělo by být konfigurováno na základě dostupné systémové RAM.

V tomto příspěvku vás provedeme dvěma přístupy k nastavení hodnoty velikosti fondu vyrovnávací paměti InnoDB, prozkoumáme klady a zápory těchto postupů a také navrhneme jedinečnou metodu, jak dosáhnout optimální hodnoty na základě velikosti vaší systémové RAM.

Přístup 1. Metoda pravidla palce

Nejčastěji dodržovanou praxí je nastavit tuto hodnotu na 70 % – 80 % systémové paměti RAM. I když ve většině případů funguje dobře, nemusí být tato metoda optimální ve všech konfiguracích. Vezměme si příklad systému se 192 GB RAM. Na základě výše uvedené metody dojdeme k přibližně 150 GB pro velikost fondu vyrovnávací paměti. To však ve skutečnosti není optimální číslo, protože plně nevyužívá velkou velikost paměti RAM, která je v systému k dispozici, a ponechává asi 40 GB paměti. Tento rozdíl může být ještě významnější, když přejdeme na systémy s většími konfiguracemi, kde bychom měli dostupnou RAM využívat ve větší míře.

Přístup 2. Jemnější přístup

Tento přístup je založen na podrobnějším pochopení vnitřních částí zásobníku vyrovnávací paměti InnoDB a jeho interakcí, což je velmi dobře popsáno v knize High Performance MySQL.

Podívejme se na následující metodu výpočtu velikosti fondu vyrovnávací paměti InnoDB.

  1. Začněte s celkovou dostupnou RAM.
  2. Odečtěte vhodnou částku pro potřeby OS.
  3. Odečtěte vhodné množství pro všechny potřeby MySQL (jako jsou různé vyrovnávací paměti MySQL, dočasné tabulky, fondy připojení a vyrovnávací paměti související s replikací).
  4. Výsledek vydělte 105 %, což je přibližná režie potřebná ke správě samotného fondu vyrovnávacích pamětí.

Podívejme se například na systém se 192 GB RAM, který používá pouze InnoDB a má celkovou velikost souboru protokolu asi 4 GB. Můžeme použít pravidlo jako „maximálně 2 GB nebo 5 % celkové RAM“ pro alokaci potřeb OS, jak je doporučeno ve výše uvedené knize, což je asi 9,6 GB. Poté také přidělíme asi 4 GB pro další potřeby MySQL, zejména s ohledem na velikost souboru protokolu. Výsledkem této metody je přibližně 170 GB pro velikost našeho fondu vyrovnávací paměti InnoDB, což je přibližně 88,5 % využití dostupné velikosti RAM.

Přestože jsme použili pravidlo „maximálně 2 GB nebo 5 % celkové RAM“ k výpočtu přidělení paměti pro potřeby OS výše, stejné pravidlo nefunguje ve všech případech velmi dobře , konkrétně pro systémy se středně velkými RAM mezi 2 GB a 32 GB. Například v systému se 3 GB RAM nezbývá při přidělení 2 GB pro potřeby OS mnoho pro fond vyrovnávací paměti InnoDB, zatímco přidělení 5 % paměti RAM je pro naše potřeby OS příliš málo.

Pojďme tedy doladit výše uvedené pravidlo alokace OS a prozkoumáme metodu výpočtu InnoDB napříč různými konfiguracemi RAM:

Pro systémy s malou pamětí RAM (<=1 GB)

U systémů běžících s méně než 1 GB RAM je lepší použít výchozí konfigurační hodnotu MySQL 128 MB pro velikost fondu vyrovnávací paměti InnoDB.

Pro systémy se středně velkou pamětí RAM (1 GB – 32 GB)

S ohledem na případ systémů s velikostí RAM 1 GB – 32 GB můžeme potřeby OS vypočítat pomocí této hrubé heuristiky:

256 MB + 256 * log2 (velikost RAM v GB)

Racionalizací zde je, že u konfigurací s nízkou RAM začínáme se základní hodnotou 256 MB pro potřeby OS a tuto alokaci zvyšujeme v logaritmickém měřítku jako množství paměti RAM se zvyšuje. Tímto způsobem můžeme přijít s deterministickým vzorcem pro přidělení RAM pro potřeby našeho OS. Stejné množství paměti také alokujeme pro další potřeby našeho MySQL. Například v systému se 3 GB RAM bychom udělali spravedlivou alokaci 660 MB pro potřeby OS a dalších 660 MB pro ostatní potřeby MySQL, což by vedlo k hodnotě přibližně 1,6 GB pro velikost našeho fondu vyrovnávací paměti InnoDB.

Pro systémy s větší RAM (> 32 GB)

U systémů s velikostí RAM větší než 32 GB bychom se vrátili zpět k výpočtu potřeb OS jako 5 % velikosti naší systémové RAM a stejné množství pro Další potřeby MySQL. Takže pro systém s velikostí RAM 192 GB bude naše metoda pro velikost fondu vyrovnávací paměti InnoDB přibližně 165 GB, což je opět optimální hodnota, kterou lze použít.

Kalkulačka velikosti vyrovnávací paměti InnoDB

Vypočítejte optimální hodnotu pro RAM libovolné velikosti:





InnoDB Buffer Pool Size Calculator – Vypočítejte optimální číslo pro jakoukoli velikost systémové RAMClick To Tweet

Graf velikosti InnoDB Buffer Pool pro různé velikosti RAM

Výstražné slovo pro výpočty velikosti fondu vyrovnávací paměti InnoDB

Úvahy v tomto příspěvku na blogu se týkají systémů Linux, které jsou vyhrazeny pro MySQL. U systémů Windows nebo systémů, které provozují více aplikací spolu s MySQL, mohou být tato pozorování nepřesná. Je také důležité poznamenat, že i když můžeme tyto nástroje použít jako reference, k získání správné velikosti pro váš innodb_buffer_pool_size to opravdu vyžaduje dobré zkušenosti, experimentování, nepřetržité sledování a dolaďování.


  1. Oracle SQL - max() s hodnotami NULL

  2. Sloučit tabulku a protokol změn do zobrazení v PostgreSQL

  3. 2 způsoby, jak vrátit řádky, které obsahují nealfanumerické znaky v PostgreSQL

  4. Smazat pomocí Join v Oracle SQL Query