SQL Server: Czy powinniśmy używać TCP lub nazwanych potoków, czy używać domyślnych?


17

Podczas łączenia się z SQL Server 2008 R2 z aplikacji klienckiej .NET 4 na innym serwerze w tej samej sieci LAN, można ustawić trzy różne protokoły sieciowe:

  1. TCP
  2. Nazwane potoki
  3. Nie ustawiaj niczego w ciągu połączenia i użyj domyślnego

Jaka jest najlepsza praktyka? Co wybrać

Informacje dodatkowe: Zarówno TCP, jak i Nazwane potoki są włączone zarówno na serwerze, jak i na kliencie. Aplikacja korzysta z kopii lustrzanej bazy danych. Klient i serwer komunikują się przez szybką sieć LAN.

Badamy to, ponieważ mamy rzadkie i fałszywe problemy z łącznością i przekroczeniem limitu czasu. (Ale niezależnie od tego chciałbym poznać najlepszą praktykę).

Istnieje artykuł na ten temat na MSDN, ale jest on bardzo ogólny i niejasny. Nie radzi ani nie poleca niczego przydatnego.


2
@ccook Wierzę, że tak. Wiele tcp:lat później skonfigurowałem również jako część większości ciągów połączeń w środowisku innej firmy. Zakładam, że znaleźli podobne problemy.
usr

1
Nie jestem wystarczająco pewny siebie, aby opublikować to jako odpowiedź. Dziwne jest jednak to, że tak rażący problem nie został rozwiązany. Musi być bardzo rzadki lub trudny do odtworzenia. @ccook
usr

1
Jest to dla nas bardzo rzadkie i trudne do odtworzenia. Na szczęście, kiedy stworzyliśmy tę aplikację, która co chwilę spamuje połączenia, może ją od czasu do czasu odtworzyć. To wciąż bardzo nieprzewidywalne. Jednak teraz testujemy tę zmianę - poczekaj chwilę, zanim zadzwonisz. Po przyjrzeniu się temu zdecydowanie jestem skłonny używać tcp: domyślnie, chyba że aplikacja i serwer znajdują się na tym samym komputerze.
ccook

1
@ccook Miałem nową myśl. Udziały plików systemu Windows są notorycznie zawodne. Wiele osób widzi fałszywe błędy i awarie połączeń. To rzadkie, ale trudne / niemożliwe do zdiagnozowania. Korzystając z nazwanych potoków, wciągasz teraz całą technologię do wdrożenia SQL Server. Zasadniczo wydaje się to niemądre.
usr

1
Zgoda. Jak dotąd tcp: wydaje się, że rozwiązuje ten problem. Czekamy jednak trochę, by to potwierdzić.
ccook

Odpowiedzi:


18

Wolę TCP / IP niż Nazwane potoki, chociaż w większości sytuacji nie będzie zauważalnej różnicy. Można to zrobić, dostosowując protokoły obsługiwane przez instancję w programie SQL Server Configuration Manager, a nie kodując na stałe parametry w łańcuchu połączenia (ułatwia to wprowadzanie zmian lub rozwiązywanie problemów).

Zasadniczo routing i inne koszty związane z nazwanymi potokami (chyba że aplikacje znajdują się na tym samym komputerze co SQL Server, w którym to przypadku jest tylko niewielki dodatkowy koszt) sprawiają, że jest to mniej wydajna opcja, szczególnie na dużą skalę, w wolniejszym środowisku sieciowym (100 MB lub mniej) lub jeśli obciążenia są wykonywane w seriach.

Jeśli Twoje aplikacje znajdują się w tym samym pudełku co SQL Server, powinieneś również pamiętać o pamięci współdzielonej - jeśli masz aplikacje w SQL Server bezpośrednio komunikujące się z SQL Server, będzie to najbardziej wydajna opcja.

Więcej informacji na temat zalet TCP / IP w zakresie wydajności .


Zasadniczo więc nie ma to większego znaczenia, ale ogólnie zaleca się korzystanie z TCP, ponieważ nie ma powodów, aby wybierać nazwane potoki. Czy zgodziłbyś się z tym podsumowaniem?
usr

1
@usr Cóż, ma to znaczenie podczas skalowania lub w przypadku, gdy sieć jest do bani. Ale tak, ogólnie rzecz biorąc, nie ma żadnych rzeczywistych korzyści z wyboru nazwanych potoków, o których wiem.
Aaron Bertrand

7

Protokół Named Pipes jest przydatny w przypadku aplikacji zaprojektowanych w oparciu o NetBIOS lub inne protokoły oparte na sieci LAN.

Nazwane potoki zapewniają łatwy dostęp do zdalnych wywołań procedur (RPC) w ramach jednej domeny zabezpieczeń, a zatem są korzystne dla tych aplikacji.

Zwykle protokół TCP jest dobry w praktyce, ponieważ nie musisz się tym wszystkim przejmować w sieci.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.