FIX: Het geheugengebruik van een SQL Server-service neemt toe snel tijdens het uitvoeren van een query die een gekoppelde server met SQL Server 2005 of SQL Server 2008

BUG #: 115124 (Contentbeheer)
VSTS bug nummer: 316475
VSTS bug nummer: 365460

Microsoft distribueert oplossingen voor Microsoft SQL Server 2008 als één downloadbaar bestand. Aangezien de oplossingen cumulatief zijn, bevat elke nieuwe release alle hotfixes en alle beveiligingscorrecties die waren opgenomen in de voorgaande SQL Server 2008 releases.

Symptomen

In Microsoft SQL Server 2005 of SQL Server 2008, kunt u een opgeslagen procedure uitvoeren op een externe server via gekoppelde server. Na het uitvoeren van opgeslagen procedures vaak, kan het gebeuren dat het geheugengebruik van de SQL Server-service neemt snel toe. Ook de verschillende fout berichten gerelateerde uitputting van het geheugen in de adresruimte van de MemTolLeave vastgelegd in het foutenlogboek bestand van SQL Server 2008.

Opmerking Dit probleem kan ook optreden wanneer u replicatie, logboekbestanden of spiegelen. Deze functies kunnen de opgeslagen procedures waarmee u een gekoppelde server gebruiken.

Oorzaak

Dit probleem wordt veroorzaakt door een geheugenlek dat zich voordoet wanneer u een query uitvoert die gebruikmaakt van een gekoppelde server. De lekkage treedt op wanneer u een extern opgeslagen procedure aanroepen. Er zijn twee soorten potentiële lekkage:

  • De geretourneerde waarde van de opgeslagen procedure-aanroep, die altijd wordt gelekt. Dit is een klein, maar regelmatig lek.

  • Een oproep voor extern opgeslagen procedure met parameters van het type sqlvariant uit.

Oplossing

SQL Server 2008 servicepack 1


De correctie voor dit probleem werd voor het eerst uitgebracht in de cumulatieve Update 3 voor SQL Server 2008 Service Pack 1. Voor meer informatie over dit cumulatieve updatepakket klikt u op het volgende artikelnummer om het artikel in de Microsoft Knowledge Base:

971491 cumulatieve updatepakket 3 voor SQL Server 2008 Service Pack 1Opmerking Omdat de opbouw cumulatief van opzet zijn, elke nieuwe versie van de correctie bevat alle hotfixes en de beveiligingscorrecties die opgenomen in de vorige versie van SQL Server 2008 zijn release opgelost. Microsoft raadt u aan de toepassing van de meest recente hotfix-versie waarin deze hotfix is opgenomen. Voor meer informatie klikt u op het volgende artikelnummer om het artikel in de Microsoft Knowledge Base weer te geven:

970365 met de SQL Server 2008 bouwt die zijn uitgebracht na Service Pack 1 voor SQL Server 2008 is uitgebracht
Hotfixes voor Microsoft SQL Server 2008 worden voor een specifieke servicepacks voor SQL Server gemaakt. U moet een hotfix voor SQL Server 2008 Service Pack 1 toepassen op een installatie van SQL Server 2008 Service Pack 1. Voor elke hotfix die wordt geleverd in een servicepack van SQL Server is standaard opgenomen in het volgende servicepack voor SQL Server.

SQL Server 2005 servicepack 3


De correctie voor dit probleem werd voor het eerst uitgebracht in de cumulatieve Update 6 voor SQL Server 2005 Service Pack 3. Voor meer informatie over dit cumulatieve updatepakket klikt u op het volgende artikelnummer om het artikel in de Microsoft Knowledge Base:

974648 cumulatieve updatepakket 6 voor SQL Server 2005 Service Pack 3Opmerking Omdat de opbouw cumulatief van opzet zijn, elke nieuwe versie van de correctie bevat alle hotfixes en de beveiligingscorrecties die opgenomen in de vorige versie van SQL Server 2005 zijn release opgelost. Microsoft raadt u aan de toepassing van de meest recente hotfix-versie waarin deze hotfix is opgenomen. Voor meer informatie klikt u op het volgende artikelnummer om het artikel in de Microsoft Knowledge Base weer te geven:

960598 bouwt de SQL Server 2005 die zijn uitgebracht na Service Pack 3 voor SQL Server 2005 is uitgebracht.
Hotfixes voor Microsoft SQL Server 2005 worden gemaakt voor een specifieke servicepacks voor SQL Server. U moet een hotfix voor SQL Server 2005 Service Pack 3 toepassen op een installatie van SQL Server 2005 Service Pack 3. Voor elke hotfix die wordt geleverd in een servicepack van SQL Server is standaard opgenomen in het volgende servicepack voor SQL Server.

