FIX: 동시에 열린 많은 레코드 집합에 가상 메모리 누수가 발생한다

기술 자료 번역 기술 자료 번역
기술 자료: 312575 - 이 문서가 적용되는 제품 보기.
이 문서가 보관되었습니다. "그대로" 제공되었으며, 업데이트가 되지 않을 것입니다.
모두 확대 | 모두 축소

이 페이지에서

현상

자주 열고 닫는 ADO(ActiveX Data Objects) 레코드 집합을 500개보다 많이 열어 놓은 응용 프로그램이나 서비스에 메모리 조각화와 메모리 부족 오류를 일으키는 가상 메모리 누수가 발생할 수 있습니다.

이 문제는 Microsoft Data Access Components(MDAC) 2.5 RTM(2.50.4403.12)과 2.6 SP1(2.61.7326.6) 사이의 버전에서 발생할 수 있습니다. 이 문제는 MDAC 2.7에서는 발생하지 않습니다.

이 문제는 공급자와 관련된 것이 아니며, SQL Server 기본 공급자(Sqloledb.dll), Oracle 기본 공급자(Msdaora.dll), ODBC 공급자(Msdasql.dll), 클라이언트 커서 엔진 및 공유 메모리 코드를 사용하는 모든 구성 요소에서 발생할 수 있습니다.

원인

레코드 집합의 사용이 중단되면 MDAC 메모리 관리 루틴은 메모리를 실제로 해제하는 대신 "look-aside" 리스트에 할당된 메모리를 저장합니다. 이것은 메모리를 완전히 해제하고 다시 할당함으로써 발생되는 오버헤드를 피하기 위해 수행됩니다.

기본적으로 MDAC 2.5(Msdatl2.dll)와 MDAC 2.6(Msdatl3.dll)이 사용하는 공유 메모리 관리 코드는 이러한 할당을 최대 500개까지 저장합니다. 이 개수를 초과하는 할당은 VirtualFree 함수를 호출하여 해제됩니다.

메모리 관리 코드의 코딩 오류로 인해 VirtualFree를 잘못 호출하여 메모리는 실제로 해제되지 않습니다. VirtualFree의 반환 코드가 확인되지 않으며 응용 프로그램에 메모리가 누수되었다는 메시지가 나타나지 않습니다.

해결 방법

이 문제를 해결하려면 Microsoft MDAC 2.5의 최신 서비스 팩을 구하십시오. 자세한 내용은 Microsoft 기술 자료의 다음 문서를 참조하십시오.
293312 INFO: 최신 MDAC 2.5 서비스 팩을 구하는 방법
이 수정 프로그램의 영어 버전은 아래와 같거나 그 이상의 파일 특성을 가집니다.

MDAC 2.5 SP2
   날짜           버전           크기       파일 이름
   ------------------------------------------------
   2001-10-25   2.52.8025.0   78,096   Msdatl2.dll		
   2001-10-25   2.52.8025.0   53,520   Msdatt.dll		
   2001-10-25   2.52.8025.0  303,376   Msdasql.dll	
   2001-10-25   2.52.8025.0   16,384   Msdasqlr.dll
   2001-11-15                          Q312575_MDAC25_SP2_x86_en.exe
				
MDAC 2.5만 해당 이 문제를 해결하려면 Windows 2000의 최신 서비스 팩을 구하십시오. 자세한 내용은 Microsoft 기술 자료의 다음 문서를 참조하십시오.
260910 최신 Windows 2000 서비스 팩을 구하는 방법
MDAC 2.6 SP1
   날짜           버전           크기       파일 이름
   ------------------------------------------------   
   2001-10-25   2.61.8025.0   94,480   Msdatl3.dll	
   2001-10-25   2.52.8025.0   24,848   Msdatt.dll	
   2001-10-25   2.61.8025.0  307,472   Msdasql.dll	
   2001-10-25   2.61.8025.0   16,384   Msdasqlr.dll
   2001-11-15                          Q312575_MDAC26_SP1_x86_en.exe

