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

Najlepsze praktyki dotyczące tworzenia indeksów w tabelach MySQL — kompilacja indeksu kroczącego

Posiadając odpowiednie indeksy w swoich tabelach MySQL, możesz znacznie zwiększyć wydajność zapytań SELECT. Ale czy wiesz, że samo dodawanie indeksów do tabel jest kosztowną operacją i może zająć dużo czasu w zależności od rozmiaru tabel? W tym czasie możesz również doświadczyć obniżonej wydajności zapytań, ponieważ zasoby systemowe są również zajęte pracą nad tworzeniem indeksów. W tym poście na blogu omawiamy podejście do optymalizacji procesu tworzenia indeksu MySQL w taki sposób, aby nie miało to wpływu na zwykłe obciążenie pracą.

Tworzenie indeksu kroczącego MySQL

Nazywamy to podejście „Rolling Index Creation” – jeśli masz zestaw replik MySQL typu master-slave, możesz utworzyć indeks po jednym węźle naraz. Powinieneś utworzyć indeks tylko w węzłach podrzędnych, aby nie wpłynąć na wydajność mastera. Po zakończeniu tworzenia indeksu na podrzędnych, degradujemy obecnego nadrzędnego i promujemy jednego z aktualnych podrzędnych jako nowego nadrzędnego. W tym czasie budowanie indeksu jest kontynuowane w pierwotnym węźle głównym (który jest teraz podrzędnym). Nastąpi krótki czas (dziesiątki sekund), podczas którego utracisz łączność z bazą danych z powodu przełączenia awaryjnego, ale można to rozwiązać, ponawiając próby na poziomie aplikacji.

Zalety wydajności tworzenia indeksu kroczącego

Przeprowadziliśmy mały eksperyment, aby zrozumieć korzyści płynące z tworzenia indeksu kroczącego.

W teście wykorzystano zestaw danych MySQL utworzony za pomocą Sysbench, który zawierał 3 tabele z 50 milionami wierszy każda. Wygenerowaliśmy obciążenie mastera MySQL przy 30 klientach działających w zrównoważonym obciążeniu (50% odczytów i 50% zapisów) przez 10 minut, a jednocześnie zbudowaliśmy prosty indeks pomocniczy na jednej z tabel w dwóch scenariuszach:

  1. Tworzenie indeksu bezpośrednio na wzorcu
  2. Tworzenie indeksu na urządzeniu podrzędnym

Konfiguracja stołu testowego MySQL

Typ instancji MySQL Instancja EC2 m4.large z 8 GB pamięci RAM
Typ wdrożenia 2 Node Master-Slave Set z semisynchroniczną replikacją
Wersja MySQL 5.7.25

Wyniki wydajności

Scenariusz Przepustowość obciążenia (zapytania na sekundę) 95. percentyl czasu oczekiwania
Tworzenie indeksu na wzorcu 453,63 670 ms
Tworzenie indeksu kroczącego 790,03 390 ms

Na wynos

Uruchamiając tworzenie indeksu bezpośrednio na serwerze głównym MySQL, mogliśmy doświadczyć tylko 60% przepustowości, którą osiągnięto, uruchamiając tworzenie indeksu na serwerze podrzędnym MySQL za pomocą operacji kroczącej. 95-centylowe opóźnienie zapytań było również 1,8 razy większe, gdy tworzenie indeksu miało miejsce na serwerze głównym.

Najlepsze praktyki dotyczące tworzenia indeksów w tabelach #MySQLKliknij, aby tweetować

Automatyzacja tworzenia indeksu kroczącego

ScaleGrid automatyzuje tworzenie indeksu kroczącego dla wdrożenia MySQL za pomocą prostego interfejsu użytkownika do jego inicjowania.

W powyższym interfejsie użytkownika możesz wybrać nazwę bazy danych i tabeli oraz „Dodaj indeks” jako operację zmiany tabeli. Następnie określ nazwę kolumny i nazwę indeksu, a polecenie zmiany tabeli zostanie wygenerowane i wyświetlone. Po kliknięciu przycisku Utwórz, tworzenie indeksu będzie następować po jednym węźle na raz w sposób kroczący.

Dodatkowo ScaleGrid obsługuje również inne proste operacje zmiany tabeli, takie jak dodawanie nowej kolumny do tabeli w sposób ciągły. Czekajcie na mój kolejny post na blogu z dodatkowymi szczegółami!


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Zresetuj hasło roota MySQL

  2. przekonwertuj datę php na format mysql

  3. wybierz count(*) z tabeli mysql w php

  4. Jak połączyć się z bazą danych za pomocą klienta NaviCat MySQL

  5. Przykłady UTC_DATE – MySQL