Poprawka: Niska wydajność na serwer połączony programu SQL Server 2012 podczas aktualizacji danych wraz z różnych sortowanie na serwerze zdalnym

Nr błędu: 190237 (Obsługa zawartości) programu VSTS: 1427743

Objawy

Rozważ następujący scenariusz:

  • Serwer połączony jest skonfigurowane między serwera lokalnego i zdalnego serwera, że oba muszą wystąpienia programu Microsoft SQL Server 2012.

  • Lokalny serwer jest skonfigurowany przy użyciu jednego sortowanie, takich jak sortowanie bez uwzględniania wielkości liter.

  • Zdalny serwer ma obiekt, który jest skonfigurowany w różnych sortowanie z lokalnego serwera, takich jak sortowanie z uwzględnieniem wielkości liter.

  • Nawiązaniu połączenia ze sterownika JDBC firmy Microsoft dla programu SQL Server, sterownik Microsoft ODBC dla programu SQL Server, dostawcy SQL OLE DB lub SQL Native Client do serwera lokalnego.

  • Sterownik wykonuje zapytanie języka Transact-SQL update jako gotowa instrukcja, która wywołuje procedurę sp_prepexec przechowywane na lokalnym serwerze.

  • Kwerenda jest aktualizowana tabela na serwerze zdalnym. Obejmuje to obiekt kolumny, który używa różnych sortowanie z lokalnego serwera.

W tym scenariuszu może wystąpić niska wydajność wykonywania zapytania. Jeśli zaznaczysz plan wykonania kwerendy aktualizującej, możesz zobaczyć, że zdalne skanowanie jest wykonywane w tabeli, w serwerze zdalnym bez filtrowania. Kwerenda może wykonywać wiele odczytów, gdy skanuje tabeli zdalnej i następnie pobiera wszystkie wiersze do serwera lokalnego.

Na przykład kwerenda jest przygotowany na serwerze lokalnym, który ma sortowanie domyślne bez uwzględniania wielkości liter, a serwer zdalny ma tabeli T1 zawiera kolumnę, która jest uwzględniana wielkość liter. Aktualizacja skanuje wszystkie wiersze tabeli T1.
DECLARE @p1 INTEXEC sp_prepexec @p1 output, N'@P0 NVARCHAR(16), @P1 NVARCHAR(16)',
N'UPDATE RemoteServer.RemoteDatabase.dbo.T1 SET COL1=@P0 WHERE COL2=@P1',
N'a', N'a'
SELECT @p1

Przyczyna

Ten problem występuje, ponieważ kwerendy aktualizującej przygotowany skanuje tabeli zdalnej podczas sortowania nie pasuje na obu serwerach.

Rozwiązanie

Po zastosowaniu tej poprawki należy włączyć flagę śledzenia 4199 na serwerze lokalnym, który jest hostem serwera połączonego. Jak włączyć traceflag, można znaleźć w sekcji więcej informacji.

Uwaga: Poprawka dotyczy tylko na serwerze lokalnym, obsługujący serwer połączony i optymalizuje przygotowanych instrukcji. Tej poprawki nie ma zastosowania do zdalnego serwera.

Ten problem został po raz pierwszy rozwiązany w następujących aktualizacji zbiorczej programu SQL Server.

Zbiorcza aktualizacja 6 dla dodatku SP1 dla programu SQL Server 2012/en-us/help/2874879

Każda nowa aktualizacja zbiorcza dla programu SQL Server zawiera wszystkie poprawki i wszystkie poprawki zabezpieczeń, które zostały zawarte w poprzedniej zbiorczej aktualizacji. Sprawdź najnowsze aktualizacje zbiorcze dla programu SQL Server:


Informacje o poprawceObsługiwana poprawka jest udostępniana przez firmę Microsoft. Jednak ta poprawka jest przeznaczona tylko do usunięcia problemu opisanego w tym artykule. Tylko w systemach, których dotyczy ten problem, należy zastosować tę poprawkę.

Jeśli poprawka jest dostępna do pobrania, pojawi się sekcja "Poprawka dostępna do pobrania" na początku tego artykułu z bazy wiedzy Knowledge Base. Jeśli nie ma tej sekcji, należy przesłać żądanie do centrum obsługi klienta firmy Microsoft i obsługi technicznej w celu uzyskania poprawki.

