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
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:
źródło
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.
źródło