BUGS #: do 187868 (Manutenção do conteúdo)VSTS: 1340145
A Microsoft distribui correcções de 2012 do Microsoft SQL Server num só ficheiro transferível. Uma vez que as correcções são cumulativas, cada nova versão inclui todas as correcções e todas as actualizações de segurança que foram incluídas com o anterior servidor de SQL 2012 lançamento da actualização.
Sintomas
Considere o seguinte cenário:
-
Criar um procedimento armazenado que utiliza um parâmetro tabelares (TVP) no Microsoft SQL Server 2012.
-
Utilizar o SQL Profiler ou expandido eventos do servidor de SQL para capturar o RPC: iniciar o e RPC: concluída eventos.
-
Executar uma consulta que utiliza o TVP.
-
A consulta o tempo limite.
Neste cenário, ocorre um erro de programador não cedente e consultas que estão em execução no programador de mesmo executado lentamente. Além disso, é gerado um ficheiro de mini cópia na pasta de registo do SQL Server.
Quando este problema ocorre, recebe uma mensagem de erro semelhante à seguinte:
System.Data.SqlClient.SqlException (0x80131904): Tempo limite expirou. O tempo limite decorreu antes da conclusão da operação ou o servidor não está a responder.
em System.Data.SqlClient.SqlInternalConnection.OnError (excepção de SqlException, Boolean breakConnection)
em System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning()
em System.Data.SqlClient.TdsParserStateObject.ReadSniError (TdsParserStateObject stateObj, erro UInt32)
em System.Data.SqlClient.TdsParserStateObject.ReadSni (asyncResult de DbAsyncResult, TdsParserStateObject stateObj)
em System.Data.SqlClient.TdsParserStateObject.ReadNetworkPacket()
em System.Data.SqlClient.TdsParserStateObject.ReadByte()
em System.Data.SqlClient.TdsParser.Run (RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader sequência de dados, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj)
em System.Data.SqlClient.SqlCommand.FinishExecuteReader (SqlDataReader ds, RunBehavior runBehavior, resetOptionsString de cadeia)
em System.Data.SqlClient.SqlCommand.RunExecuteReaderTds (CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, assíncrona booleana)
em System.Data.SqlClient.SqlCommand.RunExecuteReader (CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, método de cadeia, o resultado de DbAsyncResult)
em System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery (o resultado de DbAsyncResult, String methodName, Boolean sendToPipe)
em System.Data.SqlClient.SqlCommand.ExecuteNonQuery()
em TVPApp.Program.Main (cadeia [] args)
O erro de programador não cedente juntamente com uma mensagem de erro semelhante à seguinte é registado no registo de erros do SQL Server:
< Data >< hora > versão de servidor utilizando 'dbghelp. dll' '4.0.5'
< Data >< hora > Server * * * não é possível obter o contexto do thread para spid #
<Date><Time> Server * *******************************************************************************
Servidor de hora > de < data >< *
< Data >< hora > Server * despejo simplificado da pilha de início:
Servidor < data >< hora > * < data >< hora > spid #
Servidor de hora > de < data >< *
< Data >< hora > Server * Programador de não cedente
Servidor de hora > de < data >< *
<Date><Time> Server * *******************************************************************************
< Data >< hora > assinatura da pilha de servidor para a informação de estado é 0x000000000000002C
Código de < data >< externo de servidor de hora > devolução de processo de informação 0x20000001.
Processo de informação de sistema externo devolveu sem erros.
Processo do servidor < data >< hora > 0:0:0 (0x1670) 0x0000000004EDE160 de trabalho parece estar não cedente no programador de 5. Hora de criação do thread: 13014210386757. Cerca de Thread da CPU utilizados: kernel 0 ms, Sra. de utilizador 70106 a utilização do processo de 16%. Sistema inactivo 77%. Intervalo: ms 70140.
Processo do servidor < data >< hora > 0:0:0 (0x1670) 0x0000000004EDE160 de trabalho parece estar não cedente no programador de 5. Hora de criação do thread:
Causa
Este problema ocorre devido a um erro no motor de base de dados do SQL Server 2012. As colunas de texto a TVP são implementadas como inserir cadeias ou memórias intermédias e um aumento do número de linhas aumenta o número de memórias intermédias. No entanto, o processo que disponibiliza memórias intermédias é uma tarefa demorado. Por conseguinte, é gerado um erro de programador não cedente quando edição e encolher operações ocorrem.
Nota Um problema semelhante foi corrigido no seguinte artigo da base de dados de conhecimento da Microsoft. No entanto, o pacote de actualização cumulativa descrita no artigo não é para um problema de limite de tempo de consulta.
CORRIGIR 2520808 : erro de programador não cedente quando executa uma consulta que utiliza um TVP no SQL Server 2008 ou no SQL Server 2008 R2, se for utilizados o SQL Profiler ou expandido eventos do servidor SQL
Resolução
Informações de actualização cumulativa
Pacote de actualização cumulativa 5 para o SQL Server 2012 Service Pack 1 (SP1)
A correcção para este problema foi primeiro disponibilizada em 5 de actualização cumulativa. Para mais informações sobre como obter este pacote de actualização cumulativa para o SQL Server 2012, clique no número de artigo seguinte para visualizar o artigo na Microsoft Knowledge Base:
2861107 cumulativo pacote 5 de actualizações do SQL Server 2012Nota Uma vez que as compilações são cumulativas, cada edição contém todas as correcções e correcção de todas as correcções de segurança que foram incluídas com o anterior servidor de SQL 2012. Recomendamos que pense em aplicar a edição de correcção mais recente que contenha esta correcção. Para mais informações, clique no número de artigo seguinte para visualizar o artigo na Base de Dados de Conhecimento Microsoft
2772858 o SQL Server 2012 cria disponibilizadas após o lançamento do SQL Server 2012 Service Pack 1
Solução alternativa
Para contornar este problema, utilize um dos seguintes métodos:
-
Não utilize o SQL Profiler ou expandido eventos do servidor SQL.
-
Clique para desmarcar a RPC: iniciar o e RPC: concluída caixas de verificação na definição de rastreio.
Mais informações
Esta correcção não é aplicável para o SQL Server 2008 ou SQL Server 2008 R2 quando este artigo da BDC é publicado. Se todos os utilizadores ocorre o mesmo problema no SQL Server 2008 ou SQL Server 2008 R2, mesmo depois dos utilizadores apliquem o pacote que é descrito no seguinte artigo, validar se existir um limite de tempo de consulta e determine se o limite de tempo pode ser resolvido. Caso contrário, submeta um pedido para aplicar esta correcção de SQL Server 2008 ou SQL Server 2008 R2.
CORRIGIR 2520808 : erro de programador não cedente quando executa uma consulta que utiliza um TVP no SQL Server 2008 ou no SQL Server 2008 R2, se for utilizados o SQL Profiler ou expandido eventos do servidor SQL
Informações de pilha de chamadas
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
A Microsoft confirmou que este é um problema nos produtos da Microsoft listados na secção "Aplica-se a".
Author: jannaw
Writer: v-yipli
Revisor técnico: pradm; jannaw; hozhan
Editor: v-mordew