Pool de tampons hybride

S’applique à : SQL Server 2019 (15.x) et versions ultérieures

Le pool de mémoires tampons hybride permet aux objets de pool de mémoires tampons de faire référence à des pages de données dans des fichiers de base de données résidant sur des périphériques PMEM (Persistent Memory), au lieu de devoir récupérer une copie des pages de données auprès du disque et la mettre en cache dans la mémoire DRAM volatile. Cette fonctionnalité a été introduite dans SQL Server 2019 (15.x) et est améliorée dans SQL Server 2022 (16.x).

Diagramme montrant le pool de mémoires tampons, avec et sans activation du pool de mémoires tampons hybride.

Les appareils de mémoire persistante (PMEM) sont adressables par octet et si un système de fichiers prenant en charge la mémoire persistante (DAX) d’accès direct (par exemple, XFS, EXT4 ou NTFS) est utilisé, les fichiers du système de fichiers sont accessibles en utilisant les API du système de fichiers habituelles du système d’exploitation. SQL Server peut aussi effectuer des opérations connues sous le nom de chargement et stockage sur les cartes mémoire des fichiers sur le périphérique PMEM. Cela permet aux applications prenant en charge la mémoire PMEM (par exemple SQL Server) d’accéder aux fichiers du périphérique sans traverser la pile de stockage traditionnelle.

Le pool de mémoires tampons hybride se sert de cette capacité à réaliser des opérations de chargement et de stockage sur les fichiers mappés en mémoire afin d’utiliser le périphérique PMEM comme cache pour le pool de mémoires tampons et comme emplacement de stockage des fichiers de base de données. Cela crée une situation unique où une lecture logique et une lecture physique deviennent fondamentalement la même opération. Les appareils de mémoire persistante sont accessibles via le bus de mémoire tout comme la DRAM volatile normale.

Par défaut, seules les pages de données propres sont mises en cache sur le module PMEM pour le pool de mémoires tampons hybride. Pour qu’une page soit modifiée et marquée comme incorrecte, elle doit être copiée à partir de l’appareil PMEM dans un pool de mémoires tampons DRAM et modifiée, puis une copie de la page modifiée est réécrite à partir de DRAM dans le module PMEM, où elle peut être marquée comme correcte à nouveau. Ce processus se produit à l’aide d’opérations en arrière-plan normales telles que le point de contrôle ou l’enregistreur différé, comme si le module PMEM était un périphérique d’entrée-sortie par blocs standard.

La fonctionnalité de pool de mémoires tampons hybride est disponible pour Windows et Linux. L’appareil PMEM doit utiliser un système de fichiers qui prend en charge DAX (DirectAccess). Les systèmes de fichiers XFS, EXT4 et NTFS prennent tous en charge les extensions DAX, ce qui leur permet d’accéder directement au système de fichiers à partir de l’espace utilisateur. SQL Server détermine automatiquement si des fichiers de données de base de données résident sur un appareil de disque PMEM correctement configuré et effectue automatiquement le mappage de mémoire nécessaire des fichiers de base de données au démarrage de la base de données, ou lorsqu’une base de données est attachée, restaurée ou créée.

Pour plus d'informations, consultez les pages suivantes :

Activer le pool de mémoires tampons hybride

SQL Server 2019 (15.x) introduit un langage DDL (Dynamic Data Language) permettant de contrôler le pool de mémoires tampons hybride.

L’exemple suivant active le pool de mémoires tampons hybride pour une instance de 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. L’instance SQL Server doit être redémarrée pour que la modification du paramètre s’applique. 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.

L’exemple suivant active le pool de mémoires tampons hybride pour une base de données spécifique.

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.

Désactiver le pool de mémoires tampons hybride

L’exemple suivant désactive le pool de mémoires tampons hybride au niveau de l’instance :

ALTER SERVER CONFIGURATION SET MEMORY_OPTIMIZED HYBRID_BUFFER_POOL = OFF;

Par défaut, le pool de mémoires tampons hybride est désactivé au niveau de l’instance. Pour que ce changement prenne effet, l’instance doit être redémarrée. Le redémarrage garantit que suffisamment de pages de hachage sont allouées pour le pool de mémoires tampons, puisque la capacité PMEM sur le serveur doit maintenant être prise en compte.

L’exemple suivant désactive le pool de mémoires tampons hybride pour une base de données spécifique.

ALTER DATABASE <databaseName> SET MEMORY_OPTIMIZED = OFF;