해결 과정

이 문제를 해결하려면 동시에 여는 레코드 집합이 500개 미만이 되도록 응용 프로그램이나 서비스를 설계하십시오.

레지스트리에서 다음 설정을 조정하여 문제를 완화할 수 있습니다.
    HKLM\Software\Microsoft\MDAC         MaxReservedBlocks
    HKLM\Software\Microsoft\MDAC         ReservedMemorySize
				
이러한 레지스트리 항목은 기본적으로 존재하지 않으며 수동으로 추가해야 합니다. 두 항목 모두 DWORD 값입니다.

MaxReservedBlocks의 기본값은 500입니다. 이 값을 늘리면 메모리 관리자의 look-aside 리스트에 블록이 더 많이 저장되어 응용 프로그램에서 메모리를 더 많이 사용하게 되지만 블록이 재사용됩니다. 이 값을 낮추면 메모리 누수 비율이 증가합니다.

ReservedMemorySize의 기본값은 1MB입니다. 이 값을 낮추어 가상 메모리 할당 크기를 제한할 수 있습니다. 그러나 메모리 블록에서 제공할 수 있는 것보다 더 많은 메모리가 필요할 경우 성능이 떨어질 수 있습니다.

현재 상태

Microsoft는 본 문서의 시작 부분에 나열한 제품에서 이 문제를 확인했습니다.

MDAC 2.5

이 문제는 Microsoft MDAC 2.5 서비스 팩 3에서 처음 수정되었습니다. 이 문제는 Windows 2000 서비스 팩 3에서 처음 수정되었습니다.

추가 정보

MDAC 2.5에서 누수된 메모리 할당은 모두 예약된 메모리로 구성되며 커밋된 페이지를 포함하지 않습니다. 예를 들면 다음과 같습니다.
08230000,      Private,    1048576,     1, -RW-,     
     08230000, Reserve,    1048576,,       -RW- --,
08330000,      Private,    1048576,     1, -RW-,     
     08330000, Reserve,    1048576,,       -RW- --,
08430000,      Private,    1048576,     1, -RW-,     
     08430000, Reserve,    1048576,,       -RW- --,
08530000,      Private,    1048576,     1, -RW-,     
     08530000, Reserve,    1048576,,       -RW- --,
				
MDAC 2.6에서 누수된 메모리 할당은 최소 10KB(65,536바이트)의 커밋된 메모리를 포함합니다. 예를 들면 다음과 같습니다.
1BF60000,      Private,    1048576,     2, -RW-,     
     1BF60000, Private,      65536,,       -RW- --,
     1BF70000, Reserve,     983040,,       -RW- --,
1C060000,      Private,    1048576,     2, -RW-,     
     1C060000, Private,      65536,,       -RW- --,
     1C070000, Reserve,     983040,,       -RW- --,
1C160000,      Private,    1048576,     2, -RW-,     
     1C160000, Private,      65536,,       -RW- --,
     1C170000, Reserve,     983040,,       -RW- --,
				
두 경우 모두 성능 모니터를 사용하여 응용 프로그램이나 서비스를 모니터링하면 가상 바이트를 과도하게 사용하는 것으로 나타납니다.



Microsoft 제품 관련 기술 전문가들과 온라인으로 정보를 교환하시려면 Microsoft 뉴스 그룹에 참여하시기 바랍니다.

속성

기술 자료: 312575 - 마지막 검토: 2014년 2월 24일 월요일 - 수정: 4.0
본 문서의 정보는 다음의 제품에 적용됩니다.
  • Microsoft Data Access Components 2.5
  • Microsoft Data Access Components 2.5 서비스 팩 1
  • Microsoft Data Access Components 2.5 서비스 팩 2
  • Microsoft Data Access Components 2.6
  • Microsoft Data Access Components 2.6 서비스 팩 1
키워드:?
kbnosurvey kbarchive kbbug kbfix kbqfe kbwin2000sp3fix kbmdac260fix kbmdac250sp3fix kbhotfixserver KB312575

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com