Firma Microsoft rozpowszechnia poprawki microsoft SQL Server 2012 w jednym pliku do pobrania. Ponieważ poprawki są zbiorcze, każda nowa wersja zawiera wszystkie poprawki i wszystkie aktualizacje zabezpieczeń, które zostały uwzględnione w poprzedniej wersji aktualizacji SQL Server 2012.
Symptomy
Rozpatrzmy następujący scenariusz:
-
W programie Microsoft SQL Server 2012 tworzy się procedurę składowaną z parametrem TVP (table-valued parameter).
-
Zdarzenia RPC:Starting i RPC:Completed można przechwytywać za pomocą profilera SQL lub SQL Server zdarzeń rozszerzonych.
-
Uruchamiasz zapytanie używające tvp.
-
Limit czasu kwerendy.
W tym scenariuszu występuje błąd harmonogramu bez rentowności, a zapytania uruchomione na tym samym harmonogramie działają powoli. Ponadto w folderze dziennika SQL Server jest generowany plik mini-zrzutu.W przypadku wystąpienia tego problemu jest wyświetlany komunikat o błędzie podobny do następującego:
System.Data.SqlClient.SqlException (0x80131904): Limit czasu wygasł. Limit czasu upłynął przed zakończeniem operacji lub serwer nie odpowiada.w: System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection)at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning()w System.Data.SqlClient.TdsParserStateObject.ReadSniError(TdsParserStateObject stateObj, Błąd UInt32)w: System.Data.SqlClient.TdsParserStateObject.ReadSni(DbAsyncResult asyncResult, TdsParserStateObject stateObj)w: System.Data.SqlClient.TdsParserStateObject.ReadNetworkPacket()w: System.Data.SqlClient.TdsParserStateObject.ReadByte()w: 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)w: 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)
W dzienniku błędów SQL Server jest rejestrowany komunikat o błędzie podobny do następującego:
<serwer> godziny><daty przy użyciu serwera dbghelp.dll w wersji "4.0.5"<data><godzina> server ***Nie można uzyskać kontekstu wątku dla spid #<Date><Time> Server * *******************************************************************************><2 ******************************************************************************* Date><Time> Server *><6 Date><Time> Server * BEGIN STACK DUMP:><0 Date><Time> Server * <Date><> spid #><8 Date><Time> 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 code 0x20000001.Proces zrzutu zewnętrznego nie zwracał żadnych błędów.<0x0000000004EDE160> Server Process><Time 0:0:0 (0x1670) Worker 0x0000000004EDE160 wydaje się być nieodzyskająca w harmonogramie 5. Czas tworzenia wątków: 13014210386757. Używany procesor z wątkiem: jądro 0 ms, użytkownik 70106 ms. Wykorzystanie procesu 16%. Bezczynność systemu 77%. Interwał: 70140 ms.<0x0000000004EDE160> Server Process><Time 0:0:0 (0x1670) Worker 0x0000000004EDE160 wydaje się być nieodzyskająca w harmonogramie 5. Czas tworzenia wątku:
Przyczyna
Ten problem występuje z powodu błędu aparatu bazy danych SQL Server 2012. Kolumny tekstowe w programie TVP są implementowane jako ciągi wstawiania lub bufory, a zwiększenie liczby wierszy zwiększa liczbę buforów. Proces zwalniający bufory jest jednak czasochłonny. Dlatego podczas wykonywania operacji zwalniania i zmniejszania jest generowany błąd harmonogramu bez plonowania. Uwaga Podobny problem rozwiązano w następującym artykule z bazy wiedzy Microsoft Knowledge Base. Jednak pakiet aktualizacji zbiorczej opisany w tym artykule nie dotyczy problemu z limitem czasu kwerendy.
2520808 POPRAWKA: Błąd harmonogramu o niedochodowym po uruchomieniu zapytania używającego programu TVP w SQL Server 2008 lub w programie SQL Server 2008 R2, jeśli jest używany profiler SQL lub SQL Server zdarzeń rozszerzonych
Rozwiązanie
Informacje o aktualizacji zbiorczej
Pakiet aktualizacji zbiorczej 5 dla SQL Server 2012 z dodatkiem Service Pack 1 (SP1)
Poprawka rozwiązła ten problem została opublikowana po raz pierwszy w aktualizacji zbiorczej 5. Aby uzyskać więcej informacji na temat uzyskiwania tego zbiorczego pakietu aktualizacji dla SQL Server 2012, kliknij następujący numer artykułu, aby wyświetlić ten artykuł w bazie wiedzy Microsoft Knowledge Base:
2861107 Pakiet aktualizacji zbiorczej 5 dla SQL Server 2012Note Ponieważ kompilacje są zbiorcze, każda nowa wersja poprawki zawiera wszystkie poprawki i wszystkie poprawki zabezpieczeń, które zostały uwzględnione w poprzedniej wersji poprawki SQL Server 2012. Zalecamy rozważenie zastosowania najnowszej wersji poprawki zawierającej tę poprawkę. Aby uzyskać więcej informacji, kliknij następujący numer artykułu w celu wyświetlenia tego artykułu z bazy wiedzy Microsoft Knowledge Base:
2772858 Kompilacje SQL Server 2012, które zostały wydane po wydaniu dodatku Service Pack 1 SQL Server 2012
Obejście
Aby obejść ten problem, użyj jednej z następujących metod:
-
Nie należy używać profilera SQL ani zdarzeń rozszerzonych SQL Server.
-
Kliknij, aby wyczyścić pola wyboru RPC:Starting i RPC:Completed w definicji śledzenia.
Stan
Firma Microsoft potwierdziła, że jest to problem w produktach firmy Microsoft wymienionych w sekcji "Dotyczy".