버그 번호: 115124 (콘텐츠 유지 관리)
VSTS 버그 번호: 316475
VSTS 버그 번호: 365460
Microsoft는 Microsoft SQL Server 2008 수정 프로그램 다운로드 가능한 하나의 파일로 배포합니다. 수정 프로그램은 계속 누적 되는 형태 이므로 각 새 릴리스에 모든 핫픽스를 포함 하며 수정 프로그램 릴리스의 이전 SQL Server 2008에 포함 된 모든 보안 수정 프로그램
증상
Microsoft SQL Server 2005에서 또는 SQL Server 2008에서는 연결 된 서버를 사용 하 여 원격 서버에서 저장된 프로시저를 실행 합니다. 저장된 프로시저를 여러 번 실행 한 후 SQL Server 서비스의 메모리 사용량을 빠르게 증가 함을 알 수 있습니다. 또한 다양 한 오류 메시지 관련된 소모 MemTolLeave 주소 공간에서 메모리를 SQL Server 2008 오류 로그 파일에 기록 될 수 있습니다.
참고: 복제, 로그 전달 또는 미러링을 사용할 때이 문제가 발생할 수도 있습니다. 이러한 기능은 연결된 된 서버를 사용 하는 저장된 프로시저를 사용할 수 있습니다.
원인
이 문제는 연결된 된 서버를 사용 하는 쿼리를 실행할 때 발생 하는 메모리 누수가 발생 합니다. 누수는 원격 저장된 프로시저를 호출할 때 발생 합니다. 두 종류의 잠재적인 누수는
-
항상 누수 되는 저장된 프로시저 호출의 반환 값입니다. 이것은 작은 있지만 일반 누수가 있습니다.
-
Sqlvariant 데이터 형식의 매개 변수는 원격 저장된 프로시저 호출.
해결 방법
SQL Server 2008 서비스 팩 1
이 문제에 대 한 수정 프로그램은 먼저 SQL Server 2008 서비스 팩 1 용 누적 업데이트 3에서 릴리스 되었습니다. 이 누적 업데이트 패키지에 대 한 자세한 내용은 Microsoft 기술 자료의 다음 문서 번호를 클릭 합니다.
SQL Server 2008 서비스 팩 1 용 971491 누적 업데이트 패키지 3참고: 빌드는 계속 누적 되는 형태 이므로 각 새 수정 프로그램 릴리스의 모든 핫픽스와 들어 및 이전 SQL Server 2008에 포함 된 모든 보안 수정 프로그램 릴리스의 수정. 이 핫픽스가 포함 된 최신 수정 릴리스를 적용 고려 하는 것이 좋습니다. 자세한 내용은 다음 문서 번호를 클릭하여 Microsoft 기술 자료의 다음 문서를 확인하십시오.
SQL Server 2008 서비스 팩 1이 출시 된 이후에 릴리스된 970365 는 SQL Server 2008 빌드
Microsoft SQL Server 2008 핫픽스는 특정 SQL Server 서비스 팩에 대 한 만들어졌습니다. SQL Server 2008 서비스 팩 1을 설치 하려면 SQL Server 2008 서비스 팩 1 핫픽스를 적용 해야 합니다. 기본적으로 SQL Server 서비스 팩에서 제공 되는 모든 핫픽스는 다음 SQL Server 서비스 팩에 포함 됩니다.
SQL Server 2005 서비스 팩 3
이 문제에 대 한 수정 프로그램은 먼저 SQL Server 2005 서비스 팩 3 누적 업데이트 6에서 릴리스 되었습니다. 이 누적 업데이트 패키지에 대 한 자세한 내용은 Microsoft 기술 자료의 다음 문서 번호를 클릭 합니다.
SQL Server 2005 서비스 팩 3 용 974648 누적 업데이트 패키지 6참고: 빌드는 계속 누적 되는 형태 이므로 각 새 수정 프로그램 릴리스의 모든 핫픽스와 들어 및 이전 SQL Server 2005에 포함 된 모든 보안 수정 프로그램 릴리스의 수정. 이 핫픽스가 포함 된 최신 수정 릴리스를 적용 고려 하는 것이 좋습니다. 자세한 내용은 다음 문서 번호를 클릭하여 Microsoft 기술 자료의 다음 문서를 확인하십시오.
SQL Server 2005 서비스 팩 3이 출시 된 이후에 릴리스된 960598 SQL Server 2005 빌드
Microsoft SQL Server 2005 핫픽스는 특정 SQL Server 서비스 팩에 대 한 만들어졌습니다. SQL Server 2005 서비스 팩 3을 설치 하려면 SQL Server 2005 서비스 팩 3 핫픽스를 적용 해야 합니다. 기본적으로 SQL Server 서비스 팩에서 제공 되는 모든 핫픽스는 다음 SQL Server 서비스 팩에 포함 됩니다.
SQL Server 2008의 릴리스 버전
중요: SQL Server 2008의 릴리스 버전을 실행 하는 경우이 수정 프로그램을 설치 해야 합니다.
이 문제에 대 한 수정 프로그램이 누적 업데이트 8에서 릴리스 먼저 되었습니다. SQL Server 2008에 대 한이 누적 업데이트 패키지를 구하는 방법에 대 한 자세한 내용은 Microsoft 기술 자료의 다음 문서 번호를 클릭 합니다.
SQL Server 2008 975976 누적 업데이트 패키지 8참고: 빌드는 계속 누적 되는 형태 이므로 각 새 수정 프로그램 릴리스의 모든 핫픽스와 들어 및 이전 SQL Server 2008에 포함 된 모든 보안 수정 프로그램 릴리스의 수정. 이 핫픽스가 포함 된 최신 수정 릴리스를 적용 고려 하는 것이 좋습니다. 자세한 내용은 다음 문서 번호를 클릭하여 Microsoft 기술 자료의 다음 문서를 확인하십시오.
SQL Server 2008이 출시 된 이후에 릴리스된 956909 는 SQL Server 2008 빌드
상태
Microsoft는 이 문제가 '적용 대상' 섹션에 나열된 Microsoft 제품의 문제임을 확인했습니다.
자세한 내용
호출 스택 정보
기본 힙에서이 메모리 누수를 볼 수 있습니다. 적어도 하나의 누수 패턴 40 바이트 됩니다. 반환 값에 대해 CXVariant 구조체의 크기입니다. LFH 힙 나타나지 않을 수 있습니다 40 바이트 적절 하 게 노출 하 고 사용 하는 경우 누수 및 4 KB의 64KB 범위 표시 될 수 있습니다는 ! < heaphandle >-a-k 힙 전체 덤프 파일에서 명령.
참고: 기본적으로 Windows Server 2008, Windows Vista, Windows 7 및 Windows Server 2008 r 2는 SQL Server 프로세스의 기본 힙 힙 LFH를 사용 합니다.
UMDH DebugDiag 누설 스택을 다음과 같은 특성을 표시 합니다. UMDH, DebugDiag, 및 ! 힙-l 이 반환 상태 문제에 대 한 누수에 대 한 일반적인 스택 표시 명령:
참고: 사용 되는 공급자에 따라 공급자 정보 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
참조
SQL Server 대 한 증분 서비스 모델에 대 한 자세한 내용은 Microsoft 기술 자료의 다음 문서 번호를 클릭 합니다.
보고 된 문제에 대 한 핫픽스를 제공 하는 SQL Server 팀 935897 는 증분 서비스 모델은
SQL Server 업데이트의 명명 스키마에 대 한 자세한 내용은 Microsoft 기술 자료의 다음 문서 번호를 클릭 합니다.
822499 Microsoft SQL Server 소프트웨어 업데이트 패키지의 새 명명 스키마
소프트웨어 업데이트 용어에 대한 자세한 내용을 보려면, 다음 문서 번호를 클릭하여 Microsoft 기술 자료의 문서를 확인하십시오.
Microsoft 소프트웨어 업데이트를 설명 하는 데 사용 되는 표준 용어에 대 한 824684 설명
자세한 내용
SQL Server 2008 R2 BPA 정보
SQL Server 2008 R2 최상의 연습 분석기 (SQL Server 2008 R2 BPA)는 SQL Server 인스턴스에 연결 된 서버에 사용 하기 위해 구성 된 경우를 검색 하는 규칙을 제공 하 고이 수정 프로그램이 적용 되지 않습니다. SQL Server 2008 R2 BPA는 SQL Server 2008 및 SQL Server 2008 r 2를 모두 지원합니다.
BPA 도구를 실행 하 고 "데이터베이스 엔진-누락, 연결 된 서버 메모리 누수 수정"는 경고가 발생 하는 경우이 문서에서 설명 하는 증상을 조사 하 여 해당 하는 누적 업데이트를 적용 해야 합니다.
참조
규칙 소프트웨어 |
규칙 제목 |
규칙 식별자 |
SQL Server 2008 R2 BPA 규칙 |
연결 된 서버 메모리 누수 수정 없음 |
RID3807 |
저자 (SME): bruceye
작성자: ericzha
기술 검토자: tejasaks
편집기: v-lynan