Ping mierzy tylko czas od klienta do serwera iz powrotem (rtt - czas podróży w obie strony)
Zwykle bazy danych używają TCP, więc najpierw musisz wysłać pakiet SYN, aby rozpocząć uzgadnianie TCP (aby uprościć powiedzmy, że 15ms * + czas procesora, następnie otrzymasz SYN / ACK (15ms + procesor), odeślij ACK i żądanie (co najmniej 15ms + procesor), następnie czas na przetworzenie zapytania przez bazę danych, a następnie czas (15ms + procesor) na odzyskanie danych i jeszcze więcej na potwierdzenie i zamknięcie połączenia.
Oczywiście nie liczy się uwierzytelnienie (nazwa użytkownika / hasło) do bazy danych i brak szyfrowania (uzgadnianie ssl / DH lub cokolwiek jest potrzebne).
* połowa czasu podróży w obie strony, zakładając, że trasa tam iz powrotem jest symetryczna (połowa czasu, aby się tam dostać, a połowa, aby wrócić ... czas przetwarzania procesora na odpowiedź ping jest bardzo krótki)
Problem trwałego uzgadniania trójstronnego można spotkać w przypadku trwałych sesji TCP.
Michuelnik
@Michuelnik, czy mógłbyś opracować? Naprawdę chciałbym to wszystko zrozumieć i znaleźć najlepszy sposób na zminimalizowanie opóźnienia w zapytaniach do DB.
Phil
2
Niestety większość oprogramowania (przynajmniej aplikacji internetowych) nie obsługuje tego: / Ale pomysł polega na ustanowieniu połączenia (raz) z bazą danych i utrzymywaniu połączenia działającego (otwartym) i wysyłaniu zapytań / otrzymywaniu odpowiedzi przez jeden, stale otwarte połączenie. Eliminuje to potrzebę uzgadniania tcp, uwierzytelniania itp. Za każdym razem.
mulaz
Mulaz, dziękuję za wyjaśnienie. Będę pracował z Pythonem, więc zobaczymy, jak to będzie. ;-)
Phil
Nie zapomnij o wielkości żądania i odpowiedzi. Na przykład, w przypadku łącza o przepustowości 1 MB / s, przesyłanie danych o pojemności 100 KB zajmuje dodatkowe 100 ms.
Dustin Boswell
7
Czas pingowania to podróż w obie strony. Jeśli się nad tym zastanowić - jak to zmierzyć w jedną stronę? Zajmie to 30 ms plus czas zapytania.
Dodam tylko, że prawdopodobnie zajmie to trochę więcej niż tylko 30 sekund + czas zapytania. ponieważ Ping to ICMP, a twoje połączenie DB to TCP, będziesz mieć tam również konfigurację / uzgadnianie, inicjację połączenia DB itp.
Doon
@Doon: Tego można uniknąć dzięki trwałym połączeniom TCP / bazy danych
Michuelnik,
@Michuelnik, czy uważasz, że trwałe połączenie z DB to sposób na przejście tutaj? Czy spowoduje to inne problemy?
Phil
@michuelnik, oczywiście. Wskazałem tylko, że nie jest tak proste jak zapytanie RTT +. Istnieją również ograniczenia prędkości maksymalnej, na sesję z powodu opóźnień itp.)
Doon
@phil W większości przypadków trwałe połączenia z DB są korzystne, jeśli zamierzasz wykonywać wiele zapytań. Jeśli zapytania są rozłożone / sporadyczne, niepotrzebnie wiążesz zasoby, ale jeśli zapytania przychodzą przez cały czas itp. Zaoszczędzisz trywialną ilość kosztów ogólnych poprzez ponowne użycie istniejącego połączenia zamiast otwierania nowego połączenia na każde żądanie.
Czas pingowania to podróż w obie strony. Jeśli się nad tym zastanowić - jak to zmierzyć w jedną stronę? Zajmie to 30 ms plus czas zapytania.
źródło