Microsoft verteilt Microsoft SQL Server 2012-Korrekturen in einer herunterladbaren Datei. Da die Fixes kumulativ sind, enthält jedes neue Release alle Hotfixes und alle Sicherheitsupdates, die im vorherigen SQL Server 2012-Updaterelease enthalten waren.
Problembeschreibung
Stellen Sie sich folgendes Szenario vor:
-
Sie erstellen eine gespeicherte Prozedur, die einen Tabellenwertparameter (TvP) in Microsoft SQL Server 2012 verwendet.
-
Sie verwenden SQL Profiler oder SQL Server erweiterte Ereignisse, um die Ereignisse RPC:Starting und RPC:Completed zu erfassen.
-
Sie führen eine Abfrage aus, die den TVP verwendet.
-
Für die Abfrage ist ein Zeitüberschreitung aufgetreten.
In diesem Szenario tritt ein nicht liefernder Schedulerfehler auf, und Abfragen, die auf demselben Planer ausgeführt werden, werden langsam ausgeführt. Darüber hinaus wird im Protokollordner SQL Server eine Minidumpdatei generiert.Wenn dieses Problem auftritt, erhalten Sie eine Fehlermeldung, die der folgenden ähnelt:
System.Data.SqlClient.SqlException (0x80131904): Timeout abgelaufen. Das Zeitlimit wurde vor dem Beenden des Vorgangs überschritten oder der Server reagiert nicht.at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection)at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning()at System.Data.SqlClient.TdsParserStateObject.ReadSniError(TdsParserStateObject stateObj, UInt32-Fehler)at System.Data.SqlClient.TdsParserStateObject.ReadSni(DbAsyncResult asyncResult, TdsParserStateObject stateObj)at 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)
Der nicht zurückgegebene Planerfehler wird zusammen mit einer Fehlermeldung, die der folgenden ähnelt, im SQL Server Fehlerprotokoll protokolliert:
<Date><Time> Server using 'dbghelp.dll' version '4.0.5'<Date><Time> Server ***Threadkontext für spid kann nicht abgerufen werden #<Datum><Uhrzeit> Server * *******************************************************************************><2 ******************************************************************************* Date><Time> Server *><6 Date><Time> Server * BEGIN STACK DUMP:><0 Date><Time> Server * <Date><Time> spid #><8 Date><Time> Server *><2 Datum><Uhrzeit> Server *><6 Datum><Uhrzeit> Server *<Datum><Uhrzeit> Server * *******************************************************************************<Datum><Uhrzeit> Serverstapelsignatur für das Speicherabbild ist 0x000000000000002C<Datum><Uhrzeit> Server Der Rückgabecode für den externen Speicherabbildprozess 0x20000001.Der externe Speicherabbildprozess hat keine Fehler zurückgegeben.<><Uhrzeit> Serverprozess 0:0:0 (0x1670) Worker-0x0000000004EDE160 scheint auf Planer 5 nicht zu liefern. Threaderstellungszeit: 13014210386757. Ca. Verwendete Thread-CPU: Kernel 0 ms, Benutzer 70106 ms. Prozessauslastung 16 %. Systemleerlauf 77 %. Intervall: 70140 ms.<><Uhrzeit> Serverprozess 0:0:0 (0x1670) Worker-0x0000000004EDE160 scheint auf Planer 5 nicht zu liefern. Threaderstellungszeit:
Ursache
Dieses Problem tritt aufgrund eines Fehlers in SQL Server 2012-Datenbank-Engine auf. Die Textspalten im TVP werden als Einfügezeichenfolgen oder Puffer implementiert, und eine Erhöhung der Zeilenanzahl erhöht die Anzahl der Puffer. Der Prozess, der Puffer freigibt, ist jedoch zeitaufwändig. Daher wird bei Release- und Verkleinerungsvorgängen ein Nicht-Ergebnis-Planerfehler generiert. Hinweis Ein ähnliches Problem wurde im folgenden Microsoft Knowledge Base-Artikel behoben. Das kumulative Updatepaket, das in diesem Artikel beschrieben wird, ist jedoch nicht für ein Abfragetimeoutproblem.
2520808 FEHLERBEHEBUNG: Fehler beim Ausführen einer Abfrage, die ein TVP in SQL Server 2008 oder in SQL Server 2008 R2 verwendet, wenn SQL Profiler oder SQL Server Erweiterte Ereignisse verwendet wird
Lösung
Informationen zum kumulativen Update
Kumulatives Updatepaket 5 für SQL Server 2012 Service Pack 1 (SP1)
Die Behebung dieses Problems wurde zuerst im kumulativen Update 5 veröffentlicht. Weitere Informationen zum Abrufen dieses kumulativen Updatepakets für SQL Server 2012 finden Sie im folgenden Artikel der Microsoft Knowledge Base:
2861107 Kumulatives Updatepaket 5 für SQL Server 2012Note Da die Builds kumulativ sind, enthält jedes neue Release alle Hotfixes und alle Sicherheitsfixes, die im vorherigen SQL Server 2012-Fixrelease enthalten waren. Es wird empfohlen, dass Sie das neueste Updaterelease anwenden, das diesen Hotfix enthält. Weitere Informationen finden Sie im folgenden Artikel der Microsoft Knowledge Base:
2772858 Die SQL Server 2012-Builds, die nach SQL Server 2012 Service Pack 1 veröffentlicht wurden
Problemumgehung
Wenden Sie eine der folgenden Methoden an, um dieses Problem zu umgehen:
-
Verwenden Sie nicht SQL Profiler oder SQL Server erweiterte Ereignisse.
-
Deaktivieren Sie die Kontrollkästchen RPC:Starting und RPC:Completed in der Ablaufverfolgungsdefinition.
Status
Microsoft hat bestätigt, dass es sich hierbei um ein Problem bei den in diesem Artikel genannten Microsoft-Produkten handelt.