Zrozumienie statystyk puli buforów INNODB

20

Po przeczytaniu tej strony w dokumentacji mysql starałem się zrozumieć nasze obecne użycie InnoDB. Obecnie przydzielamy 6 GB pamięci RAM dla puli buforów. Rozmiar naszej bazy danych jest mniej więcej taki sam. Oto dane wyjściowe z show engine innodb status\G(korzystamy z wersji 5.5)

----------------------
BUFFER POOL AND MEMORY
----------------------
Total memory allocated 6593445888; in additional pool allocated 0
Dictionary memory allocated 1758417
Buffer pool size   393215
Free buffers       853
Database pages     360515
Old database pages 133060
Modified db pages  300
Pending reads 0
Pending writes: LRU 0, flush list 0, single page 0
Pages made young 7365790, not young 23099457
0.00 youngs/s, 0.00 non-youngs/s
Pages read 1094342, created 185628, written 543182148
0.00 reads/s, 0.00 creates/s, 37.32 writes/s
Buffer pool hit rate 1000 / 1000, young-making rate 0 / 1000 not 0 / 1000
Pages read ahead 0.00/s, evicted without access 0.00/s, Random read ahead 0.00/s
LRU len: 360515, unzip_LRU len: 0
I/O sum[2571]:cur[0], unzip sum[0]:cur[0]

Chciałem wiedzieć, jak dobrze wykorzystujemy bufor bufora. Po początkowym spojrzeniu na wynik, okazało się, że rzeczywiście go używamy, na podstawie Pages made youngi not youngmamy w nim liczby i Buffer pool hit rate is 1000 / 10000(co widziałem w innych miejscach w Internecie, co oznacza, że ​​jest dość intensywnie używane. Prawda?)

To, co rzuca mnie przez pętlę, to dlaczego young-making ratei notsą na poziomie 0/1000, a dostęp young/si non-young/ssą na poziomie 0. To wszystko wskazywałoby, że w ogóle nie jest używane, prawda?

Czy ktoś może to zrozumieć?

Safado
źródło

Odpowiedzi:

18
 Buffer pool hit rate is 1000 / 1000

Jest to jedyna naprawdę znacząca wartość w sytuacji, w której się znajdujesz ... a ta sytuacja polega na tym, że masz szczęście, że masz pulę buforów o doskonałym 100% trafieniu. Nie analizuj nadmiernie reszty, ponieważ nie musisz nic zmieniać, chyba że w systemie operacyjnym serwera jest mało pamięci, co powoduje zamianę.

Młode / nie młode wartości nie są interesujące w przypadku zerowej presji na pulę buforów. InnoDB używa go, bez niego nic nie robi. Jeśli pula jest zbyt mała, strony zostają eksmitowane, a nowe strony są wczytywane, a inne statystyki pomagają zrozumieć, że ... ale to jest problem, którego prawdopodobnie nie masz.

Wolna „nieużywana” przestrzeń w basenie nigdy nie zostanie zaniedbana lub pozostawiona bezczynna przez InnoDB, jeśli jest ona w ogóle potrzebna z jakiegokolwiek powodu, więc fakt, że jest wolny, oznacza tylko, że masz trochę miejsca do oddychania, tak jak rozmiar twojej pracy zestaw danych rośnie.

To wszystko oznacza, chyba że oczywiście ostatnio zrestartowałeś serwer, w takim przypadku jest niekompletny. Serwer musi przejść pełny okres „normalnego” użytkowania (w tym pełne kopie zapasowe), zanim statystyki opowiedzą całą historię ... to, czy jest to godzina, dzień, tydzień, miesiąc czy rok, zależy od Twojej aplikacji.

Michael - sqlbot
źródło
28

The Buffer pool size 393215 To jest na stronach, a nie bajtach.

Aby zobaczyć rozmiar puli buforów w GB, uruchom to:

SELECT FORMAT(BufferPoolPages*PageSize/POWER(1024,3),2) BufferPoolDataGB FROM
(SELECT variable_value BufferPoolPages FROM information_schema.global_status
WHERE variable_name = 'Innodb_buffer_pool_pages_total') A,
(SELECT variable_value PageSize FROM information_schema.global_status
WHERE variable_name = 'Innodb_page_size') B;

Database pages 360515 Jest to liczba stron z danymi w puli buforów

Aby zobaczyć ilość danych w rozmiarze puli buforów w GB, uruchom to:

SELECT FORMAT(BufferPoolPages*PageSize/POWER(1024,3),2) BufferPoolDataGB FROM
(SELECT variable_value BufferPoolPages FROM information_schema.global_status
WHERE variable_name = 'Innodb_buffer_pool_pages_data') A,
(SELECT variable_value PageSize FROM information_schema.global_status
WHERE variable_name = 'Innodb_page_size') B;

Aby zobaczyć procent używanej puli buforów, uruchom to:

SELECT CONCAT(FORMAT(DataPages*100.0/TotalPages,2),' %') BufferPoolDataPercentage FROM
(SELECT variable_value DataPages FROM information_schema.global_status
WHERE variable_name = 'Innodb_buffer_pool_pages_data') A,
(SELECT variable_value TotalPages FROM information_schema.global_status
WHERE variable_name = 'Innodb_buffer_pool_pages_total') B;

