REVISIÓN: pérdida de memoria virtual con gran número de forma simultánea abrir conjuntos de registros

Seleccione idioma Seleccione idioma
Id. de artículo: 312575 - Ver los productos a los que se aplica este artículo
Este artículo se ha archivado. Se ofrece "tal cual" y no se volverá a actualizar.
Expandir todo | Contraer todo

En esta página

Síntomas

Una aplicación o servicio con un gran número (más de 500) de abrir simultáneamente conjuntos de registros de ActiveX Data Objects (ADO) que se abren y cierran con frecuencia puede experimentar una pérdida de memoria virtual que conduce a la fragmentación de memoria y errores de memoria insuficiente.

Este problema puede producirse en cualquier versión de Microsoft Data Access Components (MDAC) 2.5 RTM (2.50.4403.12) entre SP1 2.6 (2.61.7326.6). Este problema no se produce en MDAC 2.7.

Este problema no es específica del proveedor; se puede producir con el proveedor nativo de SQL Server (SQLOLEDB.dll), el proveedor nativo de Oracle (msdaora.dll), el proveedor ODBC (msdasql.dll), el motor de cursor de cliente y cualquier componente que utiliza el código de memoria compartida.

Causa

Cuando se publican los conjuntos de registros, las rutinas de administración de memoria MDAC guardar la memoria asignada para ellos en una lista de "consulta" en lugar de realmente liberar la memoria. Esto se hace para evitar la sobrecarga producida por completamente liberación y reasignación de memoria.

De forma predeterminada, el código de administración de memoria compartida utilizado por (Msdatl2.dll) de MDAC 2.5 y MDAC 2.6 (Msdatl3.dll) guardará hasta 500 de estas asignaciones; nada sobre ese importe se libera a través de llamadas a la función VirtualFree .

Un error de codificación en el código de administración de memoria hace una llamada incorrecta a VirtualFree , de modo que realmente no se libera la memoria. El código devuelto desde VirtualFree no está activado y la aplicación no recibe ninguna indicación de que se ha perdido la memoria.

Solución

Para resolver este problema, obtenga el service pack más reciente de Microsoft MDAC 2.5. Para obtener información adicional, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:
293312INFO: Cómo obtener la más reciente de MDAC 2.5 Service Pack
La versión en inglés de esta revisión debe tener los atributos de archivo siguientes o 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 MDAC 2.5 sólo: Para resolver este problema, obtenga el Service Pack más reciente de Windows 2000. Para obtener información adicional, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:
260910Cómo obtener el Service Pack más reciente para Windows 2000
MDAC 2.6 Service Pack 1
   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	
				

Solución

Para evitar este problema, puede diseñar la aplicación o servicio para que los conjuntos de registros menor que 500 están abiertos simultáneamente.

Puede paliar el problema ajustando la configuración siguiente en el registro:
    HKLM\Software\Microsoft\MDAC         MaxReservedBlocks
    HKLM\Software\Microsoft\MDAC         ReservedMemorySize
				
nota que estas entradas del registro no existen de forma predeterminada; deberá agregar manualmente después. Ambas entradas son valores DWORD.

El valor predeterminado para MaxReservedBlocks es 500. Si aumenta este valor, más bloques se guardarán en lista de consulta del Administrador de memoria (y, por lo tanto, se producirá más uso de memoria en la aplicación) pero se volverán a los bloques. Si reduce este valor, aumentará la velocidad a la que se pierde memoria.

El valor predeterminado de ReservedMemorySize es 1 MB. Puede reducir este valor para limitar el tamaño de las asignaciones de memoria virtual; sin embargo, esto puede disminuir el rendimiento si se requiere más memoria que hay disponible en los bloques de memoria.

Estado

Microsoft ha confirmado que se trata de un problema de los productos de Microsoft enumerados en la sección "La información de este artículo se refiere a:" de este artículo.

MDAC 2.5

Este problema se corrigió por primera vez en MDAC 2.5 Service Pack 3 de Microsoft.Este problema se corrigió por primera vez en el Service Pack 3 de Windows 2000.

Más información

En MDAC 2.5, las asignaciones de memoria perdida constará completamente de memoria reservada y no páginas confirmadas que tendrá; por ejemplo:
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- --,
				
en MDAC 2.6 las asignaciones de memoria perdida contendrá al menos 10 KB (65536 bytes) de confirmar páginas; por ejemplo:
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- --,
				
en cualquier caso, supervisar la aplicación o servicio con el Monitor muestra un uso excesivo de bytes virtuales.

Propiedades

Id. de artículo: 312575 - Última revisión: lunes, 24 de febrero de 2014 - Versión: 4.1
La información de este artículo se refiere 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
Palabras clave: 
kbnosurvey kbarchive kbmt kbqfe kbhotfixserver kbmdac250sp3fix kbbug kbfix kbmdac260fix kbwin2000sp3fix KB312575 KbMtes
Traducción automática
IMPORTANTE: Este artículo ha sido traducido por un software de traducción automática de Microsoft (http://support.microsoft.com/gp/mtdetails) en lugar de un traductor humano. Microsoft le ofrece artículos traducidos por un traductor humano y artículos traducidos automáticamente para que tenga acceso en su propio idioma a todos los artículos de nuestra base de conocimientos (Knowledge Base). Sin embargo, los artículos traducidos automáticamente pueden contener errores en el vocabulario, la sintaxis o la gramática, como los que un extranjero podría cometer al hablar el idioma. Microsoft no se hace responsable de cualquier imprecisión, error o daño ocasionado por una mala traducción del contenido o como consecuencia de su utilización por nuestros clientes. Microsoft suele actualizar el software de traducción frecuentemente.
Haga clic aquí para ver el artículo original (en inglés): 312575

Enviar comentarios

 

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