Czy zapytania między bazami danych są drogie w SQL Server?


15

Czy zapytania między bazami danych są drogie w SQL Server? Wszystkie bazy danych znajdują się w tej samej instancji.


3
Nigdy nie znalazłem żadnych dowodów, że są, nie. Jedynymi wyjątkami, o których nawet mogłem pomyśleć (ale nie przetestowałem), jest (a) że optymalizator nie może skorzystać z relacji, które nie mogą być jednoznaczne (np. Może skorzystać z definicji klucza obcego, które nie mogą istnieć krzyżowo -bazy danych) lub (b) występują problemy ze statystykami stanowiącymi problem w stosunku do połączonych serwerów, ale wyobrażam sobie, że mogą istnieć przypadki, w których nawet w bazie danych użytkownik uruchamiający zapytanie nie widzi statystyk. Nie wiem, czy (b) jest prawdziwe, czy nie - nie testowałem, po prostu wiedz, że może to być poważny problem na różnych serwerach.
Aaron Bertrand

2
Jestem z @AaronBertrand na tym, nie widziałem niczego, co stanowczo powiedziałoby, że jest ogromny hit. Jedyną rzeczą, o której pomyślałbym, że dodałbym coś do równania, byłaby prawdopodobnie jakaś forma operacji uwierzytelniania, ale wątpiłbym w to, by była znacząca. To tylko ja myślę głośno, nie jestem pewien. Najlepszym rozwiązaniem byłoby skonfigurowanie automatycznego testu / testu porównawczego z bazą danych między bazami, a następnie z tą samą kwerendą między bazami danych i uruchomienie tego testu tysiące razy. Uzyskaj średnią, maksimum itp. I na tej podstawie podejmij decyzję.
Thomas Stringer,

1
@ thomas, czy ostatecznie widzisz różnicę, patrząc na aktualne plany zapytań?
Max Vernon

@Jathanathan: definicja „drogi” odnosi się do alternatyw. Więc co próbujesz zrobić i co wybierzesz? Bez dodatkowych informacji jest całkiem możliwe, aby uzyskać odpowiedź, która wydaje się poprawna na to pytanie według wartości nominalnej, ale jednocześnie jest całkowicie niewłaściwa dla twojej sytuacji. Wszystko ma swój koszt, ale ten koszt może być tani lub drogi, w zależności od tego, z czym go porównujesz. A koszty zapytań (tj. Czas, spór itp.) Należy
porównać

Chciałbym poznać koszt w porównaniu do zapytania w tej samej tabeli.
Jonathan Allen

Odpowiedzi:


6

Niestety nie mam wystarczającej reputacji, aby skomentować to pytanie, ale z mojego doświadczenia wynika, że ​​jeśli aplikacja kliencka zgłosi transakcję dla zapytania korzystającego z połączeń między bazami danych, wówczas promocja transakcji zostanie rozproszona i narzut związany z transakcją DTC .

Narzut DTC w tym przypadku można uznać za negatywny w stosunku do wydajności. Zasadniczo różnica byłaby nieistotna, chociaż Microsoft opisuje transakcje DTC jako takie:

Transakcje rozproszone zwykle pochłaniają znaczne zasoby systemowe

Promocja transakcji

... co sugeruje spadek wydajności, jeśli Twój serwer nie jest w stanie zaoferować wymaganych zasobów.

Aby wyjaśnić, powyższy artykuł opisuje lokalne transakcje promowane po wprowadzeniu systemów zdalnych, ale widziałem, że stało się tak w przypadku transakcji na tym samym serwerze, gdy używane są zapytania między bazami danych.

Jak zauważył Thomas Stringer w swoim komentarzu, uwierzytelnienie będzie wiązało się z dodatkowymi kosztami, chociaż myślę, że ponieważ będzie to oparte na SID, będzie tam narzut minimalny, chyba że będziesz musiał użyć oddzielnych poświadczeń, aby uzyskać dostęp do innej bazy danych.

Jeśli wystąpiły różnice w ustawieniach bazy danych, które spowodowały dodatkowy narzut w łączeniu, który mógłby mieć większy wpływ niż poprzednie sugestie - na przykład sortowanie bazy danych. Sortowanie bazy danych może objawiać się jako różnica funkcjonalna, a nie tylko różnica wydajności.

Myślę, że Aaron ma najsilniejszy argument za wydajnością, ponieważ optymalizator nie ma przewagi w korzystaniu z relacji w zapytaniach między bazami danych, podczas gdy samowystarczalny w bazie danych można wykorzystać relacje na swoją korzyść.



1
Artykuł dotyczący promocji transakcji dotyczy transakcji CLR.
stacylaray

-2

W SQL Server 2014 tabele zoptymalizowane pod kątem pamięci nie obsługują transakcji między bazami danych. Nie można uzyskać dostępu do innej bazy danych z tej samej transakcji lub tego samego zapytania, które również uzyskuje dostęp do tabeli zoptymalizowanej pod kątem pamięci. Nie można łatwo skopiować danych z tabeli w jednej bazie danych do tabeli zoptymalizowanej pod kątem pamięci w innej bazie danych. http://msdn.microsoft.com/en-us/library/dn584627(v=sql.120).aspx Transakcje rozproszone i między bazami danych nie są obsługiwane dla kopii lustrzanych baz danych / AOAG. http://technet.microsoft.com/en-us/library/hh393530.aspx . Jeśli zamierzasz korzystać z łańcucha własności, pamiętaj o zagrożeniach bezpieczeństwa http://msdn.microsoft.com/en-us/library/ms188676.aspx


Dotyczy to tylko scenariuszy, w których „zasoby obejmują wiele instancji lub serwerów”. W tym przypadku mówimy o pojedynczym wystąpieniu z wieloma bazami danych.
Jonathan Allen

1
Mój zły ... Brakowało mi części o tym, że jest w tym samym przypadku
stacylaray
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.