Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Optymalizacja MySQL Prędkość INSERT jest spowolniona z powodu indeksów

Jeśli potrzebujesz szybkich wstawek, najpierw potrzebujesz odpowiedniego sprzętu. Wymaga to wystarczającej ilości pamięci RAM, dysku SSD zamiast napędów mechanicznych i dość mocnego procesora.

Ponieważ używasz InnoDB, chcesz go zoptymalizować, ponieważ domyślna konfiguracja jest przeznaczona dla wolnych i starych maszyn.

Oto świetna lektura na temat konfigurowania InnoDB

Po tym musisz wiedzieć jedną rzecz - a mianowicie, jak bazy danych wykonują swoje rzeczy wewnętrznie, jak działają dyski twarde i tak dalej. Mechanizm uprości w poniższym opisie:

Transakcja to MySQL, który czeka na dysk twardy, aby potwierdzić, że zapisał dane. Dlatego transakcje są powolne na dyskach mechanicznych, mogą wykonywać 200-400 operacji wejścia-wyjścia na sekundę. W tłumaczeniu oznacza to, że możesz uzyskać 200 zapytań o wstawianie na sekundę za pomocą InnoDB na napędzie mechanicznym. Oczywiście jest to uproszczone wyjaśnienie , żeby opisać, co się dzieje, nie jest to pełny mechanizm transakcji .

Ponieważ zapytanie, szczególnie to, które odpowiada rozmiarowi Twojej tabeli, jest stosunkowo małe pod względem bajtów - skutecznie marnujesz cenne IOPS na pojedyncze zapytanie.

Jeśli zawiniesz wiele zapytań (100 lub 200 lub więcej, nie ma dokładnej liczby, musisz przetestować) w jedną transakcję, a następnie ją zatwierdzisz - natychmiast uzyskasz więcej zapisów na sekundę.

Faceci z Percony osiągają 15 tys. insertów na sekundę na stosunkowo tanim sprzęcie. Nawet 5k wstawek na sekundę nie jest złe. Tabela taka jak twoja jest mała, robiłem testy na podobnej tabeli (więcej o 3 kolumny) i udało mi się uzyskać 1 miliard rekordów bez zauważalnych problemów, używając maszyny 16 GB RAM z dyskiem SSD 240 GB (1 dysk, bez RAID, używane do celów testowych).

TL;DR:- wejdź w link powyżej, skonfiguruj serwer, zdobądź dysk SSD, zapakuj wiele insertów w jedną transakcję i zyskaj. I nie wyłączaj i nie włączaj indeksowania, nie zawsze ma to zastosowanie, ponieważ w pewnym momencie będziesz spędzać czas na przetwarzaniu i IO, aby je zbudować.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Wyszukiwanie pełnotekstowe MySQL dla hashtagów (w tym symbol # w indeksie)

  2. Jak używać MySQL Found_Rows() w PHP?

  3. Obsługa błędów procedury składowanej MySQL

  4. Funkcje matematyczne MySQL (pełna lista)

  5. MySQL:błąd w składni SQL... w pobliżu klucza...?