Oprava: Služby SQL Server využití paměti zvyšuje rychle při spuštění dotazu, který používá propojený server SQL Server 2005 nebo SQL Server 2008

Chyba č: 115124 (Údržba obsahu)
VSTS číslo chyby: 316475
VSTS číslo chyby: 365460

Společnost Microsoft distribuuje opravy Microsoft SQL Server 2008 jako jednoho souboru ke stažení. Protože jsou kumulativní opravy, každá nová verze tedy obsahuje všechny opravy hotfix a opravit všechny opravy zabezpečení, které byly součástí předchozích SQL Server 2008 release.

Příznaky

V Microsoft SQL Server 2005 nebo SQL Server 2008 spuštění uložené procedury na vzdáleném serveru pomocí propojeného serveru. Po spuštění uložené procedury mnohokrát můžete zjistit rychle zvyšuje využití paměti služby SQL Server. Různé chybové zprávy související vyčerpávání paměti v adresovém prostoru MemTolLeave může být zaznamenána v souboru errorlog SQL Server 2008.

Poznámka: Tomuto problému může dojít také při použití replikace protokolu expedice nebo zrcadlení. Tyto funkce mohou používat uložené procedury používající propojeného serveru.

Příčina

Tento problém je způsoben nevracení paměti, ke kterým dochází při spuštění dotazu, který používá propojený server. Nevracení paměti dochází při volání vzdáleného uložená procedura. Existují dva druhy potenciální úniky:

  • Vrácená hodnota volání uložené procedury, které vždy byly prozrazeny. Je to malé, ale pravidelné nevracení.

  • Volání vzdáleného uložené procedury s výstupní parametry typu dat hodnotu sqlvariant .

Řešení

SQL Server 2008 Service Pack 1


Oprava tohoto problému byla vydána nejprve v kumulativní aktualizaci 3 pro SQL Server 2008 Service Pack 1. Další informace o tomto balíčku kumulativní aktualizace klepněte na následující číslo článku databáze Microsoft Knowledge Base:

971491 kumulativní aktualizace balíčku 3 pro SQL Server 2008 Service Pack 1Poznámka: Vzhledem k tomu, sestavení jsou kumulativní, každá nová verze oprava obsahuje všechny opravy hotfix a opravit všechny opravy zabezpečení, které byly součástí předchozích SQL Server 2008 release. Společnost Microsoft doporučuje zvážit použití nejnovější vydání oprava, která obsahuje tuto opravu hotfix. Další informace získáte v následujícím článku znalostní báze Microsoft Knowledge Base:

970365 SQL Server 2008 sestavení, které byly vydány po vydání SQL Server 2008 Service Pack 1
Microsoft SQL Server 2008 opravy hotfix jsou vytvořeny pro konkrétní aktualizace service Pack pro SQL Server. Opravy hotfix serveru SQL Server 2008 Service Pack 1 musí použít k instalaci aplikace SQL Server 2008 Service Pack 1. Ve výchozím žádné opravy hotfix, která je poskytována v aktualizace service pack serveru SQL Server je součástí další aktualizaci service pack pro SQL Server.

SQL Server 2005 Service Pack 3


Oprava tohoto problému byla vydána nejprve v kumulativní aktualizace 6 pro SQL Server 2005 Service Pack 3. Další informace o tomto balíčku kumulativní aktualizace klepněte na následující číslo článku databáze Microsoft Knowledge Base:

974648 kumulativní aktualizace 6 pro SQL Server 2005 Service Pack 3Poznámka: Vzhledem k tomu, sestavení jsou kumulativní, každá nová verze oprava obsahuje všechny opravy hotfix a verzí oprav všech oprav zabezpečení, které byly součástí předchozích SQL Server 2005. Společnost Microsoft doporučuje zvážit použití nejnovější vydání oprava, která obsahuje tuto opravu hotfix. Další informace získáte v následujícím článku znalostní báze Microsoft Knowledge Base:

960598 SQL Server 2005 vytvoří, které byly vydány po vydání SQL Server 2005 Service Pack 3
Opravy hotfix pro Microsoft SQL Server 2005 jsou vytvořeny pro konkrétní aktualizace service Pack pro SQL Server. Opravy hotfix serveru SQL Server 2005 Service Pack 3 musí použít k instalaci aplikace SQL Server 2005 Service Pack 3. Ve výchozím žádné opravy hotfix, která je poskytována v aktualizace service pack serveru SQL Server je součástí další aktualizaci service pack pro SQL Server.