Uwaga Jeśli wystąpią dodatkowe błędy lub konieczność rozwiązania problemu, być może trzeba będzie utworzyć osobne zlecenie usługi. Zwykłe koszty obsługi będą zastosowane do dodatkowych pytań i problemów, których nie można rozwiązać przy użyciu określonej poprawki. Aby uzyskać pełną listę numerów telefonów działu obsługi klienta firmy Microsoft lub utworzyć osobne zlecenie usługi odwiedź następujące witryny firmy Microsoft:

http://support.microsoft.com/contactus/?ws=supportUwaga "Poprawka dostępna do pobrania" zawiera listę języków, dla których dostępna jest poprawka. Jeśli odpowiedni język nie jest widoczny, to dlatego, że poprawka nie jest dostępna dla danego języka.

Wymagania wstępneAby zastosować tę poprawkę, musi mieć zainstalowany program SQL Server 2012.

Informacje dotyczące rejestruNie masz zmiany w rejestrze, po zastosowaniu tej poprawki.

Informacje dotyczące zastępowania poprawekTa poprawka nie zastępuje żadnych innych poprawek.


Poprawka umożliwia optymalizator programu SQL Server zezwolić na filtrowanie zdalnego, w którym klauzula where zostanie przypisany do serwera zdalnego zminimalizować wiersze źródło tabeli zdalnej plan wykonania.

Stan

Firma Microsoft potwierdziła, że jest to problem występujący w produktach firmy Microsoft wymienionych w sekcji „Dotyczy”.

Obejście problemu

Do pracy mnożą problemu, skorzystaj z jednej z następujących metod:

  • Nie należy używać przygotowanych instrukcji w kodzie źródłowym aplikacji klienta. Służy sprawozdań ad hoc lub nieopłacona instrukcji, takie jak procedury przechowywane w zamian, gdy sterownik obsługuje tych interfejsów.

  • Użyj dopasowania sortowanie na obu serwerach.

Więcej informacji

Aby włączyć flagę śledzenia, należy dodać parametr uruchamiania -T4199 lub DBCC TRACEON(4199,-1) przed gotowa instrukcja jest skompilowany w celu umożliwienia zachowanie.

Aby włączyć flagę śledzenia, można użyć jednej z następujących metod:

  • Przed rozpoczęciem programu SQL Server, użyj Menedżer konfiguracji Microsoft SQL Server, kliknij prawym przyciskiem myszy wystąpienie usterce i dodać parametr uruchamiania -T4199 tak, że utrzymuje się po ponownym uruchomieniu i przez wszystkie połączenia do wystąpienia w przyszłości.

  • Dynamicznie Włącz ustawienie w czasie wykonywania, gdy usługa zostanie uruchomiona i globalnie dla wszystkich połączeń "(-1)." Pamiętaj zwolnić pamięć podręczna procedury, jeżeli masz zamiar zrobić testów z przełącznikiem włączony lub wyłączony.

    Aby włączyć ustawienie za pomocą następujących globalnie i dynamicznie:
    DBCC TRACEON(4199,-1)DBCC TRACESTATUS(-1)
    DBCC FREEPROCCACHE
    Aby wyłączyć ustawienie za pomocą następujących globalnie i dynamicznie:
    DBCC TRACEOFF(4199,-1)DBCC TRACESTATUS(-1)
    DBCC FREEPROCCACHE


Autor: jannaw, jasonh
Scenariusz: v-shysun
Weryfikacja tech.: jasonh; jayc; makohli; jannaw; sqlprev
Redaktor: v-mordew

Potrzebna dalsza pomoc?

Rozwijaj swoje umiejętności
Poznaj szkolenia
Uzyskuj nowe funkcje w pierwszej kolejności
Dołącz do niejawnych testerów firmy Microsoft

Czy te informacje były pomocne?

Dziękujemy za opinię!

Dziękujemy za opinię! Wygląda na to, że połączenie Cię z jednym z naszych agentów pomocy technicznej pakietu Office może być pomocne.

×