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

mysql wolno przy pierwszym zapytaniu, a potem szybko przy powiązanych zapytaniach

Strony plików danych innodb są buforowane w puli buforów innodb. Tego można się spodziewać. Odczytywanie plików jest powolne, nawet na dobrych dyskach twardych, zwłaszcza w przypadku odczytów losowych, co widzą głównie bazy danych.

Może się zdarzyć, że twoje pierwsze zapytanie wykonuje pewnego rodzaju skanowanie tabeli, które ściąga wiele stron do puli buforów, a następnie dostęp do nich jest szybki. Lub coś podobnego.

Tego się spodziewałem.

Najlepiej użyć tego samego silnika dla wszystkich tabel (wyjątki:tabele systemowe, tabele tymczasowe (być może) i tabele bardzo małe lub te o krótkim czasie życia). Jeśli tego nie zrobisz, będą musieli walczyć o barana.

Zakładając, że wszystkie twoje tabele są innodb, spraw, aby pula buforów wykorzystywała do 75% fizycznej pamięci RAM serwera (zakładając, że nie wykonujesz zbyt wielu innych zadań na maszynie).

Wtedy będziesz mógł zmieścić około 12G swojej bazy danych w pamięci RAM, więc po „rozgrzaniu” „najczęściej używane” 12G Twojej bazy danych będzie w pamięci RAM, gdzie dostęp do niej jest przyjemny i szybki.

Niektórzy użytkownicy mysql mają tendencję do „rozgrzewania” serwerów produkcyjnych po restarcie, wysyłając im przez jakiś czas zapytania skopiowane z innej maszyny (będą to niewolnikami replikacji), dopóki nie dodadzą ich do swojej puli produkcyjnej. Pozwala to uniknąć ekstremalnego spowolnienia obserwowanego, gdy pamięć podręczna jest zimna. Na przykład YouTube tak robi (a przynajmniej kiedyś; Google je kupił i teraz mogą używać Google-fu)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Zaktualizuj wiersz danymi z innego wiersza w tej samej tabeli

  2. Błędy uprawnień Mysql z „ładowaniem danych”

  3. Kiedy powinienem używać MySQLi zamiast MySQL?

  4. Jak ponownie połączyć utracone połączenia za pomocą EclipseLink?

  5. sprawdź, czy wynik zapytania jest pustym wierszem mysqli