Pool de mémoires tampons hybrideHybrid Buffer Pool

S’APPLIQUE À : ouiSQL Server nonAzure SQL Database nonAzure SQL Data Warehouse nonParallel Data Warehouse APPLIES TO: yesSQL Server noAzure SQL Database noAzure SQL Data Warehouse noParallel Data Warehouse

Le pool de mémoires tampons hybride permet au moteur de base de données d’accéder directement aux pages de données dans les fichiers de base de données stockés sur des appareils à mémoire persistante (PMEM).Hybrid Buffer Pool allows the database engine to directly access data pages in database files stored on persistent memory (PMEM) devices. Cette fonctionnalité est introduite dans SQL Server 2019 - PreviewSQL Server 2019 preview.This feature is introduced in SQL Server 2019 - PreviewSQL Server 2019 preview.

Dans un système traditionnel sans mémoire persistante, SQL Server met en cache les pages de données dans le pool de mémoires tampons.In a traditional system without PMEM, SQL Server caches data pages in the buffer pool. Avec le pool de mémoires tampons hybride, SQL Server passe outre l’exécution d’une copie de la page dans la partie DRAM du pool de mémoires tampons ; il accède à la page directement sur le fichier de base de données qui réside sur un appareil PMEM.With hybrid buffer pool, SQL Server skips performing a copy of the page into the DRAM-based portion of the buffer pool, and instead accesses the page directly on the database file that lives on a PMEM device. L’accès en lecture aux fichiers de données sur les appareils PMEM pour le pool de mémoires tampons hybride s’effectue directement en suivant un pointeur vers les pages de données de l’appareil PMEM.Read access to data files on PMEM devices for hybrid buffer pool is performed directly by following a pointer to the data pages on the PMEM device.

Seules les pages nettoyées sont accessibles directement sur un appareil PMEM.Only clean pages can be accessed directly on a PMEM device. Quand une page est marquée comme modifiée, elle est copiée dans le pool de mémoires tampons DRAM avant d’être écrite sur l’appareil PMEM et marquée comme étant nettoyée de nouveau.When a page is marked as dirty it is copied to the DRAM buffer pool before eventually being written back to the PMEM device and marked as clean again. Cela se produit pendant les opérations de point de contrôle habituelles.This will occur during regular checkpoint operations. Le mécanisme permettant de copier le fichier de l’appareil PMEM vers la mémoire DRAM est une opération d’E/S mappée en mémoire (MMIO) directe. On dit également que les fichiers de données dans SQL Server sont dans un état d’éveil à la présence d’un environnement virtualisé.The mechanism to copy the file from the PMEM device to DRAM is direct memory-mapped I/O (MMIO) and is also referred to as the enlightenment of data files within SQL Server.

La fonctionnalité de pool de mémoires tampons hybride est disponible pour Windows et Linux.The hybrid buffer pool feature is available for both Windows and Linux. L’appareil PMEM doit être formaté avec un système de fichiers qui prend en charge DAX (DirectAccess).The PMEM device must be formatted with a filesystem that supports DAX (DirectAccess). Les systèmes de fichiers XFS, EXT4 et NTFS prennent tous en charge DAX.The XFS, EXT4, and NTFS file systems all have support for DAX. SQL Server détecte automatiquement si les fichiers de données résident sur un appareil PMEM correctement mis en forme, et effectue le mappage en mémoire dans l’espace utilisateur.SQL Server will automatically detect if data files reside on an appropriately formatted PMEM device and perform memory mapping in user space. Ce mappage est effectué lors du démarrage, quand une nouvelle base de données est attachée, restaurée ou créée, ou quand la fonctionnalité de pool de mémoires tampons hybride est activée pour une base de données.This mapping happens upon startup, when a new database is attached, restored, created, or when the hybrid buffer pool feature is enabled for a database.

Pour plus d’informations sur la prise en charge de la mémoire persistante par Windows Server, consultez Déployer une mémoire persistante sur Windows Server.For more on Windows Server support for PMEM, see deploy persistent memory on Windows Server.

Pour plus d’informations sur la configuration de SQL Server sur Linux pour des appareils PMEM, consultez Déployer une mémoire persistante.For more on configuring SQL Servers on Linux for PMEM devices, see deploy persistent memory.

Activer le pool de mémoires tampons hybrideEnable hybrid buffer pool

SQL Server 2019 - PreviewSQL Server 2019 preview introduit un langage dynamique de données (DDL) permettant de contrôler le pool de mémoires tampons hybride.introduces dynamic data language (DDL) to control hybrid buffer pool.

L’exemple suivant active le pool de mémoires tampons hybride pour une instance de SQL Server :The following example enables hybrid buffer pool for an instance of SQL Server:

ALTER SERVER CONFIGURATION SET MEMORY_OPTIMIZED HYBRID_BUFFER_POOL = ON;

