2009-06-28

Protokół lokalny w systemach wieloprocesorowych

Dmitry Kuzmienko w swoim blogu opisał ciekawe doświadczenie, w którym testowany był serwer Firebird SuperServer 1.5 działający w systemie Windows. Jak wiadomo, ta wersja serwera zawsze jest przypisana do jednego z procesorów (standardowo jest to procesor numer 0). Na tym serwerze wykonywana była kopia bazy danych, wykonywana przy pomocy następującego polecenia:
gbak -b -g db.fdb db.fbk
Podczas testów okazało się, że jeżeli stosowane jest lokalne połączenie, to szybkość wykonania kopii bazy danych zależy od tego, na którym procesorze wykonywany jest program gbak. Jeżeli zarówno serwer jak i program gbak działały na tym samym procesorze, to w testowanym systemie wykonanie kopii bezpieczeństwa przykładowej bazy (plik bazy danych zajmował 3,8 GB) trwało 9 minut i 22 sekundy. Natomiast jeżeli oba programy działały na różnych procesorach, wtedy to samo działanie trwało aż 15 minut 41 sekund.

Jeżeli zamiast połączenia lokalnego zastosowano połączenie przez TCP/IP, to w obu przypadkach wykonanie tego samego działania trwało tylko 4 minuty i 10 sekund.

Wniosek jest oczywisty: nigdy nie należy stosować połączeń lokalnych. Zamiast tego lepie stosować połączenia przez TCP/IP (przynajmniej w przypadku Fiebird SuperServer 1.5; inne wersje nie były jeszcze testowane pod tym kątem). Jeżeli baza danych jest na lokalnym komputerze, to jako serwer można użyć albo localhost, albo adres 127.0.0.1.

Brak komentarzy:

Prześlij komentarz