Grupo de búferes híbrido

Se aplica a: SQL Server 2019 (15.x) y versiones posteriores.

El grupo de búferes híbrido permite que los objetos del grupo de búferes hagan referencia a las páginas de datos de los archivos de base de datos que residen en dispositivos de memoria persistente (PMEM), en lugar de tener que capturar copias de las páginas de datos del disco y almacenarlas en caché en la DRAM volátil. Esta característica se introdujo en SQL Server 2019 (15.x) y se ha mejorado más en SQL Server 2022 (16.x).

Diagrama que muestra el grupo de búferes, con y sin el grupo de búferes híbrido habilitado.

Los dispositivos de memoria persistente (PMEM) son direccionables por bytes y si se usa un sistema de archivos con reconocimiento de memoria persistente (como XFS, EXT4 o NTFS) de acceso directo (DAX), se puede tener acceso a los archivos del sistema de archivos mediante las API habituales del sistema de archivos del sistema operativo. Como alternativa, SQL Server puede realizar lo que se conoce como operaciones de carga y almacenamiento en las asignaciones de memoria de los archivos en el dispositivo PMEM. Esto permite que las aplicaciones compatibles con PMEM, como SQL Server, accedan a los archivos del dispositivo sin atravesar la pila de almacenamiento tradicional.

El grupo de búferes híbrido usa esta capacidad para realizar operaciones de carga y almacenamiento en archivos de asignación de memoria, a fin de usar el dispositivo PMEM tanto como caché para el grupo de búferes como ubicación de almacenamiento para los archivos de base de datos. Esto crea la situación única en la que una lectura lógica y una lectura física se convierten esencialmente en la misma operación. Los dispositivos de memoria persistentes son accesibles a través del bus de memoria, al igual que la DRAM volátil normal.

Por defecto, solo se almacenan en caché las páginas de datos sin errores en el módulo PMEM para el grupo de búferes híbridos. Para que una página se modifique y se marque como desfasada, se debe copiar del dispositivo PMEM a un grupo de búferes de DRAM, modificar y, finalmente, se podrá escribir una copia de la página modificada desde el DRAM de nuevo al módulo PMEM, en cuyo momento se puede marcar como limpia de nuevo. Este proceso tiene lugar con operaciones normales en segundo plano, como el punto de control o la escritura diferida, como si el módulo PMEM fuera un dispositivo de bloqueo estándar.

La característica de grupo de búferes híbrido está disponible para Windows y Linux. El dispositivo PMEM debe usar un sistema de archivos que admita DAX (DirectAccess). Todos los sistemas de archivos XFS, EXT4 y NTFS son compatibles con las extensiones DAX, lo que proporciona acceso al sistema de archivos directamente desde el espacio del usuario. SQL Server detectará directamente si alguno de los archivos de la base de datos se encuentra en un dispositivo de disco PMEM correctamente configurado y realizará automáticamente la asignación de memoria de los archivos de la base de datos al iniciar la base de datos o cuando se adjunte, restaure o cree una base de datos.

Para más información, consulte:

Habilitar el grupo de búferes híbrido

SQL Server 2019 (15.x) presenta el lenguaje dinámico de datos (DDL) para controlar el grupo de búferes híbrido.

En el ejemplo siguiente se habilita el grupo de búferes híbrido para una instancia de SQL Server:

ALTER SERVER CONFIGURATION SET MEMORY_OPTIMIZED HYBRID_BUFFER_POOL = ON;

De forma predeterminada, el grupo de búferes híbrido está deshabilitado en el ámbito de la instancia. Para que el cambio de configuración surta efecto, se debe reiniciar la instancia de SQL Server. Se requiere un reinicio para facilitar la asignación de suficientes páginas hash que den cabida a la capacidad total de PMEM en el servidor.

En el ejemplo siguiente se habilita el grupo de búferes híbrido para una base de datos específica.

ALTER DATABASE <databaseName> SET MEMORY_OPTIMIZED = ON;

De forma predeterminada, el grupo de búferes híbrido está habilitado en el ámbito de la base de datos.

Deshabilitar el grupo de búferes híbrido

El siguiente ejemplo deshabilita el grupo de búferes híbrido en el nivel de la instancia:

ALTER SERVER CONFIGURATION SET MEMORY_OPTIMIZED HYBRID_BUFFER_POOL = OFF;

De forma predeterminada, el grupo de búferes híbrido está deshabilitado en el ámbito del nivel. Para que se produzca este cambio, la instancia debe reiniciarse. El reinicio garantiza que se asignen suficientes páginas hash para el grupo de búferes, ya que ahora es necesario tener en cuenta la capacidad de PMEM en el servidor.

