Czy MySQL może efektywnie wykorzystać 64 GB pamięci RAM?

22

Wystąpił problem polegający na tym, że zapytanie o tabelę, która ma około 50 milionów wierszy i ma rozmiar indeksu 4 GB (rozmiar tabeli około 6 GB), powoduje zamianę pamięci serwera bazy danych i gwałtowne spowolnienie. Jestem prawie pewien, że ma to związek z przekroczeniem rozmiaru tabeli temp i zamianą na dysk.

Jeśli zaktualizuję mój serwer bazy danych z 32 GB pamięci RAM do 64 GB pamięci RAM, zastanawiam się, czy baza danych MySQL będzie w stanie w pełni wykorzystać tę dodatkową pamięć, a nie zamienić. Przejrzałem kilka zmiennych (np. KEY_BUFFER_SIZE itp.), I wydają się one obsługiwać ustawienie wartości powyżej 64 GB. Jednak dokumentacja MySQL mówi, że maksymalny rozmiar tmp_table_size wynosi 4 GB.

Czy więc warto byłoby ulepszyć pamięć? Czy skorzystałby na tym problem „kwerendy przy dużej tabeli”, czy też nie pomógłby z powodu limitu 4 GB? Wiem, że istnieją potencjalnie inne rozwiązania, takie jak restrukturyzacja tabeli, która ma być podzielona na partycje na różne sposoby, itp. ... ale bez zmiany czegokolwiek w tabeli, czy dodatkowa pamięć pomógłaby?

Ponadto, ogólnie, czy są jakieś inne zmienne związane z pamięcią, których MySQL nie byłby w stanie wykorzystać przy przejściu z 32 do 64 GB pamięci RAM?

Jako serwer bazy danych używamy 64-bitowego systemu Linux (Ubuntu).

Dzięki, Galen

Galen
źródło

Odpowiedzi:

5

Jeśli używasz InnoDB, najważniejszą zmienną do ustawienia jest innodb_buffer_pool_size. Ustawiłbym to na około 80% pamięci systemowej. Gdy cache się rozgrzeją po pewnym użyciu, najbardziej aktywne dane (zestaw danych roboczych) znajdą się w pamięci (innodb_buffer_pool_size), a operacje na nich powinny być bardzo szybkie. Dzięki 64 GB pamięci możesz tam zmieścić wiele elementów. Pamięć jest zawsze dobrym wyborem dla serwerów DB.

vmfarms
źródło
11

Tak - jeśli korzystasz z InnoDB i masz duże obciążenie odczytu, możesz absolutnie skorzystać z dużej ilości pamięci RAM [zakładając, że twój zestaw danych zmieści się w mem - twój serwer będzie niesamowicie szybki].

Korzystam z MySQL z pamięcią InnoDB na serwerach 8-16 GB z dopasowanym zestawem roboczym w pamięci.

pQd
źródło
To samo tutaj - uruchamiamy InnoDB na pudełkach 64 GB i jest świetny.
James
9

Być może warto poświęcić trochę czasu i wysiłku na zbadanie, co powoduje zamianę systemu przed wydaniem pieniędzy na pamięć?

32 GB pamięci pozostawia dużo dostępnej pamięci nawet po załadowaniu całej tabeli, indeksu i maksymalnej tabeli temp. Do pamięci. Szybkie wyszukiwanie przyniosło te dwie części dokumentacji, które mogą być istotne:

Jaskółka oknówka
źródło
0

Jeśli uważasz, że jest to spowodowane tworzeniem bardzo dużej tabeli tymczasowej, możesz rozważyć sposoby ulepszenia zapytania, aby uniknąć tabel tymczasowych.

Możesz zamieścić w Stackoverflow post zawierający schemat, zapytanie, plan wyjaśniania i niektóre szczegóły dotyczące problemu.

MarkR
źródło