Aplica-se A
SQL Server 2008 Standard SQL Server 2008 Developer SQL Server 2008 Enterprise SQL Server 2008 Workgroup

BUGS #: 115124 (Manutenção do conteúdo)Número de bugs do VSTS: 316475Número de bugs do VSTS: 365460

A Microsoft distribui correcções do Microsoft SQL Server 2008, como um ficheiro para transferência. Uma vez que as correcções são cumulativas, cada nova versão inclui todas as correcções e correcção de todas as correcções de segurança que foram incluídas no anterior do SQL Server 2008.

Sintomas

No Microsoft SQL Server 2005 ou SQL Server 2008, executar um procedimento armazenado num servidor remoto utilizando o servidor ligado. Depois de executar os procedimentos armazenados muitas vezes, é possível que a utilização da memória do serviço SQL Server aumenta rapidamente. Além disso, o diferentes erro mensagens relacionadas empobrecimento da camada de memória no espaço de endereço MemTolLeave poderá ser registado no ficheiro errorlog de SQL Server 2008.Nota Também poderá detectar este problema quando utiliza replicação, envio de registo ou espelhamento (mirroring). Estas funcionalidades podem utilizar procedimentos armazenados que utilizam um servidor ligado.

Causa

Este problema é causado por uma fuga de memória que ocorre quando executa uma consulta que utiliza um servidor ligado. A fuga ocorre quando chama um procedimento armazenado remoto. Existem dois tipos de fugas de potenciais:

  • O valor devolvido da chamada de procedimento armazenado, o que é sempre fuga. Esta é uma fuga de pequena mas regular.

  • Uma chamada de procedimento armazenado remoto que tenha parâmetros do tipo de dados sqlvariant de saída.

Resolução

SQL Server 2008 Service Pack 1

A correcção deste problema publicada pela primeira vez na actualização cumulativa 3 para SQL Server 2008 Service Pack 1. Para mais informações sobre este pacote de actualização cumulativa, clique no número de artigo seguinte para visualizar o artigo na Microsoft Knowledge Base:

971491 cumulativo pacote 3 de actualizações do SQL Server 2008 Service Pack 1Nota 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 no anterior do SQL Server 2008. A Microsoft recomenda 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

970365 o SQL Server 2008 cria disponibilizadas após o lançamento do SQL Server 2008 Service Pack 1Correcções do Microsoft SQL Server 2008 são criadas para service packs do SQL Server específicos. Tem de aplicar uma correcção do SQL Server 2008 Service Pack 1 para uma instalação do SQL Server 2008 Service Pack 1. Por predefinição, qualquer correcção fornecida num service pack do SQL Server está incluída no próximo service pack do SQL Server.

SQL Server 2005 Service Pack 3

A correcção deste problema primeiro foi disponibilizada em 6 de actualização cumulativa para o SQL Server 2005 Service Pack 3. Para mais informações sobre este pacote de actualização cumulativa, clique no número de artigo seguinte para visualizar o artigo na Microsoft Knowledge Base:

974648 cumulativo pacote 6 de actualizações do SQL Server 2005 Service Pack 3Nota 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 SQL Server 2005 anterior. A Microsoft recomenda 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

Compilações do SQL Server 2005 do 960598 , que foram disponibilizadas após o lançamento do SQL Server 2005 Service Pack 3Correcções Microsoft SQL Server 2005 são criadas para service packs do SQL Server específicos. Tem de aplicar uma correcção do SQL Server 2005 Service Pack 3 para uma instalação do SQL Server 2005 Service Pack 3. Por predefinição, qualquer correcção fornecida num service pack do SQL Server está incluída no próximo service pack do SQL Server.

A versão do SQL Server 2008

Importante Tem de instalar esta correcção se estiver a executar a versão do SQL Server 2008.A correcção para este problema foi primeiro disponibilizada em 8 de actualização cumulativa. Para mais informações sobre como obter este pacote de actualização cumulativa para o SQL Server 2008, clique no número de artigo seguinte para visualizar o artigo na Microsoft Knowledge Base:

975976 cumulativo pacote 8 de actualizações do SQL Server 2008Nota 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 no anterior do SQL Server 2008. 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

956909 o SQL Server 2008 cria disponibilizadas após o lançamento do SQL Server 2008

Estado

A Microsoft confirmou que este é um problema nos produtos da Microsoft listados na secção "Aplica-se a".

Mais informações

Informações de pilha de chamadas

