KORRIGERA: Minnesanvändningen för en SQL Server-tjänsten ökar snabbt när du kör en fråga som använder en länkad server i SQL Server 2005 eller SQL Server 2008

PROGRAMFEL #: 115124 (Innehållsunderhåll)
VSTS programfel nummer: 316475
VSTS programfel nummer: 365460

Microsoft distribuerar Microsoft SQL Server 2008 korrigeringar som en nedladdningsbar fil. Eftersom korrigeringar är kumulativa innehåller varje ny utgåva innehåller alla snabbkorrigeringar och säkerhetskorrigering för alla säkerhetskorrigeringar som ingår i föregående SQL Server 2008.

Symptom

I Microsoft SQL Server 2005 eller SQL Server 2008, kan du köra en lagrad procedur på en fjärrserver med hjälp av en länkad server. När du kör lagrade procedurer för många gånger, kanske du upptäcker att minnesanvändningen för SQL Server-tjänsten ökar snabbt. Dessutom kan olika fel meddelanden relaterade uttag av minne i adressutrymmet MemTolLeave loggas i SQL Server 2008 errorlog-fil.

Obs! Det här problemet kan även uppstå när du använder replikering, log leverans eller spegling. Dessa funktioner kan du använda lagrade procedurer med en länkad server.

Orsak

Det här problemet beror på en minnesläcka uppstår när du kör en fråga som använder en länkad server. Läckan inträffar när du anropar en fjärransluten lagrad procedur. Det finns två typer av potentiella läckor:

  • Returvärde för anropet lagrad procedur alltid läckt. Detta är en liten men vanlig läcka.

  • Lagrade remote procedure call som har OUT-parametrar av typen sqlvariant data.

Lösning

SQL Server 2008 servicepack 1


Korrigeringsfil för problemet gavs först ut i kumulativ uppdatering 3 för SQL Server 2008 Service Pack 1. Mer information om den kumulativa uppdateringspaket klickar du på följande artikelnummer och läser artikeln i Microsoft Knowledge Base:

971491 kumulativ uppdateringspaket 3 för SQL Server 2008 Service Pack 1Obs! Eftersom på byggen är kumulativa, varje ny version av korrigeringsfilen innehåller alla snabbkorrigeringar och säkerhetskorrigering för alla säkerhetskorrigeringar som ingår i föregående SQL Server 2008. Microsoft rekommenderar att du använder den senaste utgåvan av korrigering som innehåller den här snabbkorrigeringen. För mer information klickar du på följande artikelnummer och läser artikeln i Microsoft Knowledge Base:

970365 i SQL Server 2008 bygger som har getts ut efter SQL Server 2008 Service Pack 1
Snabbkorrigeringar för Microsoft SQL Server 2008 skapas för särskilda SQL Server servicepack. Du måste installera en snabbkorrigering för SQL Server 2008 Service Pack 1 till en installation av SQL Server 2008 Service Pack 1. En snabbkorrigering som finns i en SQL Server service pack ingår som standard i nästa service pack för SQL Server.

SQL Server 2005 Service Pack 3


Korrigeringsfil för problemet gavs först ut i kumulativ uppdatering 6 för SQL Server 2005 Service Pack 3. Mer information om den kumulativa uppdateringspaket klickar du på följande artikelnummer och läser artikeln i Microsoft Knowledge Base:

974648 kumulativ uppdateringspaket 6 för SQL Server 2005 Service Pack 3Obs! Eftersom på byggen är kumulativa, varje ny version av korrigeringsfilen innehåller alla snabbkorrigeringar och säkerhetskorrigering för alla säkerhetskorrigeringar som ingår i föregående SQL Server 2005. Microsoft rekommenderar att du använder den senaste utgåvan av korrigering som innehåller den här snabbkorrigeringen. För mer information klickar du på följande artikelnummer och läser artikeln i Microsoft Knowledge Base:

