BUG n º: 115124 (Manutenção do conteúdo)Número de bug do VSTS: 316475Número de bug do VSTS: 365460
A Microsoft distribui correções do Microsoft SQL Server 2008 como um arquivo para download. Como as correções são cumulativas, cada versão nova contém todos os hotfixes e todas as correções de segurança que foram incluídas com o SQL Server de 2008 a anterior corrigir lançamento.
Sintomas
No Microsoft SQL Server 2005 ou no SQL Server 2008, você executa um procedimento armazenado em um servidor remoto usando um servidor vinculado. Depois de executar os procedimentos armazenados várias vezes, você pode descobrir que o uso de memória do serviço SQL Server aumenta rapidamente. Além disso, o esgotamento de relacionados de mensagens diversas do erro de memória no espaço de endereço de MemTolLeave pode ser registrado no arquivo de log de erros do SQL Server 2008.Observação: Você também pode enfrentar esse problema quando você usa replicação, envio de log ou espelhamento. Esses recursos podem usar procedimentos armazenados que usam um servidor vinculado.
Causa
Esse problema é causado por um vazamento de memória ocorre quando você executa uma consulta que usa um servidor vinculado. O vazamento ocorre quando você chama um procedimento armazenado remoto. Há dois tipos de possíveis vazamentos:
-
O valor de retorno da chamada de procedimento armazenado, sempre é perdido. Isso é um vazamento pequeno mas regular.
-
Uma chamada remota de procedimento armazenado que tem parâmetros do tipo de dados sqlvariant .
Resolução
SQL Server 2008 Service Pack 1
A correção para esse problema foi lançada pela primeira vez na atualização cumulativa 3 para SQL Server 2008 Service Pack 1. Para obter mais informações sobre esse pacote cumulativo de atualização, clique no número abaixo para ler o artigo na Base de Conhecimento da Microsoft:
3 do pacote de atualização do 971491 cumulativo para o SQL Server 2008 Service Pack 1Observação: Como as compilações são cumulativas, cada novo lançamento de correções contém todos os hotfixes e todas as correções de segurança que foram incluídas com o SQL Server de 2008 lançamento de correção. A Microsoft recomenda que você considere aplicar a versão mais recente de correção que contém esse hotfix. Para obter mais informações, clique no número de artigo a seguir para visualizar o artigo na Base de Dados de Conhecimento da Microsoft:
970365 cria o SQL Server 2008 que foram lançadas após o lançamento do SQL Server 2008 Service Pack 1Os hotfixes do Microsoft SQL Server 2008 são criados para service packs específicos do SQL Server. Você deve aplicar um hotfix do SQL Server 2008 Service Pack 1 para uma instalação do SQL Server 2008 Service Pack 1. Por padrão, todos os hotfixes fornecidos em um service pack do SQL Server estão incluídos no próximo service pack do SQL Server.
SQL Server 2005 Service Pack 3
A correção para esse problema foi lançada pela primeira vez na atualização cumulativa 6 para SQL Server 2005 Service Pack 3. Para obter mais informações sobre esse pacote cumulativo de atualização, clique no número abaixo para ler o artigo na Base de Conhecimento da Microsoft:
6 do pacote de atualização do 974648 cumulativo para o SQL Server 2005 Service Pack 3Observação: Como as compilações são cumulativas, cada novo lançamento de correções contém todos os hotfixes e todas as correções de segurança que foram incluídas com o SQL Server 2005 anteriores corrigir lançamento. A Microsoft recomenda que você considere aplicar a versão mais recente de correção que contém esse hotfix. Para obter mais informações, clique no número de artigo a seguir para visualizar o artigo na Base de Dados de Conhecimento da Microsoft:
960598 cria o SQL Server 2005 que foram lançadas após o lançamento do SQL Server 2005 Service Pack 3Os hotfixes do Microsoft SQL Server 2005 são criados para service packs específicos do SQL Server. Você deve aplicar um hotfix do SQL Server 2005 Service Pack 3 para uma instalação do SQL Server 2005 Service Pack 3. Por padrão, todos os hotfixes fornecidos em um service pack do SQL Server estão incluídos no próximo service pack do SQL Server.
A versão do SQL Server 2008
Importante: Se você estiver executando a versão de lançamento do SQL Server 2008, você deve instalar essa correção.A correção para esse problema foi lançada em 8 de atualização cumulativa. Para obter mais informações sobre como obter esse pacote de atualização cumulativa para SQL Server 2008, clique no número abaixo para ler o artigo na Base de Conhecimento da Microsoft:
8 do pacote de atualização do 975976 cumulativo para o SQL Server 2008Observação: Como as compilações são cumulativas, cada novo lançamento de correções contém todos os hotfixes e todas as correções de segurança que foram incluídas com o SQL Server de 2008 lançamento de correção. Recomendamos que você considere aplicar o lançamento mais recente de correção que contém esse hotfix. Para obter mais informações, clique no número de artigo a seguir para visualizar o artigo na Base de Dados de Conhecimento da Microsoft:
956909 cria o SQL Server 2008 que foram lançadas após o lançamento do SQL Server 2008
Status
A Microsoft confirma que este é um problema em seus produtos listados na seção "Aplica-se a".
Mais informações
Informações de pilha de chamada
Esse vazamento de memória pode ser visto na heap padrão. Padrão de pelo menos um vazamento será de 40 bytes. Esse é o tamanho da estrutura do CXVariant para o valor de retorno. LFH pilhas pode não mostrar 40 bytes vazar adequadamente e podem mostrar vazamentos de 4 KB para intervalos de 64 KB se você usar o ! < heaphandle > - a -k de pilha comando em um arquivo de despejo de memória completo.Observação: Por padrão, Windows Server 2008, Windows Vista, Windows 7 e Windows Server 2008 R2 usará heap LFH heap padrão do processo do SQL Server.UMDH ou DebugDiag mostra as pilhas vazamento de natureza seguinte. UMDH, DebugDiag e o ! pilha – l todos mostram isso como uma pilha comum para um vazamento para o problema de status de retorno do comando:Observação: Dependendo de qual provedor está sendo usado, as informações do provedor 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 obter mais informações sobre o modelo de serviços incrementais para SQL Server, clique no número abaixo para ler o artigo na Base de Conhecimento da Microsoft:
935897 um modelo de serviços incrementais está disponível da equipe do SQL Server para fornecer hotfixes para problemas relatadosPara obter mais informações sobre o esquema para nomeação para atualizações do SQL Server, clique no número abaixo para ler o artigo na Base de Conhecimento da Microsoft:
822499 Novo esquema para nomeação para pacotes de atualização de software do Microsoft SQL ServerPara obter mais informações sobre a terminologia de atualização de software, clique no número abaixo para ler o artigo na Base de Conhecimento da Microsoft:
824684 descrição da terminologia padrão usada para descrever as atualizações de software
Mais informações
Informações do SQL Server 2008 R2 BPA
O SQL Server 2008 R2 Best Practice Analyzer (SQL Server 2008 R2 BPA) fornece uma regra para detectar as situações em que a instância do SQL Server tenha vinculado servidores estão configurados para usar, e essa correção não será aplicada. O BPA do SQL Server 2008 R2 oferece suporte ao SQL Server 2008 e SQL Server 2008 R2.Se você executar a ferramenta BPA e encontrar o aviso, o "Mecanismo de banco de dados - correção de vazamento de memória de servidor vinculado ausente," você precisa examinar os sintomas mencionados neste artigo e aplicar a atualização cumulativa apropriado.
Referências
|
Software de regra |
Título de regra |
Identificador da regra |
|
Regra BPA do SQL Server 2008 R2 |
correção de vazamento de memória de servidor vinculado ausente |
RID3807 |
Autor (SME): bruceyeAutor: ericzhaRevisor técnico: tejasaksEditor: v-lynan