Después de aplicar esta actualización, debe agregar la marca de seguimiento -T8075 como parámetro de inicio para habilitar este cambio.
Síntomas
Al ejecutar una consulta en una versión de 64 bits de Microsoft SQL Server 2012, recibe un mensaje de error de memoria insuficiente similar al siguiente en el registro de errores de SQL Server:
Nota
Errores al asignar páginas: FAIL_PAGE_ALLOCATION 513
Las consultas tardan mucho tiempo en finalizar la ejecución y se encuentran SOS_MEMORY_TOPLEVELBLOCKALLOCATOR espera.
Al examinar los siguientes puntos de información, verá que hay muy poco espacio de direcciones virtuales disponible:
- SECCIÓN DBCC MEMORYSTATUS - Sección Recuento de procesos/sistemas - Memoria virtual disponible
- DMV: sys.dm_os_process_memory - virtual_address_space_available_kb de columna
Estos valores empiezan alrededor de 8 terabytes (TB) en un proceso de x64 y continúan descendiendo y alcanzando unos pocos gigabytes (GB).
Cuando se encuentra en una etapa en la que el espacio de direcciones virtual disponible es muy bajo, las consultas que intentan realizar la asignación de memoria también pueden encontrar un tipo de espera de CMEMTHREAD.
Los siguientes puntos de datos seguirán aumentando con el tiempo:
- DMV: sys.dm_os_process_memory y sys.dm_os_memory_nodes - virtual_address_space_reserved_kb de columna
- DBCC MEMORYSTATUS- sección Administrador de memoria - VM Reserved
Estos valores normalmente aumentarán en múltiplos del valor "memoria máxima del servidor" hasta casi 8 TB.
Causa
Cuando el proceso de SQL Server ha alcanzado el estado donde Total Server Memory = Target Server Memory = max server memory, there are policies in SQL Server memory manager to let new allocations request multiple 8 KB pages to succeedy temporarily. El patrón de asignación repetido en tal condición puede causar fragmentación de los bloques de memoria y el consumo del espacio de direcciones virtuales. Si este proceso se repite muchas veces, el SQL Server espacio de direcciones virtual se agotará y observará los síntomas que se mencionaron anteriormente.
Resolución
Información sobre la actualización acumulativa
El problema se corrigió por primera vez en la siguiente actualización acumulativa de SQL Server.
Recomendación: Instalar la actualización acumulativa más reciente para SQL Server
Cada nueva actualización acumulativa de SQL Server contiene todas las revisiones y todas las correcciones de seguridad que se incluyeron con la actualización acumulativa anterior. Le recomendamos que descargue e instale las actualizaciones acumulativas más recientes para SQL Server:
Esta revisión impide tanto la pérdida de memoria como la reducción continua del espacio de direcciones virtual disponible que puede experimentar.
Estado
Microsoft ha confirmado que se trata de un problema de los productos de Microsoft que se enumeran en la sección "Aplicable a".
Más información
Windows 2012 R2 permite que el espacio de direcciones virtuales aumente hasta 128 TB. Por lo tanto, es posible que no observe este problema en entornos de Windows 2012 R2. Para obtener más información, consulta el siguiente tema en el Centro de desarrollo de Windows:
Límites de memoria para versiones de Windows y Windows Server
Si ve un crecimiento continuo en el espacio de direcciones virtual incluso después de aplicar la corrección, puede determinar qué consultas o operaciones solicitan grandes fragmentos de memoria mediante el Page_allocated evento extendido. Un script de ejemplo tiene este aspecto:
CREATE EVENT SESSION [memory_tracking] ON SERVER ADD EVENT sqlos.page_allocated( ACTION(package0.callstack,sqlos.cpu_id,sqlos.task_address,sqlos.worker_address,sqlserver.database_id,sqlserver.query_hash,sqlserver.request_id,sqlserver.session_id,sqlserver.sql_text) WHERE ([number_pages]>(1))) ADD TARGET package0.event_file(SET filename=N'E:\Data\MSSQL11.MSSQLSERVER\MSSQL\Log\memory_tracking.xel') WITH (MAX_MEMORY=4096 KB,EVENT_RETENTION_MODE=ALLOW_SINGLE_EVENT_LOSS,MAX_DISPATCH_LATENCY=30 SECONDS,MAX_EVENT_SIZE=0 KB,MEMORY_PARTITION_MODE=PER_CPU,TRACK_CAUSALITY=OFF,STARTUP_STATE=OFF) GONormalmente se trata de copias de seguridad de registros y operaciones de mantenimiento de índices, que se realizan con frecuencia.