Par défaut, le pool de mémoires tampons hybride est désactivé dans l’étendue de l’instance.By default, hybrid buffer pool is set to disable at the instance scope. Notez que pour que la modification du paramètre prenne effet, l’instance de SQL Server doit être redémarrée.Note in order for the setting change to take effect, the SQL Server instance must be restarted. Un redémarrage est nécessaire afin de faciliter l’allocation de pages de hachage suffisantes pour prendre en compte la capacité PMEM totale sur le serveur.A restart is needed to facilitate allocating sufficient hash pages, to account for total PMEM capacity on the server.

L’exemple suivant active le pool de mémoires tampons hybride pour une base de données spécifique.The following example enables hybrid buffer pool for a specific database.

ALTER DATABASE <databaseName> SET MEMORY_OPTIMIZED = ON;

Par défaut, le pool de mémoires tampons hybride est activé dans l’étendue de la base de données.By default, hybrid buffer pool is set to enable at the database scope.

Désactiver le pool de mémoires tampons hybrideDisable hybrid buffer pool

L’exemple suivant désactive le pool de mémoires tampons hybride pour une instance de SQL Server :The following example disables hybrid buffer pool for an instance of SQL Server:

ALTER SERVER CONFIGURATION SET MEMORY_OPTIMIZED HYBRID_BUFFER_POOL = OFF;

Par défaut, le pool de mémoires tampons hybride est désactivé dans l’étendue de l’instance.By default, hybrid buffer pool is set to disable at the instance scope. Notez que pour que la modification du paramètre prenne effet, l’instance de SQL Server doit être redémarrée.Note in order for the setting change to take effect, the SQL Server instance must be restarted. Un redémarrage est nécessaire afin d’empêcher une allocation trop élevée de pages de hachage, étant donné que la capacité PMEM sur le serveur n’a pas besoin d’être prise en compte.A restart is needed to prevent over allocation of hash pages, as PMEM capacity on the server does not need to be accounted for.

L’exemple suivant désactive le pool de mémoires tampons hybride pour une base de données spécifique.The following example disables hybrid buffer pool for a specific database.

ALTER DATABASE <databaseName> SET MEMORY_OPTIMIZED = OFF;

Par défaut, le pool de mémoires tampons hybride est activé dans l’étendue de la base de données.By default, hybrid buffer pool is set to enable at the database scope.

Afficher la configuration du pool de mémoires tampons hybrideView hybrid buffer pool configuration

L’exemple suivant retourne l’état actuel de la configuration système du pool de mémoires tampons hybride pour une instance de SQL Server.The following example returns the current status, of the hybrid buffer pool system configuration, for an instance of SQL Server.

SELECT *
FROM sys.configurations
WHERE
    name = 'hybrid_buffer_pool';

L’exemple suivant retourne deux tables :The following example returns two tables:

  • La première indique l’état actuel de la configuration système du pool de mémoires tampons hybride pour une instance de SQL Server.The first shows the current status of hybrid buffer pool system configuration for an instance of SQL Server.
  • La seconde liste les bases de données et le paramètre de niveau de base de données pour le pool de mémoires tampons hybride (is_memory_optimized_enabled).The second lists the databases and the database level setting for hybrid buffer pool (is_memory_optimized_enabled).
SELECT * FROM sys.configurations WHERE name = 'hybrid_buffer_pool';

SELECT name, is_memory_optimized_enabled FROM sys.databases;

Bonnes pratiques pour le pool de mémoires tampons hybrideBest Practices for hybrid buffer pool

Il n’est pas recommandé d’activer le pool de mémoires tampons hybride sur des instances avec moins de 16 Go de RAM.It is not recommended to enable hybrid buffer pool on instances with less than 16-GB RAM.

Quand vous formatez votre appareil PMEM sur Windows, utilisez la plus grande taille d’unité d’allocation disponible pour NTFS (2 Mo dans Windows Server 2019) et vérifiez que l’appareil a été formaté pour DAX (Direct Access).When formatting your PMEM device on Windows, use the largest allocation unit size available for NTFS (2 MB in Windows Server 2019) and ensure the device has been formatted for DAX (Direct Access).

Les tailles de fichiers doivent être un multiple de 2 Mo (modulo 2 Mo doit être égal à zéro).Files sizes should be a multiple of 2 MB (modulo 2 MB should equal zero).

Si le paramètre d’étendue serveur pour le pool de mémoires tampons hybride est défini sur désactivé, ce dernier n’est utilisé par aucune base de données utilisateur.If the server scoped setting for Hybrid buffer pool is set to disabled, Hybrid buffer pool will not be used by any user database.

Si le paramètre d’étendue serveur pour la mémoire tampon hybride est activé, vous pouvez désactiver l’utilisation du pool de mémoires tampons hybride pour des bases de données utilisateur individuelles en suivant les étapes permettant de désactiver le pool de mémoires tampons hybride au niveau de la base de données pour ces bases de données utilisateur.If the server scoped setting for Hybrid Buffer is enabled, you can disable Hybrid buffer pool usage for individual user databases by following the steps to disable Hybrid buffer pool at the database scoped level for those user databases.