960598 i SQL Server 2005 bygger som har getts ut efter SQL Server 2005 Service Pack 3
Snabbkorrigeringar för Microsoft SQL Server 2005 skapas för särskilda SQL Server servicepack. Du måste installera en snabbkorrigering för SQL Server 2005 Service Pack 3 till en installation av SQL Server 2005 Service Pack 3. En snabbkorrigering som finns i en SQL Server service pack ingår som standard i nästa service pack för SQL Server.

Den utgivna versionen av SQL Server 2008

Viktigt Om du kör versionen av SQL Server 2008 måste du installera den här korrigeringsfilen.

Korrigeringsfil för problemet gavs först ut i den kumulativa uppdateringen 8. Mer information om hur du skaffar den kumulativa uppdateringspaket för SQL Server 2008 klickar du på följande artikelnummer och läser artikeln i Microsoft Knowledge Base:

975976 kumulativ uppdateringspaket 8 för SQL Server 2008Obs! Eftersom på byggen är kumulativa, varje ny version av korrigeringsfilen innehåller alla snabbkorrigeringar och säkerhetskorrigering för alla säkerhetskorrigeringar som ingår i föregående SQL Server 2008. Vi rekommenderar att du använder den senaste utgåvan av korrigering som innehåller den här snabbkorrigeringen. För mer information klickar du på följande artikelnummer och läser artikeln i Microsoft Knowledge Base:

956909 i SQL Server 2008 bygger som har getts ut efter SQL Server 2008

Status

Microsoft har bekräftat att detta är ett problem i Microsoft-produkterna som nämns i avsnittet "Gäller".

Mer Information

Information för anropsstacken

Den här minnesläckan kan ses i standard-heap. Minst en läcka mönster blir 40 byte. Det här är storleken på den CXVariant strukturen för returvärdet. LFH heap kan inte visa 40 byte läcka på lämpligt sätt och kan visa läckage av 4 KB till 64 KB områden om du använder den ! heap-< heaphandle > - a -k på fullständiga dumpfilen.

Obs! Som standard använder Windows Server 2008, Windows Vista, Windows 7 och Windows Server 2008 R2 LFH heap för standardheapen i SQL Server-processen.

UMDH eller DebugDiag visar de läckande högarna ska vara av följande slag. UMDH, DebugDiag, och den ! heap-l kommando alla Visa detta som en gemensam skorsten för en läcka för returstatus problemet:

Obs! Beroende på vilken leverantör används kanske inte leverantörsinformationen om sqlncli10.


ntdll!RtlAllocateHeap+0001B970sqlncli10!CDataSource::DataConvert+0000C898
sqlncli10!CDataSource::OLEDBdataFromSQLdata+0000018C
sqlncli10!CStmt::ProcessReturnStatus+000001FA
sqlncli10!BATCHCTX::Run+000005BA
sqlncli10!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 >+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+00000230
sqlservr!CRpcInterfaces::Relay+00000982
sqlservr!CStmtExecProc::XretRemoteExec+00000732
sqlservr!CRemoteProcExecLevel::Execute+00000160
sqlservr!CStmtExecProc::XretWrapRemoteExec+000001D5
sqlservr!CStmtExecProc::XretExecExecute+0000078E
sqlservr!CXStmtExecProc::XretExecute+0000004E
sqlservr!CExecStmtLoopVars::ExecuteXStmtAndSetXretReturn+0000003C
sqlservr!CMsqlExecContext::ExecuteStmts<1,1>+000002AA
sqlservr!CMsqlExecContext::FExecute+00001023
sqlservr!CSQLSource::Execute+00001091
sqlservr!process_request+000006BC
sqlservr!process_commands+000003C4
sqlservr!SOS_Task::Param::Execute+0000016B
sqlservr!SOS_Scheduler::RunTask+000001A5
sqlservr!SOS_Scheduler::ProcessTasks+000002E7

Here are the call stacks for the SQL Variant output parameter leak for sql_variant:

