BUG #: 115124 (Contentbeheer)VSTS bug nummer: 316475VSTS 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 uitgebrachtHotfixes 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+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
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 problemenVoor 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 ServerVoor 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): bruceyeAuteur: ericzhaTech Reviewer: tejasaksRedacteur: v-lynan