Compartir a través de


Las operaciones que desencadenan un examen del grupo de búferes pueden ejecutarse lentamente en equipos con memoria grande

En este artículo se describe cómo examinar el grupo de búferes de SQL Server puede tardar mucho tiempo en finalizar en equipos de gran memoria.

Se aplica a: SQL Server
Número de KB original: 4566579

Síntomas

Ciertas operaciones de Microsoft SQL Server desencadenan un examen del grupo de búferes (la memoria caché que almacena las páginas de base de datos en memoria). En sistemas que tienen una gran cantidad de memoria RAM (1 TB o superior), el escaneo del grupo de búferes puede llevar mucho tiempo. Esto ralentiza la operación que desencadenó el examen.

Operaciones que provocan un examen del grupo de búferes

Estas son algunas operaciones que pueden desencadenar un escaneo del grupo de búferes:

  • Inicio de la base de datos
  • Apagado o reinicio de la base de datos
  • Conmutación por error del grupo de disponibilidad
  • Eliminación de la base de datos (quitar)
  • Eliminación de archivos de una base de datos
  • Copia de seguridad completa o diferencial de la base de datos
  • Restauración de la base de datos
  • Restauración del registro de transacciones
  • Restauración en línea
  • DBCC CHECKDB o DBCC CHECKTABLE una operación

El registro de errores muestra que un examen tardó mucho tiempo

A partir de SQL Server 2016 SP3, SQL Server 2017 CU23 y SQL Server 2019 CU9, se agregó un mensaje de error al registro de errores de SQL Server para indicar que un examen del grupo de búferes tardó mucho tiempo (10 segundos o más):

El examen del grupo de búferes tardó 14 segundos: id. de base de datos 7, comando "BACKUP DATABASE", operación "FlushCache", búferes escaneados 115, búferes iterados totales 204640239, tiempo de espera 0 ms. Vea 'https://go.microsoft.com/fwlink/?linkid=2132602' para obtener más información.

Evento extendido para diagnosticar un escaneo largo

Además, a partir de las mismas compilaciones SQL Server 2016 SP3, SQL Server 2017 CU23 y SQL Server 2019 CU9 , se introdujo el evento extendido de buffer_pool_scan_complete para ayudarle a identificar exámenes de grupos de búferes largos.

Si un escaneo tarda más de 1 segundo, el XEvent se registrará de la siguiente manera cuando el evento esté habilitado.

nombre ID de base de datos tiempo_transcurrido_ms comando operación scanned_buffers total_iterated_buffers
escaneo_completo_del_pool_de_buffer 7 1308 RESPALDAR BASE DE DATOS FlushCache 243 19932814

Nota:

El umbral de XEvent es más pequeño para permitirle capturar información con una granularidad más fina.

Solución alternativa

Antes de SQL Server 2022, no había ninguna manera de eliminar este problema. No se recomienda realizar ninguna acción para limpiar el pool de búferes, ya que eliminar los búferes limpios (DBCC DROPCLEANBUFFERS) del pool de búferes puede dar lugar a una degradación significativa del rendimiento. La eliminación de páginas de base de datos de la memoria hará que las ejecuciones de consultas posteriores vuelvan a leer los datos de los archivos de base de datos en el disco. Este proceso de acceso a datos a través de E/S de disco hace que las consultas sean lentas.

En SQL Server 2022, este problema se mitiga porque los escaneos del grupo de búferes se realizan en paralelo mediante el uso de varios núcleos. Habrá una tarea por cada 8 millones de búferes (64 GB) en la que se seguirá utilizando un escaneo en serie si hay menos de 8 millones de búferes. Para obtener más información, vea Escaneo paralelo del grupo de búferes.

Más información

Para obtener más información sobre los problemas que pueden producirse en grupos de búferes de gran tamaño, vea SQL Server: gran cantidad de RAM y puntos de control en bases de datos.