Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Obliczanie rozmiaru puli buforów InnoDB dla serwera MySQL

Co to jest pula buforów InnoDB?

Pula buforów InnoDB to przestrzeń pamięci, która przechowuje wiele struktur danych w pamięci InnoDB, buforów, pamięci podręcznych, indeksów, a nawet danych wierszowych. innodb_buffer_pool_size to parametr konfiguracyjny MySQL, który określa ilość pamięci przydzielonej do puli buforów InnoDB przez MySQL. Jest to jedno z najważniejszych ustawień w konfiguracji hostingu MySQL i powinno być skonfigurowane w oparciu o dostępną pamięć RAM systemu.

W tym poście omówimy dwa podejścia do ustawiania wartości rozmiaru puli buforów InnoDB, przeanalizujemy zalety i wady tych praktyk, a także zaproponujemy unikalną metodę osiągnąć optymalną wartość w oparciu o rozmiar pamięci RAM systemu.

Podejście 1. Zasada metody kciuka

Najczęstszą praktyką jest ustawienie tej wartości na 70% – 80% pamięci RAM systemu. Chociaż w większości przypadków działa dobrze, ta metoda może nie być optymalna we wszystkich konfiguracjach. Weźmy za przykład system z 192 GB pamięci RAM. W oparciu o powyższą metodę otrzymujemy około 150 GB dla rozmiaru puli buforów. Jednak nie jest to tak naprawdę optymalna liczba, ponieważ nie wykorzystuje w pełni dużego rozmiaru pamięci RAM dostępnej w systemie i pozostawia około 40 GB pamięci. Ta różnica może być jeszcze bardziej znacząca, gdy przechodzimy do systemów o większych konfiguracjach, w których powinniśmy w większym stopniu wykorzystywać dostępną pamięć RAM.

Podejście 2. Bardziej zniuansowane podejście

Podejście to opiera się na bardziej szczegółowym zrozumieniu wewnętrznych elementów puli buforów InnoDB i jej interakcji, co jest bardzo dobrze opisane w książce High Performance MySQL.

Spójrzmy na następującą metodę obliczania rozmiaru puli buforów InnoDB.

  1. Rozpocznij z całkowitą dostępną pamięcią RAM.
  2. Odejmij odpowiednią ilość dla potrzeb systemu operacyjnego.
  3. Odejmij odpowiednią ilość dla wszystkich potrzeb MySQL (takich jak różne bufory MySQL, tabele tymczasowe, pule połączeń i bufory związane z replikacją).
  4. Podziel wynik przez 105%, co jest przybliżeniem narzutu wymaganego do zarządzania samą pulą buforów.

Przyjrzyjmy się na przykład systemowi ze 192 GB pamięci RAM, korzystającym tylko z InnoDB i mającym łączny rozmiar pliku dziennika około 4 GB. Możemy zastosować zasadę „maksymalnie 2 GB lub 5% całkowitej pamięci RAM” dla potrzeb alokacji systemu operacyjnego zgodnie z zaleceniami w powyższej książce, co daje około 9,6 GB. Następnie przeznaczymy około 4 GB na inne potrzeby MySQL, głównie biorąc pod uwagę rozmiar pliku dziennika. Ta metoda daje około 170 GB wielkości naszej puli buforów InnoDB, co stanowi około 88,5% wykorzystania dostępnego rozmiaru pamięci RAM.

Chociaż użyliśmy reguły „maksymalnie 2 GB lub 5% całkowitej pamięci RAM” do obliczenia naszego przydziału pamięci dla potrzeb systemu operacyjnego powyżej, ta sama zasada nie działa zbyt dobrze we wszystkich przypadkach , w szczególności dla systemów ze średniej wielkości pamięciami RAM od 2 GB do 32 GB. Na przykład w systemie z 3 GB pamięci RAM przydzielenie 2 GB na potrzeby systemu operacyjnego nie pozostawia wiele na pulę buforów InnoDB, podczas gdy przydzielenie 5% pamięci RAM to po prostu za mało dla naszych potrzeb systemu operacyjnego.

