Czy dane są pobierane z SQL Server kompresowane do transmisji?


20

Czy dane są pobierane z Microsoft SQL Server skompresowane? Jeśli jest to kontrolowane przez parametry połączenia, czy jest jakiś prosty sposób na stwierdzenie, czy używa go jakaś konkretna aplikacja?

Badam narzędzia analityczne, a przesyłanie danych przez sieć może zająć kilka minut. Zastanawiam się, czy powinienem oczekiwać wzrostu wydajności, jeśli ściągniemy dane ze skompresowanego magazynu danych na tym samym zdalnym serwerze.

Tak długo, jak zajmujemy się tym tematem, jestem ciekawy: czy dane są przesyłane w formacie binarnym czy ASCII? Na przykład, jeśli wartość 12345jest odpytywana z INTkolumny, czy jest przesyłana jako pięć bajtów 0x31, 0x32, 0x33, 0x34, 0x35; dwa bajty wymagane dla wartości; lub cztery bajty wymagane dla kolumny?

Dla jasności rozumiem, że istnieją opcje dotyczące przechowywania danych z kompresją i tworzenia kopii zapasowej. Pytam o sposób przesyłania danych.


Kompresja jest mechanizmem wewnętrznym. Strona jest kompresowana na dysku iw puli buforów, ale regularny strumień bajtów w przewodzie. @ShawnMelton pisał już na blogu o wąchaniu formatu drutu i mam nadzieję, że odpowie na najważniejsze informacje.
Mark Storey-Smith

To, co napisałem, koncentrowało się bardziej na tym, czy zostało zaszyfrowane. Mogłem wybrać dane, które pobierałem w czytelnym formacie, chociaż nie próbowałem wartości całkowitych. Jedynym sposobem, aby się upewnić, jest konfiguracja i wypróbowanie: mssqltips.com/sqlservertip/2436/…
Shawn Melton

@ MarkStorey-Smith: Więc odpowiedź brzmi „nie”, dane nie są kompresowane? Szkoda, ale pomaga wyjaśnić, dlaczego tak duże zapytania mogą trwać tak długo. Wygląda na to, że potrzebuję fizycznie bliższej pamięci podręcznej. Jeśli chcesz zrobić z tego prawdziwą odpowiedź, zaakceptuję ją.
Jon of All Trades

@ShawnMelton: To z pewnością brzmi jak właściwy sposób, po prostu nie mam wystarczającego tła sieciowego, aby przejść do właściwej warstwy i być pewnym tego, co widzę. Na szczęście dla mnie są ludzie, którzy mają więcej umiejętności i więcej czasu!
Jon of All Trades

Odpowiedzi:


16

Dane, które chcesz skompresować, są przesyłane przewodowo przez TDS . Występuje tutaj niewielka kompresja, ale nigdzie w pobliżu rodzaju kompresji uzyskiwanej w przypadku kompresji strony / wiersza, kompresji kopii zapasowej lub kompresji ColumnStore.

Został on wcześniej zapytany:

http://connect.microsoft.com/SQLServer/feedback/details/412131/enable-network-compression-compress-tds-stream

http://connect.microsoft.com/SQLServer/feedback/details/377479/wan-compression-option

Przedmioty są nadal otwarte, więc może jest jakaś nadzieja. Nie ma sposobu, aby to kontrolować za pomocą ciągu połączenia, który kiedykolwiek widziałem.

W międzyczasie istnieją produkty, które twierdzą, że to robią, np

http://www.nitrosphere.com/products/nitroaccelerator/

http://toonel.net/tcpany.htm

Możesz także potencjalnie skonfigurować sieć między serwerem SQL Server a serwerami aplikacji, aby obsługiwała kompresję (i inne rzeczy, takie jak szyfrowanie), ale jesteś poza moim zakresem, a nie jestem pewien, czy byłoby to obsługiwane przez każdą funkcję SQL Serwer.

I szczerze mówiąc, nie jestem przekonany, że to miejsce, na którym chcesz się skupić na optymalizacji. Kompresowanie tego strumienia może faktycznie spowolnić proces i przeważyć korzyści wynikające z wysłania mniejszej liczby bajtów. Wolę poświęcić pieniądze na lepszą łączność sieciową między serwerem a klientem (klientami) niż poświęcać czas na inwestowanie w tego rodzaju pracę i testowanie, czy przynosi to jakieś rzeczywiste korzyści - i nie będę w stanie tego zrobić do tego czasu. Od 10/100 do gigabajtów światłowód ma znany i przewidywalny wpływ na sieciowe operacje we / wy.


Nie jestem pewien formatu bajtów przesyłanych przewodowo; będziesz musiał skonfigurować do tego jakiś rodzaj sniffera pakietów (a może ktoś już to zrobił i włączy się).

