Příznaky
Jde o takovouto situaci:
-
Propojený server je nakonfigurován mezi místním serveru a vzdáleného serveru, že obě instance serveru Microsoft SQL Server 2012.
-
Místní server je nakonfigurován pomocí jednoho řazení, jako jsou malá a velká písmena řazení.
-
Na vzdáleném serveru je objekt, který je konfigurován v různé řazení z místního serveru, jako jsou malá a velká písmena řazení.
-
Připojení z Microsoft JDBC ovladače SQL Server ovladač Microsoft ODBC pro SQL Server, zprostředkovatele SQL OLE DB nebo nativního klienta SQL na místní server.
-
Ovladač provede dotaz Transact-SQL aktualizace jako připravený příkaz, který volá sp_prepexec uložené procedury na místním serveru.
-
Dotaz aktualizuje tabulku na vzdáleném serveru. Jedná se o sloupce objektu, který používá různé řazení z místního serveru.
V tomto scénáři může dojít pomalý výkon zpracování dotazu. Můžete zkontrolovat plán spuštění aktualizačního dotazu, se může zobrazit, že je vzdálené kontroly provedeny v tabulce na vzdáleném serveru bez filtrování. Proto dotaz může provést mnoho čtení, když skenuje vzdálené tabulky a potom načte všechny řádky na místní server.
Například dotaz je připraven na místním serveru, který má výchozí řazení malá a velká písmena a na vzdáleném serveru je tabulka T1 , která obsahuje sloupce, které jsou malá a velká písmena. Update prohledá všechny řádky 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 @p1Příčina
K problému dochází, protože je připraven aktualizační dotaz prohledá vzdálené tabulky při řazení neodpovídá na obou serverech.
Řešení
Po instalaci opravy hotfix, musíte povolit příznak trasování 4199 na místním serveru, který je hostitelem propojený server. Jak povolit traceflag, naleznete v části Další informace.
Poznámka: Tato oprava hotfix se vztahuje pouze na místní server, který je hostitelem propojený server a optimalizuje připravených příkazů. Tato oprava hotfix se nevztahuje na vzdáleném serveru. Tento problém byl poprvé opraven v následující kumulativní aktualizace serveru SQL Server.Kumulativní aktualizace 6 pro SQL Server 2012 SP1/en-us/help/2874879
Každé nové kumulativní aktualizace pro SQL Server obsahuje všechny opravy hotfix a všechny opravy zabezpečení, které byly součástí předchozí kumulativní aktualizace. Rezervovat nejnovější kumulativní aktualizace pro SQL Server:
Informace o opravě hotfixSpolečnost Microsoft má k dispozici podporovanou opravu hotfix. Tato oprava hotfix je však určena pouze problému popsanému v tomto článku. Použití této opravy hotfix pouze u systémů, ve kterých dochází k tomuto konkrétnímu problému.
Pokud je oprava hotfix k dispozici ke stažení, je v horní části tohoto článku znalostní báze Knowledge Base oddíl "Oprava Hotfix je dostupná ke stažení" . Pokud tento oddíl není uveden, odešlete požadavek na Microsoft Zákaznický servis a podporu k získání opravy hotfix. Poznámka: Pokud nastanou další problémy nebo bude nutné další řešení potíží, bude možná třeba vytvořit další samostatný požadavek na služby. Běžná cena za technickou podporu se vztahuje k dodatečným otázkám podpory a k problémům, které se netýkají této konkrétní opravy hotfix. Úplný seznam telefonních čísel služeb zákazníkům společnosti Microsoft a podpoře nebo vytvořit zvláštní požadavek na službu navštivte následující web společnosti Microsoft:http://support.microsoft.com/contactus/?ws=supportPoznámka: Ve formuláři „Oprava hotfix je dostupná ke stažení“ se zobrazují jazyky, pro které je oprava hotfix k dispozici. Pokud váš jazyk není zobrazen, to je protože oprava hotfix není k dispozici pro daný jazyk.
PředpokladyChcete-li nainstalovat tuto opravu hotfix, musíte mít nainstalován SQL Server 2012.
Informace o registrechNemáte změna registru po použití této opravy hotfix.
Informace o nahrazení opravy hotfixTato oprava hotfix nenahrazuje žádné další opravy hotfix.
Stav
Společnost Microsoft potvrdila, že se jedná o problém v produktech společnosti Microsoft, které jsou uvedeny v části "Platí pro".
Jak potíže obejít
Chcete-li pracovat abound problém, použijte jednu z následujících metod:
-
Nepoužívejte připravených příkazů ve zdrojovém kódu aplikace klienta. Můžete ad hoc příkazy nebo příkazy callable například uložené procedury namísto Pokud ovladač podporuje tato rozhraní.
-
Na obou serverech použijte odpovídající řazení.
Další informace
Chcete-li povolit příznak trasování, přidat spouštěcí parametr -T4199 nebo DBCC TRACEON(4199,-1) před zkompilován připravený příkaz povolit chování.
Chcete-li povolit příznak trasování můžete použít jednu z následujících metod:-
Před spuštěním serveru SQL Server, použít Microsoft SQL Server Správce konfigurace, klepněte pravým tlačítkem myši příslušné instance a přidat spouštěcí parametr -T4199 tak, aby v budoucnu zůstává různé restartuje a všechna připojení k instanci.
-
Dynamicky povolit nastavení za běhu, jakmile získá služba spuštěna a globálně pro všechna připojení "(-1)." Ujistěte se, že bez mezipaměti postup, pokud máte v úmyslu provést zkoušení s přepínačem zapnuto nebo vypnuto.
Chcete-li povolit nastavení použít následující globálně a dynamicky: DBCC TRACEON(4199,-1)DBCC TRACESTATUS(-1) DBCC FREEPROCCACHE Můžete použít následující nastavení zakázat globálně a dynamicky: DBCC TRACEOFF(4199,-1)DBCC TRACESTATUS(-1) DBCC FREEPROCCACHE