Ile kosztuje otwieranie i zamykanie połączenia DB?

15

Jak intensywne jest procesor otwierania i zamykania połączenia DB (dla aplikacji sieci web) w MySQL

  • ... kiedy oprogramowanie DB znajduje się na localhost?
  • ... kiedy oprogramowanie DB znajduje się na innym komputerze?
ThinkingMonkey
źródło

Odpowiedzi:

12

Pomyśl o ilości pamięci przydzielanej na połączenie DB. Jakie rzeczy należy przydzielić? Zgodnie z MySQL 5.0 Certification Study Guide, strona 357 :

Serwer utrzymuje kilka buforów dla każdego połączenia klienta. Jeden służy jako bufor komunikacyjny do wymiany informacji z klientem. Dla każdego klienta utrzymywane są inne bufory do odczytu tabel i wykonywania operacji łączenia i sortowania.

Jakie ustawienia zarządzają buforami dla poszczególnych połączeń?

Przyłączanie i zwalnianie tych buforów wymaga czasu, gdy powstaje połączenie. Nie zapomnij pomnożyć sumy tych wartości przez max_connections . Na marginesie, proszę powstrzymać się od używania mysql_pconnect, ponieważ trwałe połączenia PHP i MySQL nie układają się dobrze. Oto dwa informacyjne linki na ten temat:

W środowisku intensywnego odczytu i intensywnego zapisu, takim jak OLTP, byłoby to kosztowne ze względu na użycie pamięci RAM i możliwe hamowanie z powodu zamiany systemu operacyjnego. Na stronie z niskim zapisem i niskim czytaniem nie martwiłbym się tak bardzo.

RolandoMySQLDBA
źródło
10

Nie jestem pewien, czy ma to znaczenie „ile kosztuje”. Jest to z pewnością bardziej kosztowne niż ponowne użycie tego samego połączenia. To, co zaobserwujesz, będzie zależeć od tego, czy prawidłowo korzystasz z puli połączeń, jak nasycona jest twoja pula, dostępne zasoby w pudełku itp.

Ogólnie rzecz biorąc, jeśli wykonujesz pętlę, aby wykonać interakcję z bazą danych, znacznie lepiej będzie użyć ponownie tego samego aktywnego połączenia niż otwieranie i zamykanie w pętli (anty-wzorzec, który często widzę) .

Aaron Bertrand
źródło
4

Dylemat między ponownym użyciem obiektu a zburzeniem go i ponownym zbudowaniem (oba mają zalety i wady) można często rozwiązać kompromisowo: buforować obiekt, ale przez określony czas (tj. Z upływem czasu). Jeśli obiekt jest często używany, to jest ponownie używany. Ale jeśli nie jest używany przez pewien czas, usuwa go mechanizm wygaśnięcia, zmuszając go do odtworzenia, gdy jest ponownie potrzebny.

System może mieć globalny haczyk dla tego rodzaju pamięci podręcznych, który jest wywoływany, gdy pamięć jest niska, co powoduje, że wszystkie z nich upuszczają ostatnio nieużywane obiekty.

Koleś
źródło
2

MySQL buforuje połączenia (lub wątki) przy użyciu bufora wątków (rozmiar_podstawy_wątków). Maksymalna wartość to 100. Gdy klient zamyka połączenie, jest on zwracany do pamięci podręcznej. Po otwarciu nowego połączenia sprawdza pamięć podręczną wątków. W bardzo obciążonym systemie otwieranie połączenia zamykającego może być kosztowne, szczególnie jeśli masz długotrwałe zapytania.

https://dev.mysql.com/doc/refman/5.6/en/connection-threads.html Jeśli możesz sobie pozwolić na Mysql Enterprise, możesz użyć wtyczki puli wątków zaimplementowanej w Mysql 5.6.

greenlitmysql
źródło