Microsoft distribuie remedierile Microsoft SQL Server 2012 într-un singur fișier descărcabil. Deoarece remedierile sunt cumulative, fiecare lansare nouă conține toate remedierile rapide și toate actualizările de securitate care au fost incluse în actualizarea anterioară SQL Server 2012.
Simptome
Luați în considerare următorul scenariu:
-
Creați o procedură stocată care utilizează un parametru cu valoare de tabel (TVP) în Microsoft SQL Server 2012.
-
Utilizați SQL Profiler sau SQL Server Evenimente extinse pentru a captura evenimentele RPC:Starting și RPC:Completed.
-
Rulați o interogare care utilizează TVP.
-
Interogarea este expirată.
În acest scenariu, apare o eroare de programator care nu dă randament și interogările care rulează pe același planificator rulează lent. În plus, un fișier mini-dump este generat în folderul jurnal SQL Server.Atunci când apare această problemă, primiți un mesaj de eroare care seamănă cu următorul:
System.Data.SqlClient.SqlException (0x80131904): Expirare expirată. Perioada de expirare s-a scurs înainte de terminarea operațiunii sau serverul nu răspunde.la System.Data.SqlClient.SqlInternalConnection.OnError(excepție SqlException, Boolean breakConnection)la System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning()la System.Data.SqlClient.TdsParserStateObject.ReadSniError(TdsParserStateObject stateObj, Eroare UInt32)la System.Data.SqlClient.TdsParserStateObject.ReadSni(DbAsyncResult asyncResult, TdsParserStateObject stateObj)la System.Data.SqlClient.TdsParserStateObject.ReadNetworkPacket()la 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)la 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, metoda String, DbAsyncResult result)at System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery(DbAsyncResult result, String methodName, Boolean sendToPipe)la System.Data.SqlClient.SqlCommand.ExecuteNonQuery()at TVPApp.Program.Main(String[] args)
Eroarea planificatorului care nu aduce randament împreună cu un mesaj de eroare asemănător cu următorul este înregistrată în jurnalul de erori SQL Server:
<data><ora> Server utilizând versiunea "dbghelp.dll" 4.0.5<Data><Ora> Server ***Nu se poate obține contextul de fir pentru spid #<Data><Ora> Server * *******************************************************************************><2 dată><oră> Server *><6 Data><Ora> Server * DUMP ÎNCEPUT STIVĂ:><0 Data><Ora> Server * <Data><Ora> spid #><8 Data><Ora> Server *><2 Data><Ora> Server * Ora><6 dată><oră> Server *<Data><Ora> Server * *******************************************************************************<Data><Ora> Semnătura stivei serverului pentru fișierul dump este 0x000000000000002C<Data><Ora> 0x20000001 cod de returnare a procesului dump extern Server.Procesul dump extern nu a returnat erori.<Data><Ora> Proces server 0:0:0 (0x1670) 0x0000000004EDE160 lucrător pare să nu aibă randament în Programatorul 5. Ora creării firului: 13014210386757. Cpu aproximativ fir utilizat: kernel 0 ms, utilizator 70106 ms. Utilizare proces 16%. Sistem inactiv 77%. Interval: 70140 ms.<Data><Ora> Proces server 0:0:0 (0x1670) 0x0000000004EDE160 lucrător pare să nu aibă randament în Programatorul 5. Ora creării firului:
Cauză
Această problemă apare din cauza unei erori în motorul de baze de date SQL Server 2012. Coloanele de text din TVP sunt implementate ca șiruri de inserare sau tampoane, iar o creștere a numărului de rânduri mărește numărul de tampoane. Cu toate acestea, procesul care eliberează tampoane consumă mult timp. Prin urmare, se generează o eroare de planificator care nu dă randament atunci când apar operațiuni de eliberare și micșorare. Notă O problemă similară a fost abordată în următorul articol din Baza de cunoștințe Microsoft. Cu toate acestea, pachetul de actualizare cumulativă descris în articol nu este pentru o problemă de expirare a interogării.
2520808 REMEDIERE: Eroare de planificator care nu dă randament atunci când rulați o interogare care utilizează un TVP în SQL Server 2008 sau în SQL Server 2008 R2 dacă se utilizează SQL Profiler sau SQL Server Evenimente extinse
Rezolvare
Informații despre actualizarea cumulativă
Pachetul de actualizare cumulativă 5 pentru SQL Server 2012 Service Pack 1 (SP1)
Remedierea pentru această problemă a fost lansată pentru prima dată în actualizarea cumulativă 5. Pentru mai multe informații despre obținerea acestui pachet de actualizare cumulativă pentru SQL Server 2012, faceți clic pe următorul număr de articol pentru a vedea articolul în Baza de cunoștințe Microsoft:
2861107 Pachetul de actualizare cumulativă 5 pentru SQL Server 2012Note Deoarece compilările sunt cumulative, fiecare ediție nouă de remediere conține toate remedierile rapide și toate remedierile de securitate care au fost incluse în remedierea anterioară a SQL Server 2012. Vă recomandăm să luați în considerare aplicarea celei mai recente remedieri care conține această remediere rapidă. Pentru mai multe informații, faceți clic pe următorul număr de articol pentru a-l vedea în Baza de cunoștințe Microsoft:
2772858 Compilările SQL Server 2012 care au fost lansate după lansarea SQL Server 2012 Service Pack 1
Soluție de evitare
Pentru a evita această problemă, utilizați una dintre metodele următoare:
-
Nu utilizați SQL Profiler sau SQL Server Extended Events.
-
Faceți clic pentru a debifa casetele de selectare RPC:Starting și RPC:Completed din definiția de urmărire.
Stare
Microsoft a confirmat că aceasta este o problemă în produsele Microsoft enumerate în secțiunea „Se aplică la”.