Esta fuga de memória pode ser vista na pilha de predefinição. Padrão de pelo menos uma fuga será de 40 bytes. Este é o tamanho da estrutura CXVariant para o valor devolvido. LFH pilhas pode não mostrar os 40 bytes fugas correctamente e poderá apresentar fugas de 4 KB a 64 KB intervalos se utilizar o ! pilha < heaphandle > - a -k na barra de um ficheiro de informação completo.Nota Por predefinição, Windows Server 2008, Windows Vista, Windows 7 e Windows Server 2008 R2 utilizará LFH heap para heap predefinido no processo do SQL Server.UMDH ou DebugDiag mostra as pilhas fuga para o carácter seguinte. UMDH, DebugDiag e o ! pilha – l todos os mostram tal como uma chaminé comum para uma fuga para o problema de estado devolvido do comando:Nota Dependendo de qual o fornecedor está a ser utilizado, as informações do fornecedor não podem ser sqlncli10.ntdll!RtlAllocateHeap+0001B970sqlncli10!CDataSource::DataConvert+0000C898 sqlncli10!CDataSource::OLEDBdataFromSQLdata+0000018C sqlncli10!CStmt::ProcessReturnStatus+000001FAsqlncli10!BATCHCTX::Run+000005BAsqlncli10!CDBConnection::ProcessTDSStream+000001A7 sqlncli10!CStmt::SQLExecRPC+00000602 sqlncli10!CCommand::ExecuteHelper+00000250 sqlncli10!CCommand::Execute+000013BB sqlncli10!CImpICommandText::Execute+00000209 sqlservr!MethodCallBinder_5<long,ICommandText,long (__cdecl ICommand::*)(IUnknown * __ptr64,_GUID const & __ptr64,tagDBPARAMS * __ptr64,__int64 * __ptr64,IUnknown * __ptr64 * __ptr64) __ptr64,IUnknown * __ptr64,_GUID,tagDBPARAMS * __ptr64,__int64 * __ptr64,IUnknown * __ptr64 * __ptr64>::operator()+00000053 sqlservr!ReturnValueHolder<long>::ExecAndSaveReturnValue<MethodCallBinder_5<long,ICommandText,long (__cdecl ICommand::*)(IUnknown * __ptr64,_GUID const & __ptr64,tagDBPARAMS * __ptr64,__int64 * __ptr64,IUnknown * __ptr64 * __ptr64) __ptr64,IUnknown * __ptr64,_GUID,tagDBPARAMS * __ptr64,__int64 * __ptr64,IUnknown * __ptr64 * __ptr64> const >+00000018 sqlservr!CallProtectorImpl::CallWithSEH<IWrapInterface<ICommandText>::CallTraitsNone,long,MethodCallBinder_5<long,ICommandText,long (__cdecl ICommand::*)(IUnknown * __ptr64,_GUID const & __ptr64,tagDBPARAMS * __ptr64,__int64 * __ptr64,IUnknown * __ptr64 * __ptr64) __ptr64,IUnknown * __ptr64,_GUID,tagDBPARAMS * __ptr64,__int64 * __ptr64,IUnknown * __ptr64 * __ptr64> const >+0000002A sqlservr!CallProtectorImpl::CallExternalFull<IWrapInterface<ICommandText>::CallTraitsNone,long,MethodCallBinder_5<long,ICommandText,long (__cdecl ICommand::*)(IUnknown * __ptr64,_GUID const & __ptr64,tagDBPARAMS * __ptr64,__int64 * __ptr64,IUnknown * __ptr64 * __ptr64) __ptr64,IUnknown * __ptr64,_GUID,tagDBPARAMS * __ptr64,__int64 * __ptr64,IUnknown * __ptr64 * __ptr64> const >+0000004Dsqlservr!SOS_CallExternalFunctor<IWrapInterface<ICommandText>::CallTraitsNone,long,MethodCallBinder_5<long,ICommandText,long (__cdecl ICommand::*)(IUnknown * __ptr64,_GUID const & __ptr64,tagDBPARAMS * __ptr64,__int64 * __ptr64,IUnknown * __ptr64 * __ptr64) __ptr64,IUnknown * __ptr64,_GUID,tagDBPARAMS * __ptr64,__int64 * __ptr64,IUnknown * __ptr64 * __ptr64> >+0000001Dsqlservr!IWrapInterface<ICommandText>::HrCallExternal<MethodCallBinder_5<long,ICommandText,long (__cdecl ICommand::*)(IUnknown * __ptr64,_GUID const & __ptr64,tagDBPARAMS * __ptr64,__int64 * __ptr64,IUnknown * __ptr64 * __ptr64) __ptr64,IUnknown * __ptr64,_GUID,tagDBPARAMS * __ptr64,__int64 * __ptr64,IUnknown * __ptr64 * __ptr64> >+00000092sqlservr!CWrapICommandText::Execute+00000230sqlservr!CRpcInterfaces::Relay+00000982sqlservr!CStmtExecProc::XretRemoteExec+00000732sqlservr!CRemoteProcExecLevel::Execute+00000160sqlservr!CStmtExecProc::XretWrapRemoteExec+000001D5sqlservr!CStmtExecProc::XretExecExecute+0000078Esqlservr!CXStmtExecProc::XretExecute+0000004Esqlservr!CExecStmtLoopVars::ExecuteXStmtAndSetXretReturn+0000003Csqlservr!CMsqlExecContext::ExecuteStmts<1,1>+000002AAsqlservr!CMsqlExecContext::FExecute+00001023sqlservr!CSQLSource::Execute+00001091sqlservr!process_request+000006BC sqlservr!process_commands+000003C4 sqlservr!SOS_Task::Param::Execute+0000016Bsqlservr!SOS_Scheduler::RunTask+000001A5sqlservr!SOS_Scheduler::ProcessTasks+000002E7 Here are the call stacks for the SQL Variant output parameter leak for sql_variant:ntdll!RtlAllocateHeap+0001B970sqlncli10!CDataSource::DataConvert+0000BAD2sqlncli10!CDataSource::OLEDBdataFromSQLdata+00000D18sqlncli10!CStmt::ProcessReturnValue+00000BC5sqlncli10!CTdsSqloledb::OnReturnValue+00000018sqlncli10!BATCHCTX::ProcessReturnValue+00000366sqlncli10!BATCHCTX::Run+000004ADsqlncli10!CDBConnection::ProcessTDSStream+000001A7sqlncli10!CStmt::SQLExecRPC+00000602 sqlncli10!CCommand::ExecuteHelper+00000250sqlncli10!CCommand::Execute+000013BB sqlncli10!CImpICommandText::Execute+00000209 sqlservr!MethodCallBinder_5<long,ICommandText,long (__cdecl ICommand::*)(IUnknown * __ptr64,_GUID const & __ptr64,tagDBPARAMS * __ptr64,__int64 * __ptr64,IUnknown * __ptr64 * __ptr64) __ptr64,IUnknown * __ptr64,_GUID,tagDBPARAMS * __ptr64,__int64 * __ptr64,IUnknown * __ptr64 * __ptr64>::operator()+00000053 sqlservr!ReturnValueHolder<long>::ExecAndSaveReturnValue<MethodCallBinder_5<long,ICommandText,long (__cdecl ICommand::*)(IUnknown * __ptr64,_GUID const & __ptr64,tagDBPARAMS * __ptr64,__int64 * __ptr64,IUnknown * __ptr64 * __ptr64) __ptr64,IUnknown * __ptr64,_GUID,tagDBPARAMS * __ptr64,__int64 * __ptr64,IUnknown * __ptr64 * __ptr64> const >+00000018 sqlservr!CallProtectorImpl::CallWithSEH<IWrapInterface<ICommandText>::CallTraitsNone,long,MethodCallBinder_5<long,ICommandText,long (__cdecl ICommand::*)(IUnknown * __ptr64,_GUID const & __ptr64,tagDBPARAMS * __ptr64,__int64 * __ptr64,IUnknown * __ptr64 * __ptr64) __ptr64,IUnknown * __ptr64,_GUID,tagDBPARAMS * __ptr64,__int64 * __ptr64,IUnknown * __ptr64 * __ptr64> const >+0000002A sqlservr!CallProtectorImpl::CallExternalFull<IWrapInterface<ICommandText>::CallTraitsNone,long,MethodCallBinder_5<long,ICommandText,long (__cdecl ICommand::*)(IUnknown * __ptr64,_GUID const & __ptr64,tagDBPARAMS * __ptr64,__int64 * __ptr64,IUnknown * __ptr64 * __ptr64) __ptr64,IUnknown * __ptr64,_GUID,tagDBPARAMS * __ptr64,__int64 * __ptr64,IUnknown * __ptr64 * __ptr64> const >+0000004D sqlservr!SOS_CallExternalFunctor<IWrapInterface<ICommandText>::CallTraitsNone,long,MethodCallBinder_5<long,ICommandText,long (__cdecl ICommand::*)(IUnknown * __ptr64,_GUID const & __ptr64,tagDBPARAMS * __ptr64,__int64 * __ptr64,IUnknown * __ptr64 * __ptr64) __ptr64,IUnknown * __ptr64,_GUID,tagDBPARAMS * __ptr64,__int64 * __ptr64,IUnknown * __ptr64 * __ptr64> >+0000001D sqlservr!IWrapInterface<ICommandText>::HrCallExternal<MethodCallBinder_5<long,ICommandText,long (__cdecl ICommand::*)(IUnknown * __ptr64,_GUID const & __ptr64,tagDBPARAMS * __ptr64,__int64 * __ptr64,IUnknown * __ptr64 * __ptr64) __ptr64,IUnknown * __ptr64,_GUID,tagDBPARAMS * __ptr64,__int64 * __ptr64,IUnknown * __ptr64 * __ptr64> >+00000092 sqlservr!CWrapICommandText::Execute+00000230sqlservr!CRpcInterfaces::Relay+00000982 sqlservr!CStmtExecProc::XretRemoteExec+00000732 sqlservr!CRemoteProcExecLevel::Execute+00000160 sqlservr!CStmtExecProc::XretWrapRemoteExec+000001D5sqlservr!CStmtExecProc::XretExecExecute+0000078Esqlservr!CXStmtExecProc::XretExecute+0000004Esqlservr!CExecStmtLoopVars::ExecuteXStmtAndSetXretReturn+0000003Csqlservr!CMsqlExecContext::ExecuteStmts<1,1>+000002AA sqlservr!CMsqlExecContext::FExecute+00001023sqlservr!CSQLSource::Execute+00001091sqlservr!process_request+000006BC sqlservr!process_commands+000003C4 sqlservr!SOS_Task::Param::Execute+0000016B ntdll!RtlAllocateHeap+0001B970sqlncli10!SSVariantCopy+00000149 sqlncli10!CDataSource::DataConvert+0000BB50 sqlncli10!CDataSource::OLEDBdataFromSQLdata+00000D18 sqlncli10!CStmt::ProcessReturnValue+00000BC5 sqlncli10!CTdsSqloledb::OnReturnValue+00000018 sqlncli10!BATCHCTX::ProcessReturnValue+00000366 sqlncli10!BATCHCTX::Run+000004AD sqlncli10!CDBConnection::ProcessTDSStream+000001A7sqlncli10!CStmt::SQLExecRPC+00000602 sqlncli10!CCommand::ExecuteHelper+00000250 sqlncli10!CCommand::Execute+000013BB sqlncli10!CImpICommandText::Execute+00000209 sqlservr!MethodCallBinder_5<long,ICommandText,long (__cdecl ICommand::*)(IUnknown * __ptr64,_GUID const & __ptr64,tagDBPARAMS * __ptr64,__int64 * __ptr64,IUnknown * __ptr64 * __ptr64) __ptr64,IUnknown * __ptr64,_GUID,tagDBPARAMS * __ptr64,__int64 * __ptr64,IUnknown * __ptr64 * __ptr64>::operator()+00000053sqlservr!ReturnValueHolder<long>::ExecAndSaveReturnValue<MethodCallBinder_5<long,ICommandText,long (__cdecl ICommand::*)(IUnknown * __ptr64,_GUID const & __ptr64,tagDBPARAMS * __ptr64,__int64 * __ptr64,IUnknown * __ptr64 * __ptr64) __ptr64,IUnknown * __ptr64,_GUID,tagDBPARAMS * __ptr64,__int64 * __ptr64,IUnknown * __ptr64 * __ptr64> const >+00000018 sqlservr!CallProtectorImpl::CallWithSEH<IWrapInterface<ICommandText>::CallTraitsNone,long,MethodCallBinder_5<long,ICommandText,long (__cdecl ICommand::*)(IUnknown * __ptr64,_GUID const & __ptr64,tagDBPARAMS * __ptr64,__int64 * __ptr64,IUnknown * __ptr64 * __ptr64) __ptr64,IUnknown * __ptr64,_GUID,tagDBPARAMS * __ptr64,__int64 * __ptr64,IUnknown * __ptr64 * __ptr64> const >+0000002A sqlservr!CallProtectorImpl::CallExternalFull<IWrapInterface<ICommandText>::CallTraitsNone,long,MethodCallBinder_5<long,ICommandText,long (__cdecl ICommand::*)(IUnknown * __ptr64,_GUID const & __ptr64,tagDBPARAMS * __ptr64,__int64 * __ptr64,IUnknown * __ptr64 * __ptr64) __ptr64,IUnknown * __ptr64,_GUID,tagDBPARAMS * __ptr64,__int64 * __ptr64,IUnknown * __ptr64 * __ptr64> const >+0000004D sqlservr!SOS_CallExternalFunctor<IWrapInterface<ICommandText>::CallTraitsNone,long,MethodCallBinder_5<long,ICommandText,long (__cdecl ICommand::*)(IUnknown * __ptr64,_GUID const & __ptr64,tagDBPARAMS * __ptr64,__int64 * __ptr64,IUnknown * __ptr64 * __ptr64) __ptr64,IUnknown * __ptr64,_GUID,tagDBPARAMS * __ptr64,__int64 * __ptr64,IUnknown * __ptr64 * __ptr64> >+0000001D sqlservr!IWrapInterface<ICommandText>::HrCallExternal<MethodCallBinder_5<long,ICommandText,long (__cdecl ICommand::*)(IUnknown * __ptr64,_GUID const & __ptr64,tagDBPARAMS * __ptr64,__int64 * __ptr64,IUnknown * __ptr64 * __ptr64) __ptr64,IUnknown * __ptr64,_GUID,tagDBPARAMS * __ptr64,__int64 * __ptr64,IUnknown * __ptr64 * __ptr64> >+00000092 sqlservr!CWrapICommandText::Execute+00000230sqlservr!CRpcInterfaces::Relay+00000982 sqlservr!CStmtExecProc::XretRemoteExec+00000732sqlservr!CRemoteProcExecLevel::Execute+00000160sqlservr!CStmtExecProc::XretWrapRemoteExec+000001D5sqlservr!CStmtExecProc::XretExecExecute+0000078E sqlservr!CXStmtExecProc::XretExecute+0000004E sqlservr!CExecStmtLoopVars::ExecuteXStmtAndSetXretReturn+0000003C sqlservr!CMsqlExecContext::ExecuteStmts<1,1>+000002AA sqlservr!CMsqlExecContext::FExecute+00001023 sqlservr!CSQLSource::Execute+00001091sqlservr!process_request+000006BC sqlservr!process_commands+000003C4

