Extensión del grupo de búferes

Se aplica a: SQL Server

A partir de SQL Server 2014 (12.x), la extensión del grupo de búferes proporciona una perfecta integración de una extensión de la memoria de acceso aleatorio no volátil (es decir, una unidad de estado sólido) con el grupo de búferes del Motor de base de datos para mejorar considerablemente el rendimiento de E/S. La extensión del grupo de búferes no está disponible en todas las ediciones de SQL Server . Para obtener más información, vea Características compatibles con las ediciones de SQL Server 2016.

Ventajas de la extensión del grupo de búferes

El propósito principal de una base de datos de SQL Server es almacenar y recuperar datos, por lo que una E/S de disco intensiva es una de las características principales del Motor de base de datos. Dado que las operaciones de E/S de disco pueden consumir muchos recursos y tardar bastante tiempo en completarse, SQL Server se centra en hacer la E/S muy eficaz. El grupo de búferes se utiliza como origen principal de asignación de memoria de SQL Server. La administración de búfer es un componente clave para lograr esta eficacia. El componente de administración de búfer consta de dos mecanismos: el administrador de búfer para acceder a las páginas de bases de datos y actualizarlas, y el grupo de búferes para reducir la E/S de archivos de base de datos.

Las páginas de datos y de índice se leen desde el disco en el grupo de búferes y las páginas modificadas (también conocidas como páginas desfasadas) se escriben en el disco. La presión de memoria en los puntos de comprobación de la base de datos y el servidor hace que las páginas desfasadas (activas) de la memoria caché del búfer se expulsen de la memoria caché y se escriban en discos mecánicos y después se lean de nuevo en la memoria caché. Estas operaciones de E/S suelen ser pequeñas lecturas y escrituras aleatorias del orden de 4 a 16 kB de datos. Los patrones aleatorios de E/S pequeños incurren en búsquedas frecuentes, compitiendo por el brazo del disco mecánico, lo que aumenta la latencia de E/S y reduce el rendimiento de E/S global del sistema.

El enfoque típico para solucionar estos cuellos de botella de E/S consiste en agregar más DRAM o, como alternativa, agregar ejes SAS de alto rendimiento. Aunque estas opciones son útiles, presentan unas desventajas importantes: la DRAM es más cara que las unidades de almacenamiento de datos y agregar ejes aumenta el gasto de la inversión para la adquisición de hardware y los costes operativos debido al mayor consumo energético y a la mayor probabilidad de que se produzca un error en un componente.

La característica de extensión del grupo de búferes extiende la memoria caché del grupo de búferes con almacenamiento no volátil (generalmente SSD). Debido a esta extensión, el grupo de búferes puede contener un espacio de trabajo de la base de datos mayor, lo que fuerza la paginación de operaciones de E/S entre la RAM y las SSD. Esto descarga de forma efectiva las pequeñas operaciones de E/S aleatorias de los discos mecánicos a las SSD. Debido a la menor latencia y al mejor rendimiento de E/S aleatoria de las SSD, la extensión del grupo de búferes mejora considerablemente el rendimiento de las operaciones de E/S.

En la lista siguiente se describen las ventajas de la característica de extensión del grupo de búferes.

  • Mayor rendimiento de E/S aleatoria

  • Menor latencia de E/S

  • Mayor rendimiento de las transacciones

  • El rendimiento de lectura mejora con un grupo de búferes híbrido mayor

  • Una arquitectura de almacenamiento en memoria caché que puede aprovechar las unidades de memoria de bajo costo actuales y futuras

Conceptos

Los siguientes términos son aplicables a la característica de extensión del grupo de búferes.

Unidad de estado sólido (SSD)
Las unidades de estado sólido almacenan los datos en memoria (RAM) de forma persistente. Para obtener más información, vea esta definición.

Buffer
En SQL Server, un búfer es una página de 8 kB en memoria (el mismo tamaño que una página de índice o de datos). Por tanto, la memoria caché del búfer está dividida en páginas de 8 kB. Una página permanece en la memoria caché del búfer hasta que el administrador de búfer necesita el área del búfer para leer en ella más datos. Los datos solo vuelven a escribirse en el disco si se han modificado. Estas páginas modificadas en memoria se conocen como páginas desfasadas. Una página está limpia cuando es equivalente a su imagen de la base de datos en el disco. Los datos de la memoria caché del búfer se pueden modificar varias veces antes de que se vuelvan a escribir en el disco.

Grupo de búferes
También se llama memoria caché del búfer. El grupo de búferes es un recurso global compartido por todas las bases de datos para sus páginas de datos en caché. El tamaño máximo y mínimo de la memoria caché del grupo de búferes se determina durante el inicio o cuando la instancia de SQL Server se reconfigura dinámicamente mediante sp_configure. Este tamaño determina el número máximo de páginas que se pueden almacenar en memoria caché en el grupo de búferes en cualquier momento en la instancia en ejecución.

La máxima memoria que puede confirmar la extensión de grupo de búferes puede verse limitada por las demás aplicaciones que se ejecutan en el equipo, en caso de que ejerzan una presión considerable sobre la memoria.

Punto de control
Un punto de comprobación crea un punto conocido correcto desde el que el Motor de base de datos puede empezar a aplicar los cambios incluidos en el registro de transacciones durante la recuperación después de un cierre inesperado o un bloqueo del sistema. Un punto de comprobación escribe las páginas desfasadas y la información del registro de transacciones de la memoria al disco y, además, registra información acerca del registro de transacciones. Para obtener más información, consulte Puntos de comprobación de base de datos (SQL Server).

