CORRECÇÃO: fuga de memória virtual com grande número de conjuntos de registos abrir em simultâneo

Traduções de Artigos Traduções de Artigos
Artigo: 312575 - Ver produtos para os quais este artigo se aplica.
Este artigo foi arquivado. Este artigo é oferecido "tal como está" e deixará de ser actualizado.
Expandir tudo | Reduzir tudo

Nesta página

Sintomas

Uma aplicação ou serviço com um grande número (mais de 500) de conjuntos de registos ActiveX Data Objects (ADO) abertas em simultâneo que são abertos e fechados frequentemente, poderá detectar uma fuga de memória virtual que conduz a fragmentação de memória e erros de falta de memória.

Este problema pode ocorrer em qualquer versão do Microsoft Data Access Components (MDAC) entre 2,5 RTM (2.50.4403.12) e o SP1 2.6 (2.61.7326.6). Este problema não ocorre no MDAC 2.7.

Este problema não é específica do fornecedor; pode ocorrer com o fornecedor nativo do SQL Server (SQLOLEDB.dll), o fornecedor nativo da Oracle (msdaora.dll), o fornecedor ODBC (Msdasql.dll), o motor do cursor de cliente e qualquer componente que usa o código de memória partilhada.

Causa

Quando forem publicados conjuntos de registos, as rotinas de gestão de memória MDAC guardar memória atribuída para-los numa lista "aspecto lado" em vez, na realidade, libertar a memória. Pode fazê-lo para evitar a sobrecarga incorrida pelo completamente libertar e reatribuir a memória.

Por predefinição, o código de gestão de memória partilhada utilizado pelo MDAC 2.5 (Msdatl2.dll) e o MDAC 2.6 (Msdatl3.dll) irá guardar até 500 destas atribuições; nada sobre esse valor é libertado através de chamadas para a função VirtualFree .

Um erro de programação no código de gestão de memória efectua uma chamada incorrecta para VirtualFree , para que a memória, na realidade, não é libertada. O código de retorno do VirtualFree não estiver seleccionado e a aplicação recebe sem indicação de que a memória foi transmitida.

Resolução

Para resolver este problema, obtenha o service pack mais recente do Microsoft MDAC 2.5. Para obter informações adicionais, clique no número de artigo que se segue para visualizar o artigo na Microsoft Knowledge Base:
293312INFO: Como obter o mais recente MDAC 2.5 Service Pack
A versão inglesa desta correcção deverá ter os seguintes atributos de ficheiro ou posteriores:

MDAC 2.5 SP2
   Date          Version      Size      File name     
   -------------------------------------------------
   25-Oct-2001   2.52.8025.0   78,096   Msdatl2.dll		
   25-Oct-2001   2.52.8025.0   53,520   Msdatt.dll		
   25-Oct-2001   2.52.8025.0  303,376   Msdasql.dll	
   25-Oct-2001   2.52.8025.0   16,384   Msdasqlr.dll
   15-Nov-2001                          Q312575_MDAC25_SP2_x86_en.exe
				
para o MDAC 2.5 apenas: Para resolver este problema, obtenha o service pack mais recente do Windows 2000. Para obter informações adicionais, clique no número de artigo que se segue para visualizar o artigo na Microsoft Knowledge Base:
260910Como obter o Service Pack mais recente do Windows 2000
MDAC 2.6 SP1
   Date          Version      Size      File name     
   -------------------------------------------------
   25-Oct-2001   2.61.8025.0   94,480   Msdatl3.dll	
   25-Oct-2001   2.61.8025.0   24,848   Msdatt.dll	
   25-Oct-2001   2.61.8025.0  307,472   Msdasql.dll	
   25-Oct-2001   2.61.8025.0   16,384   Msdasqlr.dll
   15-Nov-2001                          Q312575_MDAC26_SP1_x86_en.exe	
				

Como contornar

Para contornar este problema, pode estruturar a aplicação ou serviço, de modo que menos de 500 conjuntos de registos estão abertos em simultâneo.

Pode minimizar o problema, ajustando as seguintes definições no registo:
    HKLM\Software\Microsoft\MDAC         MaxReservedBlocks
    HKLM\Software\Microsoft\MDAC         ReservedMemorySize
				
nota que estas entradas de registo não existem por predefinição, terá de, em seguida, adicionar manualmente. As entradas são valores DWORD.

O valor predefinido para MaxReservedBlocks é 500. Se aumentar este valor, mais blocos serão guardados na lista de aspecto lado o Gestor de memória (e assim incorrer em mais utilização da memória da aplicação) mas os blocos serão utilizados novamente. Se diminuir este valor, irá aumentar a velocidade à qual a memória é transmitida.

O valor predefinido para ReservedMemorySize é 1 MB. Pode reduzir este valor para limitar o tamanho de atribuições de memória virtual; no entanto, este pode diminuir o desempenho se for necessária mais memória do que aquela que está disponível em blocos de memória.

Ponto Da Situação

A Microsoft confirmou que este é um problema nos produtos da Microsoft listados no início deste artigo.

MDAC 2.5

Este problema foi corrigido pela primeira vez no MDAC 2.5 Service Pack 3.Este problema foi corrigido pela primeira vez no Windows 2000 Service Pack 3.

Mais Informação

No MDAC 2.5, as atribuições de fuga de memória irá consistir totalmente em memória reservada e terá não consolidadas páginas; por exemplo:
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- --,
				
no MDAC 2.6 as atribuições de fuga de memória irão conter menos de 10 KB (65536 bytes) de consolidada páginas; por exemplo:
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- --,
				
em qualquer dos casos, monitorizar a aplicação ou serviço com o Monitor de desempenho mostra uma utilização excessiva de bytes virtuais.

Propriedades

Artigo: 312575 - Última revisão: 24 de fevereiro de 2014 - Revisão: 4.1
A informação contida neste artigo aplica-se a:
  • Microsoft Data Access Components 2.5
  • Microsoft Data Access Components 2.5 Service Pack 1
  • Microsoft Data Access Components 2.5 Service Pack 2
  • Microsoft Data Access Components 2.6
  • Microsoft Data Access Components 2.6 Service Pack 1
Palavras-chave: 
kbnosurvey kbarchive kbmt kbqfe kbhotfixserver kbmdac250sp3fix kbbug kbfix kbmdac260fix kbwin2000sp3fix KB312575 KbMtpt
Tradução automática
IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine translation ou MT), não tendo sido portanto revisto ou traduzido por humanos. A Microsoft tem artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais. O objectivo é simples: oferecer em Português a totalidade dos artigos existentes na base de dados do suporte. Sabemos no entanto que a tradução automática não é sempre perfeita. Esta pode conter erros de vocabulário, sintaxe ou gramática? erros semelhantes aos que um estrangeiro realiza ao falar em Português. A Microsoft não é responsável por incoerências, erros ou estragos realizados na sequência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza actualizações frequentes ao software de tradução automática (MT). Obrigado.
Clique aqui para ver a versão em Inglês deste artigo: 312575

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