Verze produktu SQL Server 2008

Důležité: Pokud používáte verzi systému SQL Server 2008, je nutné nainstalovat tuto opravu.

Oprava tohoto problému byla vydána nejprve v kumulativní aktualizaci 8. Další informace o možnostech získání tohoto balíčku kumulativní aktualizace pro SQL Server 2008 klepnutím na následující číslo článku databáze Microsoft Knowledge Base:

975976 kumulativní aktualizace balíčku 8 pro SQL Server 2008Poznámka: Vzhledem k tomu, sestavení jsou kumulativní, každá nová verze oprava obsahuje všechny opravy hotfix a opravit všechny opravy zabezpečení, které byly součástí předchozích SQL Server 2008 release. Doporučujeme zvážit použití nejnovější vydání oprava, která obsahuje tuto opravu hotfix. Další informace získáte v následujícím článku znalostní báze Microsoft Knowledge Base:

956909 SQL Server 2008 sestavení, které byly vydány po vydání SQL Server 2008

Stav

Společnost Microsoft potvrdila, že se jedná o problém v produktech společnosti Microsoft, které jsou uvedeny v části "Platí pro".

Další informace

Informace v zásobníku volání

Toto nevracení paměti lze zobrazit v výchozí haldy. Netěsnost alespoň jeden vzorek bude 40 bajtů. Je to velikost struktury CXVariant vrácené hodnoty. LFH haldách nemusí zobrazit 40 bajtů se nevrací správným způsobem a může zobrazit nevrací 4 KB 64 KB oblastí použijete-li ! haldy < heaphandle > - a -k na celý výpis souboru.

Poznámka: Ve výchozím nastavení Windows Server 2008, Windows Vista, Windows 7 a Windows Server 2008 R2 použije LFH haldy pro výchozí haldy v procesu serveru SQL Server.

UMDH nebo DebugDiag ukazuje vyzařovací zásobníky se k povaze. UMDH, DebugDiag a ! – l haldy příkazu se zobrazují všechny to jako společným komínem nevracení návratový stav problému:

Poznámka: V závislosti na zprostředkovatele, který je používán nemusí být informace zprostředkovatele 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

Odkazy

Další informace o přírůstkové Model servis pro SQL Server získáte v následujícím článku znalostní báze Microsoft Knowledge Base:

935897 dílčí Model obsluhy je k dispozici z týmu SQL Server doručit opravy hotfix pro nahlášené potíže


Další informace o schéma názvů pro aktualizace serveru SQL Server klepněte na následující číslo článku databáze Microsoft Knowledge Base:

822499 Nové schéma přidělování názvů balíčkům aktualizací softwaru Microsoft SQL Server pro

Pro další informace o terminologii používané v aktualizacích softwaru, klepněte na následující číslo článku k zobrazení článku v databázi Microsoft Knowledge Base:

824684 Popis standardní terminologie používané při popisu aktualizací softwaru společnosti Microsoft

Další informace

Informace o SQL Server 2008 R2 Analyzátoru osvědčených postupů

SQL Server 2008 R2 Best Practice Analyzer (SQL Server 2008 R2 Analyzátoru osvědčených postupů) obsahuje pravidlo umožňuje zjistit případy, ve kterých má instance serveru SQL Server propojené servery, které jsou nakonfigurovány pro použití a není použita tato oprava. SQL Server 2008 R2 Analyzátoru osvědčených postupů podporuje SQL Server 2008 a SQL Server 2008 R2.

Je-li spustit nástroj Analyzátor osvědčených postupů a dojde k upozornění, "Databázový stroj - opravu nevracení paměti propojený server, chybí," je třeba zkoumat příznaky uvedené v tomto článku a použít kumulativní aktualizaci, která je vhodná.

Odkazy

Pravidla Software

Název pravidla

Identifikátor pro pravidla

SQL Server 2008 R2 Analyzátoru osvědčených postupů pravidla

chybějící opravu nevracení paměti propojený server

RID3807






Autor (MSP): bruceye
Zapisovatel: ericzha
Odborný recenzent: tejasaks
Redaktor: v-lynan

Potřebujete další pomoc?

Rozšiřte své znalosti a dovednosti
Projít školení
Získejte nové funkce jako první
Připojit se k programu Microsoft Insider

Byly tyto informace užitečné?

Děkujeme za váš názor!

×