Jak zoptymalizować wykorzystanie pamięci MySQL?


9

MOJA KONFIGURACJA ( przykład )

Korzystam z systemu Linux na instancji Amazon High CPU Extra Large EC2 z następującymi specyfikacjami:

  • 7 GB pamięci
  • 20 jednostek obliczeniowych EC2 (8 wirtualnych rdzeni z 2,5 jednostkami obliczeniowymi EC2 każda)
  • 1690 GB pamięci instancji lokalnej
  • Platforma 64-bitowa

Mam dwie duże bazy danych MySQL uruchomione na silniku pamięci MyISAM. Jeden ma 2 GB, a drugi 500 MB. Chciałbym się upewnić, że MySQL zużywa tyle pamięci RAM, ile może / potrzebuje, aby zmaksymalizować prędkości zapytań. Wiem, że istnieje kilka opcji konfiguracyjnych pamięci MySQL jak key_buffer_sizei MyISAM_sort_buffer_size,ale jestem zaznajomiony z optymalizacją nich.

PYTANIA

  1. Jak sprawdzić, jakiej pamięci MySQL używa obecnie w systemie Linux?
  2. Jak zmaksymalizować / zoptymalizować wykorzystanie pamięci MySQL?
  3. Zakładając, że moje zapytania i schemat są zoptymalizowane, jakie inne zmiany powinienem rozważyć?

możesz to sprawdzić za pomocą programu htop.
neworld

Maksymalne wykorzystanie pamięci nie spowoduje zapisania całej bazy danych w pamięci. Musisz mieć system plików oparty na pamięci RAM ...

4
System plików oparty na pamięci RAM jest niebezpieczny. Jeśli serwer ulegnie awarii, wszystkie dane zostaną utracone
neworld

Odpowiedzi:


7

To trudny temat. Nie ma tu odpowiedzi, napisano o tym całe książki . Zalecam, aby Twój rozmiar innodb_buffer_pool_size był wystarczająco duży. Jeśli używasz tabel myisam, sprawdź key_buffer_size. Należy również wziąć pod uwagę table_cache i max_connections.

Oto coś, co może ci pomóc:

http://www.mysqlperformanceblog.com/2006/09/29/what-to-tune-in-mysql-server-after-installation/ http://www.mysqlperformanceblog.com/2007/11/01/innodb- Performance-Optimization-Basics / http://www.mysqlperformanceblog.com/2007/11/03/choosing-innodb_buffer_pool_size/

EDYTOWAĆ:

Jak powiedział @ drew010, ważne jest, aby wziąć pod uwagę rodzaj zastosowania, jaki ma DB. Strojenie dla ciężkiego odczytu DB jest bardzo różne niż ciężkie zapisywanie. Możesz także rozważyć inne strategie. Jak Memcached, bazy danych nosql itp.


2
Uzgodniono, że są to dość małe bazy danych, mówiąc zbyt relatywnie. Jeśli oczekujesz mnóstwa dostępu do bazy danych, możesz rozważyć jakiś system buforowania, taki jak memcached, którego aplikacja może użyć do przechowywania wartości z bazy danych w celu zmniejszenia trafień do bazy danych. Jeśli robisz głównie wstawki, dysk będzie bardzo ważnym czynnikiem. W pewnym stopniu pytanie zależy od tego, jakie są twoje przypadki użycia. Jeśli dane niewiele się zmieniają, pamięć podręczna zapytań mysql również powinna pomóc w szybszych zapytaniach. Upewnij się także, że indeksy / klucze podstawowe są dobre.
drew010,

+1 masz rację, bracie. Przypuszczałem, że prosił o podstawowe strojenie, ale ważne jest, aby wziąć pod uwagę użycie DB i innych rzeczy. Znowu, chyba nie można tutaj dyskutować.
santiago.basulto

1

Jeśli chcesz mieć pewność, że MySQL zużywa całą potrzebną pamięć, musisz przełączyć się na InnoDB. O ile nie użyjesz FULLTEXTmożliwości wyszukiwania MySQL , nie będzie żadnych poważnych problemów.

W przypadku MyISAM wykorzystywanych jest wiele pamięci podręcznych, w tym wewnętrzne bufory kluczy MySQL i pamięć podręczna systemu. Jeśli chcesz uzyskać najlepszą wydajność, musisz zostawić miejsce dla jednej z pamięci podręcznych, ale nadal nie polecam MyISAM do tego celu, szczególnie jeśli twoje bazy danych są obciążone zapisem: MyISAM blokuje całą tabelę podczas zapisu, podczas gdy InnoDB blokuje tylko dotknięte wiersze.

Nawet jeśli umieścisz wszystkie swoje bazy danych w pamięci, nadal możesz mieć wolno działające zapytania z powodu niewystarczających indeksów lub z innych powodów.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.