Utiliser OLTP en mémoire pour améliorer les performances de votre application dans Azure SQL Database et Azure SQL Managed Instance
S’applique à : Azure SQL Managed Instance
L’OLTP en mémoire peut être utilisé pour améliorer les performances de traitement des transactions, l’ingestion des données et des scénarios de données temporaires. Le niveau de service Critique pour l’entreprise inclut une certaine quantité de mémoire OLTP maximale en mémoire, une limite déterminée par le nombre de vCores.
Suivez ces étapes pour adopter OLTP en mémoire dans votre base de données existante.
Étape 1 : identifiez les objets à migrer vers In-Memory OLTP
SQL Server Management Studio (SSMS) inclut un rapport de présentation d’analyse des performances des transactions que vous pouvez exécuter sur une base de données avec une charge de travail active. Le rapport identifie les tables et procédures stockées candidates pour la migration vers In-Memory OLTP.
Dans SSMS, pour générer le rapport :
- Dans l’ Explorateur d’objets, cliquez avec le bouton droit sur le nœud de votre base de données.
- Cliquez sur Rapports>Rapports Standard>Présentation de l’analyse des performances des transactions.
Pour plus d’informations, voir Déterminer si une table ou une procédure stockée doit être déplacée vers In-Memory OLTP.
Étape 2 : créez une base de données de test comparable
Supposons que le rapport indique que votre base de données est équipée d’une table qui gagnerait à être convertie en table à mémoire optimisée. Nous vous recommandons de commencer par effectuer un test pour confirmer l’indication.
Vous avez besoin d’une copie de test de votre base de données de production. La base de données de test doit être au même niveau de service (critique pour l’entreprise) et nombre de vCore que votre base de données de production.
Pour faciliter le test, modifiez votre base de données comme suit :
Connectez-vous à la base de données de test à l’aide de SQL Server Management Studio (SSMS).
Pour éviter d’avoir recours à l’option
WITH (SNAPSHOT)
dans les requêtes, définissez l’optionMEMORY_OPTIMIZED_ELEVATE_TO_SNAPSHOT
de base de données actuelle, comme indiqué dans l’instruction T-SQL suivante :ALTER DATABASE CURRENT SET MEMORY_OPTIMIZED_ELEVATE_TO_SNAPSHOT = ON;
Étape 3 : migrez les tables
Vous devez créer et remplir une copie de mémoire optimisée de la table que vous souhaitez tester. Vous pouvez le créer en utilisant soit :
- L’Assistant Optimisation de mémoire pratique en SSMS.
- Utilisez des commandes T-SQL.
Assistant Optimisation de mémoire en SSMS
Pour utiliser cette option de migration :
Se connecter à la base de données de test avec SSMS.
Dans l’Explorateur d’objets, cliquez avec le bouton droit sur la table, puis cliquez sur Conseiller d’optimisation de la mémoire.
L’assistant Conseiller d’optimiseur de mémoire de table s’affiche.
Dans l’assistant, cliquez sur Validation de migration (ou sur le bouton Suivant) pour voir si la table possède des fonctionnalités non prises en charge dans les tables optimisées par mémoire. Pour plus d’informations, consultez l’article suivant :
- La liste de vérification d’optimisation de mémoire dans Memory Optimization Advisor.
- Constructions Transact-SQL non prises en charge par In-Memory OLTP.
- Migration vers In-Memory OLTP.
Si la table ne possède pas de fonctions non prises en charge, l’Assistant peut exécuter le schéma et la migration des données pour vous.
T-SQL manuel
Pour utiliser cette option de migration :
- Connectez-vous à votre base de données de test à l’aide de SSMS (ou utilitaire similaire).
- Obtenir le script T-SQL complet pour votre table et ses index.
- Dans SSMS, cliquez avec le bouton droit sur le nœud de votre table.
- Cliquez sur Générer un script de la table en tant que>CREATE To>Fenêtre de nouvelle requête.
- Dans la fenêtre de script, ajoutez
WITH (MEMORY_OPTIMIZED = ON)
à l’instructionCREATE TABLE
. - S’il existe un index CLUSTERED (ORDONNÉ) en clusters, le transformer en NONCLUSTERED (NON ORDONNÉ).
- Renommez la table existante à l’aide de sp_rename.
- Créez la nouvelle copie de la table de mémoire optimisée si la table en exécutant le script
CREATE TABLE
modifié. - Copiez les données dans votre table mémoire optimisée à l’aide de
INSERT...SELECT * INTO
:INSERT INTO [<new_memory_optimized_table>] SELECT * FROM [<old_disk_based_table>];
Étape 4 (facultatif) : migrez des procédures stockées
La fonctionnalité In-Memory peut également modifier une procédure stockée pour améliorer les performances.
Considérations relatives à des procédures stockées compilées en mode natif
Une procédure stockée compilée en mode natif doit avoir les options suivantes dans sa clause WITH
T-SQL :
- NATIVE_COMPILATION : ce qui signifie que les instructions Transact-SQL de la procédure sont toutes compilées en code natif pour une exécution efficace.
- SCHEMABINDING : les tables significatives figurant dans la procédure stockée ne peuvent voir leurs définitions modifiées de quelque manière que ce soit susceptible d’affecter la procédure stockée, à moins que vous ne glissiez la procédure stockée.
Un module natif doit utiliser un grand bloc ATOMIC pour la gestion de transaction. Il n’y a pas de rôle pour un BEGIN TRANSACTION
ou ROLLBACK TRANSACTION.
explicite Si votre code détecte une violation de règle métier, il peut terminer le bloc atomique avec une instruction THROW.
En général, CREATE PROCEDURE compilée en mode natif
En général, le code T-SQL pour créer une procédure stockée compilée en mode natif est similaire au modèle suivant :
CREATE PROCEDURE schemaname.procedurename
@param1 type1, ...
WITH NATIVE_COMPILATION, SCHEMABINDING
AS
BEGIN ATOMIC WITH
(TRANSACTION ISOLATION LEVEL = SNAPSHOT,
LANGUAGE = N'<desired sys.syslanuages.sysname value>'
)
...
END;
- Pour le niveau
TRANSACTION_ISOLATION_LEVEL
, SNAPSHOT est la valeur la plus commune pour la procédure stockée compilée de façon native. Cependant, un sous-ensemble d’autres valeurs est également pris en charge :- REPEATABLE READ
- SERIALIZABLE
- La
LANGUAGE
valeur doit être présente dans lasys.syslanguages
vue, dans laname
colonne. Par exemple :N'us_english'
.
Comment migrer une procédure stockée
Les étapes de la migration sont les suivantes :
- Obtenir le script
CREATE PROCEDURE
pour la procédure stockée régulière interprétée. - Réécrire son en-tête pour qu’il corresponde au modèle précédent.
- Déterminer si le code TSQL de procédure stocké utilise les fonctions non prises en charge pour les procédures stockées compilées en mode natif. Mettre en œuvre des solutions de contournement si nécessaire. Pour plus d’informations, consultez Procédures stockées compilées en mode natif.
- Renommez l’ancienne procédure stockée en utilisant sp_rename. Ou FAITES-LE SIMPLEMENT GLISSER (DROP).
- Exécutez votre script
CREATE PROCEDURE
T-SQL modifié.
Étape 5 : exécutez votre charge de travail en mode test
L’exécution d’une charge de travail dans votre base de données de test est similaire à la charge de travail qui s’exécute dans votre base de données de production. Cela doit révéler les gains de performances générés par votre utilisation de la fonction In-Memory pour les tables et les procédures stockées.
Les principaux attributs de la charge de travail sont :
- Nombre de connexions simultanées.
- Rapport Lecture/Écriture
Pour adapter et exécuter la charge de travail de test, envisagez d’utiliser l’outil pratique ostress.exe, figurant ici.
Pour réduire la latence du réseau, exécutez le test dans la région géographique Azure dans laquelle la base de données existe.
Étape 6 : supervision post-implémentation
Veillez à surveiller les effets des performances de vos implémentations In-Memory en production :