/ / Mysql wysysa duże dane [zamknięte] - mysql, baza danych, heidisql

Mysql zasysa duże dane [closed] - mysql, database, heidisql

Mam bazę danych mysql z około 30 GB danych. Niektóre tabele zawierają ponad 40 milionów wierszy. Używam innoDB. Odpowiadam tylko przez użycie „select count (*) from table_name” na lokalnym komputerze zajmuje mi około 5 minut. Myślę, że to niemożliwe dla mnie do łączenia tabeli. Chciałbym zapytać, czy mógłbym coś zrobić, aby poprawić wydajność. Lub czy muszę przełączyć się do innej bazy danych. Nigdy nie spotkałem się z tak dużymi danymi w DB. Wsparcie.

Odpowiedzi:

4 dla odpowiedzi № 1

Uruchomiłem instancje mysql z ponad 100 milionami wpisów i dostarczam ponad 30 milionów zapytań dziennie. Więc można to zrobić.

Występujące problemy wystąpią w przypadku dowolnego innego systemu baz danych, jeśli jest podobnie skonfigurowany.

Mogę tylko dać ci kilka wskazówek, jeśli jest to krytyczne zadanie, rozważ zatrudnienie profesjonalisty, by ulepszyć twój system.

Podstawy, na które musisz spojrzeć;

  • Baza danych o tej wielkości najlepiej jest uruchomić na dedykowanym serwerze z dyskami SSD i co najmniej 2 rdzeniami;
  • Będziesz potrzebował dużo pamięci RAM na swoim serwerze, przynajmniej całkowity rozmiar bazy danych + 20% dla innych zasobów systemowych;
  • Upewnij się, że mysql został skonfigurowany z wystarczającą ilością pamięci, 80% całkowitej pamięci RAM. Podstawowe ustawienie, które to spowoduje innodb_buffer_pool_size;
  • Optymalizuj swoje zapytania, a indeksuj w razie potrzeby - to jest sztuka, ale może znacznie poprawić wydajność, nauczyć się korzystać EXPLAIN ... na twoje pytania.

0 dla odpowiedzi nr 2

Tabele MySQL InnoDB nie zachowują więc liczby wierszy SELECT COUNT(*) może być powolny. To nie wskazuje, jak mogą działać inne zapytania, ale wskazuje, jak powolne może być pełne skanowanie tabeli. Pięć minut jest naprawdę złe dla zaledwie 40 milionów wierszy i może wskazywać na poważny problem z bazą danych lub dyskiem.

Tutaj jest blog wydajnościowy na ten temat. Również zobacz tę powiązaną odpowiedź.


0 dla odpowiedzi № 3

Spotkałem się już z problemem dużych rozmiarów daty i mam nadzieję, że moje doświadczenie będzie dla Ciebie przydatne.

po pierwsze, twoja potrzeba utworzyć indeks dla swojej tabeli, ale jaki rodzaj indeksu powinien być używany w zależności od logiki zapytania.

po indeksowaniu, jeśli zapytanie jest nadal powolne, „dlepiej podzielić dane na hierarchię, na przykład tabele źródłowe, tabele środkowe i tabele raportów. tabela raportów zapisuje tylko niektóre dane końcowe, a zapytanie będzie szybkie, również utworzy dla niego indeks.

po trzecie, spróbuj użyć czegoś takiego jak memsql, jeśli wyżej wymienione nie może spełnić twoich wymagań.

poza tym, naucz się takich poleceń jak:

set profiling = 1
do some slow query
show profiles;
SHOW PROFILE FOR QUERY N;