Dostosujmy więc powyższą regułę alokacji systemu operacyjnego i zbadajmy metodę obliczeń InnoDB w różnych konfiguracjach pamięci RAM:

Dla systemów z małą pamięcią RAM (<=1 GB)

W przypadku systemów działających z mniej niż 1 GB pamięci RAM lepiej jest wybrać domyślną wartość konfiguracyjną MySQL wynoszącą 128 MB dla rozmiaru puli buforów InnoDB.

Dla systemów ze średniej wielkości pamięcią RAM (1 GB – 32 GB)

Rozważając przypadek systemów o rozmiarze pamięci RAM od 1 GB do 32 GB, możemy obliczyć potrzeby systemu operacyjnego za pomocą tej przybliżonej heurystyki:

256 MB + 256 * log2 (rozmiar pamięci RAM w GB)

Uzasadnienie polega na tym, że w przypadku konfiguracji z małą ilością pamięci RAM zaczynamy od wartości bazowej 256 MB na potrzeby systemu operacyjnego i zwiększamy tę alokację w skali logarytmicznej jako ilość pamięci RAM wzrasta. W ten sposób możemy wymyślić deterministyczną formułę przydzielania pamięci RAM na potrzeby naszego systemu operacyjnego. Przeznaczymy również tę samą ilość pamięci na nasze inne potrzeby MySQL. Na przykład w systemie z 3 GB pamięci RAM przydzielilibyśmy sprawiedliwą alokację 660 MB na potrzeby systemu operacyjnego i kolejne 660 MB na inne potrzeby MySQL, co daje wartość około 1,6 GB dla rozmiaru naszej puli buforów InnoDB.

Dla systemów z pamięcią RAM o większej pojemności (> 32 GB)

W przypadku systemów z rozmiarem pamięci RAM większym niż 32 GB, wrócilibyśmy z powrotem do obliczania potrzeb systemu operacyjnego jako 5% rozmiaru pamięci RAM naszego systemu i taką samą ilość dla Inne potrzeby MySQL. Tak więc w przypadku systemu z rozmiarem pamięci RAM 192 GB, nasza metoda wyniesie około 165 GB dla rozmiaru puli buforów InnoDB, co jest ponownie optymalną wartością do użycia.

Kalkulator rozmiaru puli buforów InnoDB

Oblicz optymalną wartość dla dowolnej wielkości pamięci RAM:





Kalkulator rozmiaru puli buforów InnoDB - Oblicz optymalną liczbę dla dowolnego rozmiaru pamięci RAM systemuKliknij, aby tweetować

Wykres wielkości puli buforów InnoDB dla różnych rozmiarów pamięci RAM

Przestroga dotycząca obliczeń rozmiaru puli buforów InnoDB

Rozważania w tym poście na blogu dotyczą systemów Linux dedykowanych dla MySQL. W przypadku systemów Windows lub systemów, które uruchamiają wiele aplikacji razem z MySQL, obserwacje te mogą być niedokładne. Należy również zauważyć, że chociaż możemy używać tych narzędzi jako odniesień, naprawdę wymaga dobrego doświadczenia, eksperymentowania, ciągłego monitorowania i dostrajania, aby uzyskać odpowiedni rozmiar dla swojego innodb_buffer_pool_size.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Zwróć 0, jeśli pole jest puste w MySQL

  2. Funkcja MySQL SQRT() — zwraca pierwiastek kwadratowy liczby w MySQL

  3. Dostrajanie wydajności zapytań MySQL

  4. #1055 — Wyrażenie listy SELECT nie znajduje się w klauzuli GROUP BY i zawiera kolumnę niezagregowaną, co jest niezgodne z sql_mode=only_full_group_by

  5. php zawiera błąd nie znajduje ścieżki