Nº de error: 187868 (Mantenimiento de contenido)VSTS: 1340145
Microsoft distribuye correcciones de Microsoft SQL Server 2012 en un archivo descargable. Como las revisiones son acumulativas, cada versión nueva contiene todas las revisiones y publicación de la actualización de todas las actualizaciones de seguridad que se incluyeron con la anterior de SQL Server 2012.
Síntomas
Imagine el siguiente escenario:
-
Crear un procedimiento almacenado que utiliza un parámetro con valores de tabla (TVP) en Microsoft SQL Server 2012.
-
Utilizar el analizador de SQL o SQL Server Extended Events para capturar el RPC: a partir de y RPC: completado eventos.
-
Ejecutar una consulta que utiliza el TVP.
-
La consulta se agota.
En este escenario, se produce un error de programador sin ofrecimiento y consultas que se ejecutan en el mismo programador se ejecutan lentamente. Además, se genera un archivo de minivolcado en la carpeta de registro de SQL Server.
Cuando se produce este problema, recibirá un mensaje de error similar al siguiente:(0x80131904) System.Data.SqlClient.SqlException: Se agotó el tiempo de espera. El tiempo de espera caducó antes de completar la operación o el servidor no responde.
en System.Data.SqlClient.SqlInternalConnection.OnError (excepción SqlException, breakConnection Boolean) en System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning() en System.Data.SqlClient.TdsParserStateObject.ReadSniError (TdsParserStateObject stateObj, UInt32 error) en System.Data.SqlClient.TdsParserStateObject.ReadSni (asyncResult DbAsyncResult, TdsParserStateObject stateObj) en System.Data.SqlClient.TdsParserStateObject.ReadNetworkPacket() en System.Data.SqlClient.TdsParserStateObject.ReadByte() en System.Data.SqlClient.TdsParser.Run (RunBehavior runBehavior cmdHandler SqlCommand, flujo de datos de SqlDataReader, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj) en System.Data.SqlClient.SqlCommand.FinishExecuteReader (ds SqlDataReader, RunBehavior runBehavior, resetOptionsString de cadena) en System.Data.SqlClient.SqlCommand.RunExecuteReaderTds (CommandBehavior cmdBehavior, RunBehavior runBehavior, returnStream Boolean, async Boolean) en System.Data.SqlClient.SqlCommand.RunExecuteReader (CommandBehavior cmdBehavior, RunBehavior runBehavior, returnStream Boolean, método de cadena, el resultado de DbAsyncResult) en System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery (resultado DbAsyncResult, methodName String, Boolean sendToPipe) en System.Data.SqlClient.SqlCommand.ExecuteNonQuery() en TVPApp.Program.Main (String [] args)El error de programador sin ofrecimiento junto con un mensaje de error similar al siguiente se graba en el registro de errores de SQL Server:
Servidor utilizando 'dbghelp.dll' versión '4.0.5' de tiempo > < fecha ><
Servidor de tiempo > < fecha >< *** no se puede obtener el contexto del subproceso para el spid # <Date><Time> Server * ******************************************************************************* Servidor de tiempo > < fecha >< * Servidor de tiempo > < fecha >< * volcado de pila inicial: Servidor de tiempo > < fecha >< * < fecha >< hora > spid # Servidor de tiempo > < fecha >< * Servidor de tiempo > < fecha >< * programador sin ofrecimiento Servidor de tiempo > < fecha >< * <Date><Time> Server * ******************************************************************************* Tiempo > < fecha >< Server la firma de la pila para el volcado es 0x000000000000002C Código de retorno de proceso de volcado externo del servidor de tiempo > < fecha >< 0 x 20000001. Proceso de volcado externo no ha devuelto errores. Proceso del servidor < fecha >< tiempo > 0:0:0 (0x1670) 0x0000000004EDE160 de trabajo parece estar sin ofrecimiento de programador de 5. Hora de creación del subproceso: 13014210386757. Subproceso de aprox CPU utilizada: núcleo 0 ms, Sra. utilización de proceso de usuario 70106 16%. Sistema inactivo 77%. Intervalo: ms 70140. Proceso del servidor < fecha >< tiempo > 0:0:0 (0x1670) 0x0000000004EDE160 de trabajo parece estar sin ofrecimiento de programador de 5. Hora de creación del subproceso: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 la TVP se implementan como insertar cadenas o búferes y un aumento en el número de filas aumenta el número de búferes. Sin embargo, el proceso que libera búferes es lento. Por lo tanto, se genera un error de programador sin ofrecimiento cuando suelte y reducir las operaciones de producirse.
Nota: Se ha solucionado un problema similar en el siguiente artículo de Microsoft Knowledge base. Sin embargo, el paquete de actualización acumulativa se describe en el artículo no es para un problema de tiempo de espera de consulta.CORREGIR 2520808 : error de programador sin ofrecimiento al ejecutar una consulta que utiliza una TVP en SQL Server 2008 o en SQL Server 2008 R2 si se utiliza el analizador de SQL o SQL Server Extended Events
Solución
Información de actualización acumulativa
Paquete 5 de actualización acumulativa para el Service Pack 1 (SP1) de SQL Server 2012
En primer lugar, la corrección para este problema se publicó en 5 de actualización acumulativa. Para obtener más información acerca de 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:
Paquete 5 de actualización de 2861107 acumulativa para SQL Server 2012Nota: Como las compilaciones son acumulativas, cada versión de corrección nueva contiene todas las revisiones y revisión de todas las revisiones de seguridad que se incluyeron con la anterior de SQL Server 2012. Le recomendamos que considere aplicar la versión más reciente de revisión que contenga este hotfix. Para obtener más información, haga clic en el siguiente número de artículo para verlo en Microsoft Knowledge Base:
2772858 the SQL Server 2012 generaciones que se publicaron después del lanzamiento de Service Pack 1 de SQL Server 2012
Solución alternativa
Para evitar este problema, utilice uno de los métodos siguientes:
-
No utilice el analizador de SQL o SQL Server Extended Events.
-
Haga clic para desactivar la RPC: a partir de y RPC: completado casillas de verificación en la definición de traza.
Más información
Esta revisión no se aplica a SQL Server 2008 o SQL Server 2008 R2 cuando se publicó este artículo de KB. Si los usuarios reciben el mismo problema en SQL Server 2008 o SQL Server 2008 R2 incluso después de que los usuarios apliquen el paquete que se describe en el siguiente artículo, valide si no hay un tiempo de espera de la consulta y determinar si se puede resolver el tiempo de espera. De lo contrario, envíe una solicitud para aplicar esta revisión para SQL Server 2008 o SQL Server 2008 R2.
CORREGIR 2520808 : error de programador sin ofrecimiento al ejecutar una consulta que utiliza una TVP en SQL Server 2008 o en SQL Server 2008 R2 si se utiliza el analizador de SQL o SQL Server Extended Events
Información de la pila de llamadas
sqlmin!CLinkedMap<__int64,CCheckReadersAndWriters::CCounts>::FLookup+0x29sqlmin!CCheckReadersAndWriters::Release+0x69
sqlmin!CMainIlb::{dtor}+0x3d sqlmin!CMainIlb::`scalar deleting destructor'+0x3d sqlmin!CBlobHandleFactoryMain::ReleaseILockBytes+0x13 sqlmin!CMainIlb::Release+0xf0 sqllang!CTraceRpcBinaryStream::~CTraceRpcBinaryStream+0x80 sqllang!CTraceTvpData::{dtor}+0x14 sqllang!CTraceTvpData::`scalar deleting destructor'+0x1e sqllang!CRpcTraceHelper::CleanUpTraceTvpData+0x33 sqllang!CRpcTraceHelper::~CRpcTraceHelper+0x70 sqllang!CRPCExecEnv::~CRPCExecEnv+0x2ab sqllang!CRPCExecEnv::`scalar deleting destructor'+0x14 sqllang!process_request+0x10b1 sqllang!process_commands+0x51c sqldk!SOS_Task::Param::Execute+0x21e sqldk!SOS_Scheduler::RunTask+0xa8 sqldk!SOS_Scheduler::ProcessTasks+0x299 sqldk!SchedulerManager::WorkerEntryPoint+0x261 sqldk!SystemThread::RunWorker+0x8f sqldk!SystemThreadDispatcher::ProcessWorker+0x3c8 sqldk!SchedulerManager::ThreadEntryPoint+0x236 kernel32!BaseThreadInitThunk+0xd ntdll!RtlUserThreadStart+0x1d
sqlmin!CLinkedMap<__int64,CCheckReadersAndWriters::CCounts>::FDelete+0x34sqlmin!CCheckReadersAndWriters::Release+0xfb
sqlmin!CMainIlb::{dtor}+0x3d sqlmin!CMainIlb::`scalar deleting destructor'+0x3d sqlmin!CBlobHandleFactoryMain::ReleaseILockBytes+0x13 sqlmin!CMainIlb::Release+0xf0 sqllang!CTraceRpcBinaryStream::~CTraceRpcBinaryStream+0x80 sqllang!CTraceTvpData::{dtor}+0x11 sqllang!CRpcTraceHelper::CleanUpTraceTvpData+0x55 sqllang!CRpcTraceHelper::TracePostExec+0x1bf sqllang!CRPCExecEnv::OnExecFinish+0xaa sqllang!CProtocolHeaderInfo::{dtor}+0xffffffff`ffb158e2 sqllang!process_request+0x764 sqllang!process_commands+0x51c sqldk!SOS_Task::Param::Execute+0x21e sqldk!SOS_Scheduler::RunTask+0xa8 sqldk!SOS_Scheduler::ProcessTasks+0x29a sqldk!SchedulerManager::WorkerEntryPoint+0x261 sqldk!SystemThread::RunWorker+0x8f sqldk!SystemThreadDispatcher::ProcessWorker+0x3c8 sqldk!SchedulerManager::ThreadEntryPoint+0x236 kernel32!BaseThreadInitThunk+0x1a ntdll!RtlUserThreadStart+0x1d
Estado
Microsoft ha confirmado que se trata de un problema de los productos de Microsoft que se enumeran en la sección "Aplicable a".
Author: jannaw
Writer: v-yipli Revisor técnico: pradm; jannaw; hozhan Editor: v-mordew