Spoločnosť Microsoft distribuuje opravy balíka Microsoft SQL Server 2012 v jednom súbore na stiahnutie. Keďže opravy sú kumulatívne, každé nové vydanie obsahuje všetky rýchle opravy a všetky aktualizácie zabezpečenia, ktoré boli súčasťou predchádzajúceho vydania aktualizácie SQL Server 2012.
Príznaky
Zvážte nasledujúci scenár:
-
V programe Microsoft SQL Server 2012 vytvoríte uloženú procedúru, ktorá používa parameter TVP (table-valued parameter).
-
Sql Profiler alebo SQL Server Extended Events sa používajú na zaznamenanie udalostí RPC:Starting a RPC:Completed.
-
Spustíte dotaz, ktorý používa TVP.
-
Časový limit dotazu uplynul.
V tomto scenári sa vyskytne chyba nenáročného plánovača a dotazy spustené v tom istom plánovači sa spúšťajú pomaly. Okrem toho sa v priečinku denníka SQL Server vygeneruje mini-dump súbor.Keď sa vyskytne tento problém, zobrazí sa chybové hlásenie podobné nasledujúcemu:
System.Data.SqlClient.SqlException (0x80131904): Uplynul časový limit. Časový limit uplynul pred dokončením operácie alebo server neodpovedá.at System.Data.SqlClient.SqlInternalConnection.OnError(výnimka SqlException, Boolean breakConnection)na lokalite System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning()na lokalite System.Data.SqlClient.TdsParserStateObject.ReadSniError(TdsParserStateObject stateObj, Chyba UInt32)na lokalite System.Data.SqlClient.TdsParserStateObject.ReadSni(DbAsyncResult asyncResult, TdsParserStateObject stateObj)na lokalite System.Data.SqlClient.TdsParserStateObject.ReadNetworkPacket()at System.Data.SqlClient.TdsParserStateObject.ReadByte()at System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj)at System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString)at System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async)at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, DbAsyncResult result)at System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery(DbAsyncResult result, String methodName, Boolean sendToPipe)at System.Data.SqlClient.SqlCommand.ExecuteNonQuery()at TVPApp.Program.Main(String[] args)
Chyba nenáročného plánovača spolu s chybovým hlásením, ktoré pripomína nasledujúce hlásenie, sa zapíše do denníka chýb SQL Server:
<><<dátumu>> server s dbghelp.dll verziou 4.0.5<Dátum><Čas> Server ***Nie je možné získať kontext vlákna pre spid #<Dátum><Čas> Server * *******************************************************************************><2 ******************************************************************************* Dátumový><časový> server *><6 Server dátumu><času> * VÝPIS ZAČIATOK ZÁSOBNÍKA:><0 Server dátumu><času> * <><> dátumu>><8 dátumu><času> server *><2 Date><Time> Server * Non-yielding Scheduler><6 Date><Time> Server *<Date><Time> Server * *******************************************************************************<Date><Time> Server Stack Signature for the dump is 0x000000000000002C<Date><Time> Server External dump process return code 0x20000001.Proces externého výpisu nevrátil žiadne chyby.<Dátum><čas> server proces 0:0:0 (0x1670) Pracovná 0x0000000004EDE160 zdá byť non-dávať scheduler 5. Čas vytvorenia vlákna: 13014210386757. Použité cca Thread CPU: kernel 0 ms, používateľ 70106 ms. Využitie procesu 16 %. Nečinný systém 77%. Interval: 70140 ms.<Dátum><čas> server proces 0:0:0 (0x1670) Pracovná 0x0000000004EDE160 zdá byť non-dávať scheduler 5. Čas vytvorenia vlákna:
Príčina
Tento problém sa vyskytuje z dôvodu chyby v databázovom stroji SQL Server 2012. Textové stĺpce v TVP sa implementujú ako vložené reťazce alebo medzipamäte a nárast počtu riadkov zvyšuje počet medzipamätí. Proces, ktorý uvoľňuje medzipamäte, je však časovo náročný. Preto sa pri uvoľnení a zmenšovaní operácií vygeneruje chyba neprodukujúceho plánovača. Poznámka: Podobný problém bol vyriešený v nasledujúcom článku databázy Microsoft Knowledge Base. Kumulatívny balík aktualizácie, ktorý je popísaný v článku, však nie je pre problém s časovým výkazom dotazu.
2520808 OPRAVA: Chyba nepodania plánovača pri spustení dotazu, ktorý používa TVP v SQL Server 2008 alebo v SQL Server 2008 R2, ak sa používa SQL Profiler alebo SQL Server Rozšírené udalosti
Riešenie
Informácie o kumulatívnej aktualizácii
Kumulatívny balík aktualizácie 5 pre SQL Server 2012 Service Pack 1 (SP1)
Oprava tohto problému bola prvýkrát vydaná v kumulatívnej aktualizácii 5. Ďalšie informácie o tom, ako získať tento balík kumulatívnej aktualizácie pre SQL Server 2012, získate kliknutím na toto číslo článku v databáze Microsoft Knowledge Base:
2861107 Kumulatívny balík aktualizácií 5 pre SQL Server 2012Note, pretože zostavy sú kumulatívne, každé nové vydanie opravy obsahuje všetky rýchle opravy a všetky opravy zabezpečenia, ktoré boli súčasťou predchádzajúceho vydania opravy SQL Server 2012. Odporúčame, aby ste zvážili použitie najnovšieho vydania opravy, ktoré obsahuje túto rýchlu opravu. Ďalšie informácie nájdete v článku databázy Microsoft Knowledge Base, ktorý sa zobrazí po kliknutí na príslušné číslo článku:
2772858 Zostavy SQL Server 2012, ktoré boli vydané po vydaní balíka Service Pack 1 SQL Server 2012
Alternatívne riešenie
Ak chcete obísť tento problém, použite jednu z uvedených metód:
-
Nepoužívajte SQL Profiler ani SQL Server Extended Events.
-
Kliknutím zrušte začiarknutie políčok RPC:Starting a RPC:Completed v definícii sledovania.
Stav
Spoločnosť Microsoft potvrdzuje, že ide o problém v produktoch spoločnosti Microsoft, ktoré sú uvedené v tomto článku v časti Informácie v tomto článku sa týkajú nasledujúcich produktov.