Referências

Para mais informações sobre o modelo de Assistência Incremental para o SQL Server, clique no número de artigo seguinte para visualizar o artigo na Microsoft Knowledge Base:

935897 um modelo de Assistência Incremental está disponível a partir da equipa do SQL Server para proporcionar correcções para problemas comunicadosPara mais informações sobre o esquema de atribuição para actualizações do SQL Server, clique no número de artigo seguinte para visualizar o artigo na Microsoft Knowledge Base:

822499 Novo esquema de atribuição de nomes para pacotes de actualização de software do Microsoft SQL ServerPara mais informações sobre a terminologia de atualização de software, clique no seguinte número de artigo para visualizar o artigo na Base de Dados de Conhecimento Microsoft:

824684 descrição da terminologia padrão utilizada para descrever actualizações de software da Microsoft

Mais informações

Informações de BPA do SQL Server 2008 R2

O SQL Server 2008 R2 prática analisador de melhores (SQL Server 2008 R2 BPA) fornece uma regra para detectar situações em que a instância do SQL Server tem ligados a servidores que estão configurados para utilização e não se aplicar esta correcção. O SQL Server 2008 R2 BPA suporta o SQL Server 2008 e o SQL Server 2008 R2.Se executar a ferramenta BPA e encontrar o aviso, "Motor de base de dados - correcção de fuga de memória de servidor ligado em falta," é necessário examinar os sintomas mencionados neste artigo e aplicar a actualização cumulativa que é adequado.

Referências

Software de regra

Título de regra

Identificador de regra

Regra BPA do SQL Server 2008 R2

falta correcção de fuga de memória do servidor ligado

RID3807

Autor (PME): bruceyeEscritor: ericzhaRevisor técnico: tejasaksEditor: v-lynan

Precisa de mais ajuda?

Quer mais opções?

Explore os benefícios da subscrição, navegue em cursos de formação, saiba como proteger o seu dispositivo e muito mais.