Modified db pages 300Jest to liczba stron w puli buforów, które muszą zostać zapisane z powrotem do bazy danych. Są one również nazywane brudnymi stronami.

Aby zobaczyć przestrzeń zajmowaną przez brudne strony, uruchom to:

SELECT FORMAT(DirtyPages*PageSize/POWER(1024,3),2) BufferPoolDirtyGB FROM
(SELECT variable_value DirtyPages FROM information_schema.global_status
WHERE variable_name = 'Innodb_buffer_pool_pages_dirty') A,
(SELECT variable_value PageSize FROM information_schema.global_status
WHERE variable_name = 'Innodb_page_size') B;

Aby zobaczyć procent brudnych stron, uruchom to:

SELECT CONCAT(FORMAT(DirtyPages*100.0/TotalPages,2),' %') BufferPoolDirtyPercentage FROM
(SELECT variable_value DirtyPages FROM information_schema.global_status
WHERE variable_name = 'Innodb_buffer_pool_pages_dirty') A,
(SELECT variable_value TotalPages FROM information_schema.global_status
WHERE variable_name = 'Innodb_buffer_pool_pages_total') B;

Jeśli chodzi o inne rzeczy na wyświetlaczu, uruchom to:

SHOW GLOBAL STATUS LIKE 'Innodb_buffer_pool%';

Zobaczysz wszystkie zmienne statusu dla puli buforów. możesz zastosować te same zapytania do wszystkiego, co musisz zbadać.

RolandoMySQLDBA
źródło
Dziękuję Ci! Z tego wynika, że ​​rzeczywiście używana jest pamięć podręczna bufora, ale chcę wiedzieć, czy skutecznie ją wykorzystujemy. Jeśli rozumiem pojęcie młodych i starych stron, domyślam się, że dobrym wskaźnikiem, że pamięć podręczna bufora jest w pełni wykorzystywana, byłaby liczba młodych stron i dostęp do młodych stron, prawda? Używamy mysqldump do wykonywania kopii zapasowych co 3 godziny, co wyjaśnia, dlaczego jest pełne. Ale przy pomocy young-making rate 0 / 1000i oznacza to 0.00 youngs/s, że tak naprawdę nie wykorzystujemy tego. Czy czytam to prawda?
Safado
2
Współczynnik tworzenia młodych wynoszący 0/1000 informuje, że strony danych dla uruchomionych zapytań nie tylko mieszczą się w pamięci podręcznej, ale także w mniejszym (3/8) rozmiarze młodej pamięci podręcznej. Oznacza to, że zapytania nie używają wystarczającej ilości danych, aby starzec niektóre strony do dużej, nie młodej pamięci podręcznej.
Thomas Jones-Low
Bardzo przydatne będzie krótkie objaśnienie pozostałych zmiennych stanu innodb_buffer_pool. Czy możesz dodać ją do swojej odpowiedzi
vidyadhar,
5

Nie zgodzę się z oceną, że „masz szczęście, że masz pulę buforów o doskonałym 100% trafieniu”

Na górze wyjścia (które jest odcięte) znajduje się wiersz podobny do:

Per second averages calculated from the last 16 seconds

Mówi mi to, że w ciągu ostatnich 16 sekund nie dokonano żadnych odczytów, co (sztucznie) daje doskonały wynik „1000/1000”.

0.00 reads/s, 0.00 creates/s, 37.32 writes/s
Buffer pool hit rate 1000 / 1000, young-making rate 0 / 1000 not 0 / 1000

W międzyczasie pojawiło się kilka zapisów. Były to prawdopodobnie odroczone zapisy w celu opróżnienia „brudnych” stron lub usunięcia indeksów z „bufora zmian”.

Prawdopodobnie w ciągu ostatnich 16 sekund nie było żadnej aktywności w strefie młodych / gorących.

Rick James
źródło
Cóż, średnio od 6 do 10 tysięcy WYBIERA na sekundę i jednocześnie widzę prawie 0 operacji odczytu dysku na serwerze, więc nie sądzę, że tak jest
Safado
Czy „pamięć podręczna zapytań” spełnia większość zapytań? SHOW VARIABLES LIKE 'query%';i SHOW GLOBAL STATUS LIKE 'Qc%';i SHOW GLOBAL VARIABLES LIKE 'Com_SELECT';.
Rick James
0

Pula buforów jest podzielona na dwie części: młodą listę i młodą listę. Szybkość tworzenia pokazuje, ile stron w pulach buforów jest tasowanych między dwiema listami.

Strony, które stały się młode, nie są tworzone dla młodych stron (tzn. Są odczytywane z pamięci podręcznej. Strony, które są młode, to strony przeniesione z młodej listy, ponieważ są za stare lub ponieważ młoda lista jest pełna.

Szybkość przesuwania stron między nimi zależy od tego, jaka część puli buforów jest aktualnie używana w porównaniu do wielkości młodej puli. Ustawienie na zero oznacza, że ​​twój aktywny zestaw (strony, których używasz) jest mniejszy niż młoda pula.

Thomas Jones-Low
źródło