Detalles

El almacenamiento SSD se utiliza como extensión del subsistema de memoria en lugar del subsistema de almacenamiento en disco. Es decir, el archivo de la extensión del grupo de búferes permite que el administrador del grupo de búferes utilice tanto memoria DRAM como NAND-Flash para mantener un grupo de búferes mucho mayor de páginas normales en memoria de acceso aleatorio no volátil respaldada por SSD. Esto crea una jerarquía de almacenamiento en memoria caché de varios niveles, siendo el nivel 1 (L1) la DRAM y el nivel 2 (L2) el archivo de extensión del grupo de búferes en la SSD. Solo las páginas limpias se escriben en la memoria caché L2, lo que ayuda a mantener la seguridad de los datos. El administrador de búfer controla el movimiento de páginas limpias entre las memorias caché L1 y L2.

En la ilustración siguiente se proporciona información general sobre la arquitectura del grupo de búferes con respecto a otros componentes de SQL Server .

Arquitectura de la extensión del grupo de búferes SSD

Cuando está habilitada, la extensión del grupo de búferes especifica el tamaño y la ruta de acceso del archivo de almacenamiento en caché del grupo de búferes en la SSD. Este archivo es una extensión contigua del almacenamiento en la SSD y se configura de forma estática durante el inicio de la instancia de SQL Server. Las modificaciones de los parámetros de configuración del archivo solo se pueden hacer cuando la característica de extensión del grupo de búferes está deshabilitada. Cuando la extensión del grupo de búferes está deshabilitada, toda la configuración relacionada se quita del Registro. El archivo de la extensión del grupo de búferes se elimina tras el cierre de la instancia de SQL Server.

Limitaciones de las capacidades

SQL Server Enterprise Edition permite un tamaño máximo de la extensión del grupo de búferes de 32 veces el valor de max_server_memory.

SQL Server Standard Edition permite un tamaño máximo de la extensión del grupo de búferes de 4 veces el valor de max_server_memory.

Prácticas recomendadas

Se aconseja seguir estas prácticas recomendadas.

  • Tras habilitar la extensión del grupo de búferes por primera vez, se recomienda reiniciar la instancia de SQL Server para aprovechar las ventajas derivadas de un rendimiento máximo.

  • Establezca la extensión del grupo de búferes de modo que la proporción entre el tamaño de la memoria física (max_server_memory) y el tamaño de la extensión del grupo de búferes no sea superior a 1:16. Puede ser óptima una proporción menor entre 1:4 y 1:8. Para obtener más información sobre cómo establecer la opción max_server_memory, vea Opciones de configuración de memoria de servidor.

  • Pruebe la extensión del grupo de búferes minuciosamente antes de implementarla en un entorno de producción. Una vez en producción, evite realizar cambios de configuración en el archivo o desactivar la característica. Estas actividades pueden afectar negativamente al rendimiento del servidor porque el tamaño del grupo de búferes se reduce considerablemente cuando se deshabilita la característica. Cuando está deshabilitada, la memoria empleada para admitir la característica no se recupera hasta que no se reinicia la instancia de SQL Server. Sin embargo, si se vuelve a habilitar la característica, la memoria se reutilizará sin reiniciar la instancia.

Devolver información sobre la extensión del grupo de búferes

Puede utilizar las siguientes vistas de administración dinámica para mostrar la configuración de la extensión del grupo de búferes y devolver información acerca de las páginas de datos de la extensión.

En el objeto Buffer Manager de SQL Server hay disponibles contadores de rendimiento para hacer un seguimiento de las páginas de datos en el archivo de la extensión del grupo de búferes. Para obtener más información, vea los contadores de rendimiento de la extensión del grupo de búferes.

Están disponibles los siguientes Xevents.

XEvent Descripción Parámetros
sqlserver.buffer_pool_extension_pages_written Se desencadena cuando una página o un grupo de páginas se expulsan del grupo de búferes y se escriben en el archivo de extensión del grupo de búferes. number_page

first_page_id

first_page_offset

initiator_numa_node_id
sqlserver.buffer_pool_extension_pages_read Se desencadena cuando se lee en el grupo de búferes una página del archivo de la extensión del grupo de búferes. number_page

first_page_id

first_page_offset

initiator_numa_node_id
sqlserver.buffer_pool_extension_pages_evicted Se desencadena cuando se expulsa una página del archivo de la extensión del grupo de búferes. number_page

first_page_id

first_page_offset

initiator_numa_node_id
sqlserver.buffer_pool_eviction_thresholds_recalculated Se desencadena cuando se calcula el umbral de expulsión. warm_threshold

cold_threshold

pages_bypassed_eviction

eviction_bypass_reason

eviction_bypass_reason_description
Descripción de la tarea Tema
Habilitar y configurar la extensión del grupo de búferes ALTER SERVER CONFIGURATION (Transact-SQL)
Modificar la configuración de la extensión del grupo de búferes ALTER SERVER CONFIGURATION (Transact-SQL)
Ver la configuración de la extensión del grupo de búferes sys.dm_os_buffer_pool_extension_configuration (Transact-SQL)
Supervisar la extensión del grupo de búferes sys.dm_os_buffer_descriptors (Transact-SQL)

Contadores de rendimiento