ntdll!RtlAllocateHeap+0001B970
sqlncli10!CDataSource::DataConvert+0000BAD2
sqlncli10!CDataSource::OLEDBdataFromSQLdata+00000D18
sqlncli10!CStmt::ProcessReturnValue+00000BC5
sqlncli10!CTdsSqloledb::OnReturnValue+00000018
sqlncli10!BATCHCTX::ProcessReturnValue+00000366
sqlncli10!BATCHCTX::Run+000004AD
sqlncli10!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 >+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+00000230
sqlservr!CRpcInterfaces::Relay+00000982
sqlservr!CStmtExecProc::XretRemoteExec+00000732
sqlservr!CRemoteProcExecLevel::Execute+00000160
sqlservr!CStmtExecProc::XretWrapRemoteExec+000001D5
sqlservr!CStmtExecProc::XretExecExecute+0000078E
sqlservr!CXStmtExecProc::XretExecute+0000004E
sqlservr!CExecStmtLoopVars::ExecuteXStmtAndSetXretReturn+0000003C
sqlservr!CMsqlExecContext::ExecuteStmts<1,1>+000002AA
sqlservr!CMsqlExecContext::FExecute+00001023
sqlservr!CSQLSource::Execute+00001091
sqlservr!process_request+000006BC
sqlservr!process_commands+000003C4
sqlservr!SOS_Task::Param::Execute+0000016B

ntdll!RtlAllocateHeap+0001B970
sqlncli10!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+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 >+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+00000230
sqlservr!CRpcInterfaces::Relay+00000982
sqlservr!CStmtExecProc::XretRemoteExec+00000732
sqlservr!CRemoteProcExecLevel::Execute+00000160
sqlservr!CStmtExecProc::XretWrapRemoteExec+000001D5
sqlservr!CStmtExecProc::XretExecExecute+0000078E
sqlservr!CXStmtExecProc::XretExecute+0000004E
sqlservr!CExecStmtLoopVars::ExecuteXStmtAndSetXretReturn+0000003C
sqlservr!CMsqlExecContext::ExecuteStmts<1,1>+000002AA
sqlservr!CMsqlExecContext::FExecute+00001023
sqlservr!CSQLSource::Execute+00001091
sqlservr!process_request+000006BC
sqlservr!process_commands+000003C4

Referenser

Mer information om stegvis Servicing modellen för SQL Server klickar du på följande artikelnummer och läser artikeln i Microsoft Knowledge Base:

935897 en inkrementell Servicing modell är tillgänglig från SQL Server-teamet att leverera snabbkorrigeringar för rapporterade problem


Mer information om namngivning schemat för uppdateringar för SQL Server klickar du på följande artikelnummer och läser artikeln i Microsoft Knowledge Base:

822499 Nytt system för namngivning för Microsoft SQL Server-programuppdateringspaket

För mer information om terminologin för programuppdateringar klickar du på följande artikelnummer och läser artikeln i Microsoft Knowledge Base:

824684 beskrivning av standardterminologin som används för att beskriva Microsoft-programuppdateringar

Mer Information

Information om SQL Server 2008 R2 BPA

SQL Server 2008 R2 Best Practice Analyzer (SQL Server 2008 R2 BPA) innehåller en regel om du vill upptäcka situationer där SQL Server-instansen har länkade servrar som är konfigurerade för användning och korrigeringen tillämpas inte. SQL Server 2008 R2 BPA stöder både SQL Server 2008 och SQL Server 2008 R2.

Om du kör BPA-verktyget och varningen "Database Engine - länkad server minnesläcka fix saknas," behöver du undersöka de symtom som nämns i den här artikeln och använda den kumulativa uppdateringen som är lämplig.

Referenser

Regel programvara

Rubrik för regeln

Regel-ID

SQL Server 2008 R2 BPA-regel

länkad server minnesläcka fix saknas

RID3807






Författare (SMF): bruceye
Författare: ericzha
Teknisk granskare: tejasaks
Redigering: v-lynan

Behöver du mer hjälp?

Utöka dina kunskaper
Utforska utbildning
Få nya funktioner först
Anslut till Microsoft Insiders

Hade du nytta av den här informationen?

Tack för din feedback!

×