De versie van SQL Server 2008

Belangrijk Als u de versie van SQL Server 2008 uitvoert, moet u deze correctie installeren.

De correctie voor dit probleem werd voor het eerst uitgebracht in cumulatieve Update 8. Voor meer informatie over het verkrijgen van dit cumulatieve updatepakket voor SQL Server 2008, klikt u op het volgende artikelnummer in de Microsoft Knowledge Base:

975976 cumulatieve updatepakket 8 voor SQL Server 2008Opmerking Omdat de opbouw cumulatief van opzet zijn, elke nieuwe versie van de correctie bevat alle hotfixes en de beveiligingscorrecties die opgenomen in de vorige versie van SQL Server 2008 zijn release opgelost. We raden het toepassen van de meest recente hotfix-versie waarin deze hotfix is opgenomen. Voor meer informatie klikt u op het volgende artikelnummer om het artikel in de Microsoft Knowledge Base weer te geven:

956909 met de SQL Server 2008 bouwt die zijn uitgebracht nadat SQL Server 2008 werd uitgebracht.

Status

Microsoft heeft bevestigd dat dit probleem kan optreden in de Microsoft-producten die worden vermeld in de sectie 'Van toepassing op'.

Meer informatie

Informatie over de call-stack

Dit geheugenlek kan worden gezien in de standaardheap. Ten minste één lek patroon moet 40 bytes. Dit is de grootte van de CXVariant-structuur voor het resultaat. LFH heaps mogelijk niet weergegeven 40 bytes op de juiste wijze lekken en lekkage van 4 KB tot 64 KB bereiken kunnen weergeven als u de ! < heaphandle > - a -k heap- op een dumpbestand van het volledige opdracht.

Opmerking Standaard Windows Server 2008, Windows Vista, Windows 7 en Windows Server 2008 R2 LFH heap gebruikt voor standaardheap in de SQL Server-proces.

UMDH geeft DebugDiag de lekke stapels van de volgende aard. UMDH, DebugDiag, en de ! heap-l- alle deze weergeven als een gemeenschappelijke schoorsteen voor een lek voor het probleem van de status van het resultaat van de opdracht:

Opmerking Afhankelijk van welke provider wordt gebruikt, kan gegevens van de provider niet sqlncli10 worden.


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

Referenties

Voor meer informatie over de incrementele Servicing-Model voor SQL Server, klikt u op het volgende artikelnummer om het artikel in de Microsoft Knowledge Base:

935897 een incrementele Servicing-Model is beschikbaar in de SQL Server-team voor het leveren van hotfixes voor gemelde problemen


Voor meer informatie over het naamgevingsschema voor SQL Server-updates klikt u op het volgende artikel in de Microsoft Knowledge Base:

822499 Nieuw naamgevingsschema voor software-updatepakketten voor Microsoft SQL Server

Voor meer informatie over terminologie voor software-updates klikt u op het volgende artikelnummer om het artikel in de Microsoft Knowledge Base weer te geven:

824684 beschrijving van de standaardterminologie die wordt gebruikt om software-updates voor Microsoft te beschrijven

Meer informatie

SQL Server 2008 R2 BPA-gegevens

De SQL Server 2008 R2 Best Practices Analyzer (SQL Server 2008 R2 BPA) bevat een regel voor het detecteren van gevallen waarin het exemplaar van SQL Server-servers die zijn geconfigureerd voor gebruik is gekoppeld en deze oplossing wordt niet toegepast. SQL Server 2008 R2 BPA ondersteunt zowel SQL Server 2008 en SQL Server 2008 R2.

Als u het hulpprogramma BPA en optreden van de waarschuwing "Database Engine - gekoppelde server geheugenlek correctie ontbreekt," moet u de symptomen die in dit artikel bedoelde onderzoeken en de cumulatieve update die van toepassing is.

Referenties

Regel Software

Titel van de regel

Regel-id

SQL Server 2008 R2 BPA-regel

gekoppelde server geheugenlek correctie ontbreekt

RID3807






Auteur (MKB): bruceye
Auteur: ericzha
Tech Reviewer: tejasaks
Redacteur: v-lynan

Meer hulp nodig?

Uw vaardigheden uitbreiden
Training verkennen
Als eerste nieuwe functies krijgen
Deelnemen aan Microsoft insiders

Was deze informatie nuttig?

Bedankt voor uw feedback.

×