En el ejemplo siguiente se deshabilita el grupo de búferes híbrido para una base de datos específica.

ALTER DATABASE <databaseName> SET MEMORY_OPTIMIZED = OFF;

De forma predeterminada, el grupo de búferes híbrido está habilitado en el ámbito de base de datos y deshabilitado en el ámbito de servidor.

Ver la configuración del grupo de búferes híbrido

Mostrar el valor de tiempo de ejecución

En el ejemplo siguiente se devuelve el estado de configuración del grupo de búferes híbridos actual de la instancia.

SELECT * FROM
sys.server_memory_optimized_hybrid_buffer_pool_configuration;

En el ejemplo siguiente se enumeran las bases de datos y la configuración del nivel de base de datos para el grupo de búferes híbrido (is_memory_optimized_enabled).

También puede montar o dar formato al módulo PMEM sin habilitar DAX y tratarlo como un dispositivo de bloqueo normal (es decir, realizar la operación E/S a través del kernel). Cuando se configura de esta manera, SQL Server no puede usar ningún módulo PMEM para realizar operaciones direccionables por bytes (es decir, todas las llamadas usarán controladores de espacio de kernel).

SELECT name, is_memory_optimized_enabled FROM sys.databases;

Grupo de búferes híbridos con escritura directa

El grupo de búferes híbrido con el comportamiento de Escritura directa reduce el número de comandos memcpy que deben ejecutarse en datos modificados o páginas de índice que residen en dispositivos PMEM. Para ello, usa el búfer de registro persistente duradero como medio para modificar la página sin tener que copiarla en uno de los grupos de búferes de DRAM. En su lugar, las páginas de los archivos de base de datos que se encuentran en dispositivos PMEM se modifican directamente sin necesidad de almacenar en caché un grupo de búferes de DRAM y, posteriormente, vaciarlas de forma asincrónica en el disco. Este comportamiento sigue siendo conforme a la semántica del registro de escritura anticipada (WAL), ya que las filas (registro) del búfer del registro de transacciones persistentes se han escrito o protegido en medios duraderos. Se han observado importantes mejoras de rendimiento de las cargas de trabajo transaccionales al usar el grupo de búferes híbrido junto con el búfer de registro persistente de esta manera.

Para habilitar el modo de escritura directa, habilite el grupo de búferes híbrido y el búfer de registro persistente para una base de datos y habilite la marca de seguimiento 809 de inicio.

Procedimientos recomendados para el grupo de búferes híbrido

  • Al dar formato al dispositivo PMEM en Windows, use el tamaño de unidad de asignación más grande disponible para NTFS (2 MB en Windows Server 2019 y versiones posteriores) y asegúrese de que el dispositivo se ha formateado para DAX (DirectAccess).

  • Habilite la directiva Bloquear páginas en la memoria en Windows.

  • Los tamaños de archivo deben ser múltiplo de 2 MB (el módulo de 2 MB debe ser igual a cero).

  • Si la configuración del ámbito del servidor para el grupo de búferes híbrido está deshabilitada, ninguna base de datos de usuario utilizará esta característica.

  • Con la configuración de ámbito de servidor habilitada para el grupo de búferes híbrido, puede usar la configuración de ámbito de base de datos a fin de deshabilitar la característica para bases de datos de usuario individuales.

  • A partir de SQL Server 2019 (15.x) CU 3 (consulte KB4538118), el almacenamiento en caché de lectura está habilitado de forma predeterminada, un proceso en el que se realiza el seguimiento de las páginas más activas en el grupo de búferes híbrido y, a continuación, se promueven automáticamente a un grupo de búferes DRAM para mejorar el rendimiento.

  • A partir de SQL Server 2022 (16.x) CU 1, Escritura directa es el comportamiento predeterminado cuando el grupo de búferes híbrido se combina con el búfer de registro persistente. Esto debería mejorar el rendimiento de casi todas las cargas de trabajo, pero siempre existe una posibilidad de regresión y la CU debe probarse exhaustivamente antes de aplicarse. Si experimenta una regresión debido a este cambio de comportamiento, puede revertir al comportamiento anterior mediante la marca de seguimiento 898 de inicio.

  • A partir de SQL Server 2022 (16.x) CU 1, SQL Server ignorará la marca de seguimiento 809 al iniciarse. Tanto la marca de seguimiento 809 como la marca de seguimiento 898 solo se aplican a Windows y no a SQL Server en Linux. Las marcas de seguimiento solo se deben usar cuando un profesional certificado de Microsoft Server indique que así se haga.