Společnost Microsoft distribuuje aktualizace Microsoft SQL Server 2008 R2 Service Pack 1 (SP1) nebo Microsoft SQL Server 2012 v jednom souboru ke stažení. Protože jsou opravy kumulativní, každá nová verze obsahuje všechny opravy hotfix a všechny aktualizace zabezpečení, které byly součástí předchozí verze systému SQL Server 2008 R2 Service Pack 1 (SP1) nebo aktualizace SQL Server 2012 Update.

Příznaky

Zvažte následující scénář. Spustíte dotaz v Microsoft SQL serveru 2008 R2 nebo Microsoft SQL serveru 2012 a Optimalizátor dotazů generuje plán provádění, který obsahuje operátor top. V tomto scénáři může spuštění dotazu trvat velmi dlouho. Můžete třeba spustit dotaz podobný následujícímu:

SELECT TableA.Col1 FROM TableA JOIN TableB ON TableA.Col1 = TableB.Col1 WHERE TableA.Col2 = N'A' AND TableB.Col3 IN (SELECT Col1 FROM TableC )Tento dotaz zahrnuje dvě spojení. Jedno spojení je mezi TableB a TableC. (Toto je implicitní přítomnost predikátu IN.) Druhé spojení je mezi tabulkou a a výsledkem prvního spojení. Predikát IN vrátí hodnotu true, pokud dotaz najde aspoň jeden řádek, který splňuje první predikát JOIN. Optimalizátor dotazů proto přidá operátor top v plánu spuštění dotazu. Takový dotaz může vrátit pouze několik řádků. Tento dotaz ale může trvat déle, než by se dalo očekávat. V aktuálním plánu spuštění dotazu se odhadovaný počet řádků významně liší od skutečného počtu řádků. To má vliv na schopnost optimalizátoru dotazů přesně odhadnout náklady pro různé možnosti plánu. K problému může dojít také v případě, že používáte operátor TOP explicitně nebo pokud používáte některý z následujících operátorů:

  • OPTION (FAST N)

  • PŘIHLÁŠENÍ

  • DOCHÁZÍ

Řešení

Informace o kumulativní aktualizaci

SQL Server 2008 R2 Service Pack 2

Oprava pro tento problém byla poprvé vydána v kumulativní aktualizaci 1 pro SQL Server 2008 R2 Service Pack 2. Další informace o tom, jak získat tento kumulativní balíček aktualizací, najdete v následujícím článku znalostní báze Microsoft Knowledge Base:

2720425 Kumulativní aktualizace 1 pro SQL Server 2008 R2 Service Pack 2Poznámka Vzhledem k tomu, že buildy jsou kumulativní, každá nová oprava obsahuje všechny opravy hotfix a všechny opravy zabezpečení, které byly součástí předchozího SQL serveru 2008 R2 fix release. Doporučujeme zvážit použití nejnovější opravy, která obsahuje tuto opravu hotfix. Další informace naleznete v následujícím článku znalostní báze Microsoft Knowledge Base:

2730301 Sestavení SQL Server 2008 R2, která byla vydána po SQL serveru 2008 R2 Service Pack 2, byla vydána

SQL Server 2008 R2 Service Pack 1

Oprava pro tento problém byla poprvé vydána v kumulativní aktualizaci 7 pro SQL Server 2008 R2 Service Pack 1. Další informace o tom, jak získat tento kumulativní balíček aktualizací, najdete v následujícím článku znalostní báze Microsoft Knowledge Base:

2703282 Kumulativní balíček aktualizací 7 pro SQL Server 2008 R2 Service Pack 1Poznámka Vzhledem k tomu, že buildy jsou kumulativní, každá nová oprava obsahuje všechny opravy hotfix a všechny opravy zabezpečení, které byly součástí předchozího SQL serveru 2008 R2 fix release. Doporučujeme zvážit použití nejnovější opravy, která obsahuje tuto opravu hotfix. Další informace naleznete v následujícím článku znalostní báze Microsoft Knowledge Base:

2567616 Sestavení SQL Server 2008 R2, která byla vydána po SQL serveru 2008 R2 Service Pack 1, byla vydána

