Microsoft distribuye las correcciones de Microsoft SQL Server 2012 en un archivo descargable. Dado que las correcciones son acumulativas, cada nueva versión contiene todas las revisiones y todas las actualizaciones de seguridad que se incluyeron con la versión anterior de la actualización de SQL Server 2012.
Síntomas
Imagine la siguiente situación:
-
Se crea un procedimiento almacenado que usa un parámetro con valores de tabla (TVP) en Microsoft SQL Server 2012.
-
Use SQL Profiler o SQL Server eventos extendidos para capturar los eventos RPC:Starting y RPC:Completed.
-
Ejecuta una consulta que usa el TVP.
-
Se agota el tiempo de finalización de la consulta.
En este escenario, se produce un error del programador que no produce rendimiento y las consultas que se ejecutan en el mismo programador se ejecutan lentamente. Además, se genera un archivo de volcado pequeño en la carpeta de registro de SQL Server.Cuando se produce este problema, recibe un mensaje de error similar al siguiente:
System.Data.SqlClient.SqlException (0x80131904): Se agotó el tiempo de espera. Transcurrió el periodo de tiempo de espera antes de que se completara la operación o el servidor no responde.at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection)at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning()at System.Data.SqlClient.TdsParserStateObject.ReadSniError(TdsParserStateObject stateObj, Error UInt32)en System.Data.SqlClient.TdsParserStateObject.ReadSni(DbAsyncResult asyncResult, TdsParserStateObject stateObj)en 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)en 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 resultado, String methodName, Boolean sendToPipe)at System.Data.SqlClient.SqlCommand.ExecuteNonQuery()at TVPApp.Program.Main(String[] args)
El error del programador de no rendimiento junto con un mensaje de error similar al siguiente se registra en el registro de errores SQL Server:
<Date><Time> Server Using 'dbghelp.dll' version '4.0.5'<Date><Time> Server ***Unable to get thread context for spid #<Date><Time> Server * *******************************************************************************><2><Date><Time> Server *><6 Date><Time> Server * BEGIN STACK DUMP:><0 Date><Time> Server * <Date><Time> spid #><8 Date><Time> Server *><2 Date><Time> Server * Non-yielding Scheduler><6 Date><Time> Server *<Date><Time> Server * ******************************************************************************* Date<Date><Time> Server Stack Signature for the dump is 0x000000000000002C date<Date><Time> Server External dump process return code 0x20000001.El proceso de volcado externo no devolvió ningún error.<0x0000000004EDE160 de trabajo De fecha><hora> proceso del servidor 0:0:0 (0x1670) parece no ceder en el Programador 5. Tiempo de creación de subprocesos: 13014210386757. Aprox CPU subproceso utilizado: kernel 0 ms, usuario 70106 ms. Utilización de procesos 16%. Sistema inactivo 77%. Intervalo: 70140 ms.<0x0000000004EDE160 de trabajo De fecha><hora> proceso del servidor 0:0:0 (0x1670) parece no ceder en el Programador 5. Tiempo de creación de subprocesos:
Causa
Este problema se produce debido a un error en el motor de base de datos de SQL Server 2012. Las columnas de texto en el TVP se implementan como insert strings o buffers, y un aumento en el número de filas aumenta el número de búferes. Sin embargo, el proceso que libera búferes requiere mucho tiempo. Por lo tanto, se genera un error del programador que no produce rendimiento cuando se producen operaciones de liberación y reducción. Nota Se ha resuelto un problema similar en el siguiente artículo de Microsoft Knowledge Base. Sin embargo, el paquete de actualización acumulativa que se describe en el artículo no es para un problema de tiempo de espera de consulta.
2520808 CORRECCIÓN: Error de programador no rendto al ejecutar una consulta que usa un TVP en SQL Server 2008 o en SQL Server 2008 R2 si se usa SQL Profiler o SQL Server eventos extendidos
Solución
Información sobre la actualización acumulativa
Paquete de actualización acumulativa 5 para SQL Server 2012 Service Pack 1 (SP1)
La corrección para este problema se publicó por primera vez en la actualización acumulativa 5. Para obtener más información sobre cómo obtener este paquete de actualización acumulativa para SQL Server 2012, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:
2861107 Paquete de actualización acumulativa 5 para SQL Server 2012Note Como las compilaciones son acumulativas, cada nueva versión de corrección contiene todas las revisiones y todas las correcciones de seguridad que se incluyeron con la versión anterior de corrección de SQL Server 2012. Le recomendamos que considere la posibilidad de aplicar la corrección más reciente que contiene esta revisión. Si desea obtener más información, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:
2772858 Las compilaciones de SQL Server 2012 que se publicaron después del lanzamiento del Service Pack 1 de SQL Server 2012
Solución
Para resolver este problema, utilice uno de los métodos siguientes:
-
No use SQL Profiler ni SQL Server eventos extendidos.
-
Haga clic para desactivar las casillas RPC:Starting y RPC:Completed de la definición de seguimiento.
Estado
Microsoft ha confirmado que se trata de un problema de los productos de Microsoft enumerados en la sección "Se aplica a".