Par défaut, le pool de mémoires tampons hybride est activé au niveau de l’étendue de la base de données et désactivé au niveau de l’étendue du serveur.

Afficher la configuration du pool de mémoires tampons hybride

Affichage de la valeur à l’exécution

L’exemple suivant retourne l’état actuel de la configuration du pool de mémoires tampons hybride de l’instance.

SELECT * FROM
sys.server_memory_optimized_hybrid_buffer_pool_configuration;

Le deuxième exemple liste les bases de données et le paramètre de niveau base de données du pool de mémoires tampons hybride (is_memory_optimized_enabled).

Vous pouvez également monter ou mettre en forme le module PMEM sans que DAX soit activé, et le traiter comme un périphérique d’entrée-sortie par blocs standard (c’est-à-dire effectuer les E/S par le biais du noyau). Lorsqu’il est configuré de cette façon, aucun module PMEM ne peut être utilisé par SQL Server pour réaliser des opérations adressables par octet (autrement dit, tous les appels utilisent des pilotes de l’espace noyau).

SELECT name, is_memory_optimized_enabled FROM sys.databases;

Pool de mémoires tampons hybride avec écriture directe

Le pool de mémoires tampons hybride doté du comportement d’écriture directe réduit le nombre de commandes memcpy requises sur les pages de données et d’index modifiées qui résident sur des périphériques PMEM. En effet, il utilise la mémoire tampon de journal persistante et durable pour modifier la page sans avoir à la copier dans l’un des pools de mémoires tampons DRAM. Les pages des fichiers de base de données résidant sur des périphériques PMEM sont modifiées directement sans qu’il soit nécessaire de les mettre en cache dans un pool de mémoires tampons DRAM, puis de les vider de façon asynchrone sur le disque. Ce comportement respecte toujours la sémantique WAL (Write Ahead Logging), car les enregistrements (journal) dans la mémoire tampon du journal des transactions persistante ont été écrits, ou renforcés, sur des supports durables. Des gains de performances considérables ont été observés pour les charges de travail transactionnelles utilisant conjointement et de cette manière le pool de mémoires tampons hybride et la mémoire tampon de journal persistante.

Pour appliquer le mode écriture directe, activez le pool de mémoires tampons hybride et la mémoire tampon de journal persistante pour une base de données, puis l’indicateur de trace 809 au démarrage.

Meilleures pratiques pour le pool de mémoires tampons hybride

  • 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 versions 2019 et ultérieures) et vérifiez que l’appareil a été formaté pour DAX (Direct Access).

  • Activez l’option Verrouiller les pages en mémoire sur Windows.

  • Les tailles de fichiers doivent être un multiple de 2 Mo (modulo 2 Mo doit être égal à zéro).

  • Si le paramètre au niveau de l’étendue du serveur du pool de mémoires tampons hybride est désactivé, la fonctionnalité n’est utilisée par aucune base de données utilisateur.

  • Si le paramètre au niveau de l’étendue du serveur du pool de mémoires tampons hybride est activé, vous pouvez utiliser le paramètre au niveau de l’étendue de la base de données afin de désactiver la fonctionnalité pour des bases de données utilisateur individuelles.

  • À compter de SQL Server 2019 (15.x) CU 3 (cf. KB 4538118), la mise en cache de lecture est activée par défaut. Il s’agit du processus selon lequel les pages les plus chaudes sont suivies dans le pool de mémoires tampons hybrides, puis automatiquement promues dans un pool de mémoires tampons DRAM à des fins d’amélioration des performances.

  • À compter de SQL Server 2022 (16.x) CU 1, l’écriture directe représente le comportement par défaut lorsque le pool de mémoires tampons hybride est combiné avec la mémoire tampon de journal persistante. Cela devrait améliorer les performances pour presque toutes les charges de travail. Il reste toujours un risque de régression malgré tout. La mise à jour cumulative doit donc être testée minutieusement avant d’être appliquée. Si vous rencontrez une régression en raison de ce changement de comportement, vous pouvez revenir au comportement précédent en utilisant l’indicateur de trace 898 au démarrage.

  • À compter de SQL Server 2022 (16.x) CU 1, l’indicateur de trace 809 est ignoré par SQL Server au démarrage. L’indicateur de trace 809 et l’indicateur de trace 898 s’appliquent uniquement à Windows, et non à SQL Server sur Linux. Les indicateurs de trace ne doivent être utilisés qu’à la demande d’un professionnel Microsoft Server certifié.