Jeśli chodzi o wpływ kompresji, o ile nie korzystasz z Fusion-IO lub innych zaawansowanych rozwiązań typu SSD, prawie na pewno jesteś obecnie związany I / O, a nie procesorem. Tak długo, jak masz narzut procesora, powinieneś widzieć większą wydajność z włączoną kompresją (ale to nie zmieni wydajności sieci , ponieważ dane są nieskompresowane przed transmisją). Mówię, że nie wiedząc nic o twoich serwerach, aplikacji, danych lub wzorcach użytkowania - możesz mieć bardzo dobry przypadek, w którym kompresja faktycznie szkodzi wydajności lub gdzie dane po prostu nie są dobrym kandydatem na dobre współczynniki kompresji.


Zdecydowanie problem stanowi sieć, przynajmniej przy przesyłaniu 10 MB. Mogę wyszukiwać dane w ciągu kilku sekund na samym serwerze w RDP, ale wspomniany serwer jest fizycznie poza stanem, więc kopiowanie danych na komputer w lokalizacji biznesowej - przez proste operacje na plikach lub przez wysyłanie zapytań z komputera lokalnego do mnie - zajmuje minuty.
Jon of All Trades

Może powinieneś powielić, wykonać kopię lustrzaną lub coś innego i zapytać dane lokalnie z kopii. W ten sposób użytkownicy końcowi nie odczuwają opóźnienia. To, jak podejdziesz do tego, zależy od tego, jak świeże muszą być dane. A także, czy naprawdę potrzebujesz użytkownika końcowego, aby wysłać zapytanie do 10 MB danych jednocześnie.
Aaron Bertrand

Dokładnie. Chyba że możemy przenieść serwer BI. Jeśli chodzi o ilość danych, to jest ono wykorzystywane do analizy (za pomocą QlikView, ATM), a więc lat danych i wielu wymiarów i faktów. Pliki mają rozmiar do 100 MB z kompresją, a to tylko dane z kilku lat!
Jon of All Trades

@JonofAllTrades Oznacza najlepsze intencje ... wygląda na to, że próbujesz rozwiązać niewłaściwy problem za pomocą niewłaściwego rozwiązania.
Mark Storey-Smith

@ MarkStorey-Smith: Jaka jest alternatywa? Istnieje wiele danych i dostęp do nich jest wolny w całej sieci WAN. Jak wspomina Aaron, pomoże jakiś rodzaj lokalnej pamięci podręcznej. Ograniczenie ilości przesyłanych danych ograniczyłoby zakres analizy użytkowników, co zniweczyło cel wizualnego odkrywania danych.
Jon of All Trades

4

Czy dane są pobierane z Microsoft SQL Server skompresowane? Jeśli jest to kontrolowane przez parametry połączenia, czy jest jakiś prosty sposób na stwierdzenie, czy używa go jakaś konkretna aplikacja?

Technicznie wyniki można bardzo nieznacznie skompresować .

Tabelaryczny strumień danych (TDS) 7.3B - po raz pierwszy obsługiwany przez SQL Server 2008 R2 - wprowadził coś, co nazywa się kompresją bitmapy zerowej, która pozwala na przesyłanie wierszy zawierających wiele wartości zerowych przy użyciu mniejszej liczby bajtów niż zwykle wymagane przez wartości pola zerowego.

Serwer może mieszać zwykłe wiersze z wierszami skompresowanymi o pustej mapie bitowej według własnego wyboru, gdy wysyła wyniki. Klient nie ma nad tym kontroli, więc nie są dostępne odpowiednie opcje konfiguracji po stronie klienta.

Bitmapa zerowa jest jedyną formą kompresji obsługiwaną obecnie przez TDS. Jeśli wiersz nie jest skompresowany z zerową bitmapą, jest wysyłany bez kompresji.

Tak długo, jak zajmujemy się tym tematem, jestem ciekawy: czy dane są przesyłane w formacie binarnym czy ASCII?

Kolumny z nietekstowymi typami danych są przesyłane w formacie binarnym określonym przez protokół TDS .


2

Jak wspomniano w innym miejscu , w celu obejścia tego problemu można rozważyć skonfigurowanie sieci VPN i włączenie kompresji.

Jak powiedzieli inni, nie ma wbudowanej kompresji w SQL Server TDS Protocol. Warto również powiedzieć, że domyślnie nie ma też szyfrowania. Aby włączyć szyfrowanie, musisz użyć certyfikatów i określić je w ciągach połączeń.

Najłatwiejszym rozwiązaniem obu problemów jest otwarcie tunelu VPN z włączonym szyfrowaniem i kompresją. Prosty Microsoft PPTP rozwiązuje oba problemy i jest łatwy w konfiguracji.


1

Dlaczego nie skonfigurować lokalnej instancji SQL, która buforuje odpowiednie dane i synchronizuje co n godzin? Inną rzeczą, na którą warto spojrzeć, jest obliczenie kostek i posiadanie przycisku „zobacz szczegóły” po dotarciu do komórki podsumowania. Spowoduje to pobranie tylko odpowiednich szczegółowych wierszy.


Twoje pierwsze zdanie brzmi bardzo podobnie do tego komentarza .
Aaron Bertrand
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.