SQL Server 2012

Oprava pro tento problém byla poprvé vydána v kumulativní aktualizaci 2 pro SQL Server 2012. Další informace o tomto kumulativním balíčku aktualizací najdete v následujícím článku znalostní báze Microsoft Knowledge Base:

2703275 Kumulativní aktualizace 2 pro SQL Server 2012Poznámka Vzhledem k tomu, že buildy jsou kumulativní, každá nová oprava obsahuje všechny opravy hotfix a všechny opravy zabezpečení, které byly součástí předchozího SQL serveru 2012 Oprava. Společnost Microsoft doporučuje zvážit použití nejnovější opravy, která obsahuje tuto opravu hotfix. Další informace naleznete v následujícím článku znalostní báze Microsoft Knowledge Base:

2692828 Buildy SQL Server 2012, které byly vydány po vydání SQL Server 2012 Na instalaci SQL serveru 2012 musíte použít opravu hotfix systému SQL Server 2012.

SQL Server 2008 R2

Oprava pro tento problém byla poprvé vydána v kumulativní aktualizaci 13. Další informace o tom, jak získat tento kumulativní balíček aktualizací pro SQL Server 2008 R2, najdete v následujícím článku znalostní báze Microsoft Knowledge Base:

2679366 Kumulativní aktualizace 13 pro SQL Server 2008 R2Poznámka Vzhledem k tomu, že buildy jsou kumulativní, každá nová oprava obsahuje všechny opravy hotfix a všechny opravy zabezpečení, které byly součástí předchozího SQL serveru 2008 R2 fix release. Doporučujeme zvážit použití nejnovější opravy, která obsahuje tuto opravu hotfix. Další informace naleznete v následujícím článku znalostní báze Microsoft Knowledge Base:

981356 Buildy SQL Server 2008 R2 vydaná po vydání SQL serveru 2008 R2Poznámka: Po instalaci kumulativní aktualizace byste měli zapnout příznak trasování 4199 a povolit opravu poskytovanou touto kumulativní aktualizací, pokud jsou splněny následující podmínky:

  • V plánu dotazů se nachází operátor TOP nad vnořeným operátorem spojení smyček (JOIN 1) na pravé straně jiného operátoru Apply/Join (spojení 2).

  • Vnější strana spojení 1 má vnější odkaz na vnější stranu spojení 2.

  • Spojení 1 používá predikát rovnosti na levém sloupci, který je jedinečný.

V části Příznaky se zobrazí příklad takového dotazu. (Předpokládá se, že v databázi existují nějaká omezení jedinečnosti.) Pokud existují další dotazy, které obsahují funkce TOP, OPTION (FAST N), IN nebo EXISTS operátory a vytvářejí podobné příznaky, ale neodpovídají zde popsanému vzoru, zapněte příznak Trace 4138.Upozornění Pokud povolíte příznak trasování 4138, může dojít ke snížení výkonu některých dalších dotazů, které obsahují funkce TOP, OPTION (FAST N), IN nebo EXISTS Operators. Příznak Trace 4138 by se měl používat jenom v případě, že jsou splněné následující podmínky:

  • Jeho účinek na pomalé dotazy zahrnující tyto operátory jsou potvrzené.

  • Neexistují žádná další alternativní řešení.

  • V jiných dotazech, které obsahují podobné operátory, se nezjistily žádné regrese.

Stav

Společnost Microsoft potvrzuje, že se jedná o problém v produktech této společnosti, které jsou uvedeny v části Informace v tomto článku jsou určeny pro produkt.

Řešení

Tento problém vyřešíte pomocí levého operátoru VNĚJŠÍho spojení nebo několika rad pro optimalizaci.

Potřebujete další pomoc?

Rozšiřte své znalosti a dovednosti
Projít školení
Získejte nové funkce jako první
Připojit se k programu Microsoft Insider

Byly tyto informace užitečné?

Jak jste spokojeni s kvalitou jazyka?
Co ovlivnilo váš názor?

Děkujeme vám za zpětnou vazbu.

×