Conseiller de compilation native

S’applique à :SQL ServerAzure SQL Database

L’outil d’analyse des rapports de transaction indique quelles procédures stockées interprétées dans votre base de données tireront parti de l’utilisation de la compilation native. Pour plus d’informations, consultez Détermination de la nécessité de porter une table ou une procédure stockée vers l’OLTP en mémoire.

Après avoir identifié une procédure stockée que vous souhaitez porter pour utiliser la compilation native, vous pouvez utiliser Native Compilation Advisor (NCA) pour vous aider à migrer la procédure stockée interprétée vers la compilation native. Pour plus d'informations sur les procédures stockées compilées en mode natif, consultez Natively Compiled Stored Procedures.

Dans une procédure stockée interprétée donnée, le NCA vous permet d’identifier toutes les fonctionnalités qui ne sont pas prises en charge dans les modules natifs. Le NCA fournit des liens de documentation permettant de résoudre ou de contourner les problèmes rencontrés.

Pour plus d’informations sur les méthodologies de migration, consultez In-Memory OLTP - Modèles de charge de travail courants et considérations relatives à la migration.

Procédure pas à pas d'utilisation de Native Compilation Advisor

Dans l’Explorateur d’objets, cliquez avec le bouton droit sur la procédure stockée à convertir, puis sélectionnez Native Compilation Advisor. Cela affichera la page d'accueil de l'Assistant de compilation native des procédures stockées. Cliquez sur Suivant pour continuer.

Validation de la procédure stockée

Cette page signale si la procédure stockée utilise des éléments qui ne sont pas compatibles avec la compilation native. Vous pouvez cliquer sur Suivant pour afficher les détails. Si certains éléments ne sont pas compatibles avec la compilation native, vous pouvez cliquer sur Suivant pour afficher les détails.

Résultats de la validation de la procédure stockée

Si certains éléments ne sont pas compatibles avec la compilation native, la page Résultat de la validation de la procédure stockée affiche les détails. Vous pouvez générer un rapport (cliquez sur Générer le rapport), quitter le Conseiller de compilation native et mettre à jour votre code afin qu’il soit compatible avec la compilation native.

Exemple de code

L’exemple suivant illustre une procédure stockée interprétée et la procédure stockée équivalente pour la compilation native. L'exemple suppose la présence d'un répertoire appelé c:\data.

Note

Lorsque vous exécutez CREATE DATABASE sans options supplémentaires dans Azure SQL Database, la base de données est créée sur le serveur logique avec les paramètres par défaut. La FILEGROUP syntaxe ne s’applique pas à Azure SQL Database ou SQL Database dans Microsoft Fabric.

Dans Azure SQL Database ou la base de données SQL de Microsoft Fabric, si la base de données souhaitée existe déjà, vous pouvez ignorer les instructions CREATE DATABASE et USE non prises en charge de l’exemple et vous connecter directement à cette base de données. Connectez-vous directement à la base de données master et séparément aux bases de données utilisateurs souhaitées.

USE [master];
GO
CREATE DATABASE [Demo]  
ON  
PRIMARY(NAME = [Demo_data],  
FILENAME = 'C:\DATA\Demo_data.mdf', size=500MB)  
, FILEGROUP [Demo_fg] CONTAINS MEMORY_OPTIMIZED_DATA(  
NAME = [Demo_dir],  
FILENAME = 'C:\DATA\Demo_dir')  
LOG ON (name = [Demo_log], Filename='C:\DATA\Demo_log.ldf', size=500MB)  
COLLATE Latin1_General_100_BIN2;  
go  
  
USE [Demo];  
go  
  
CREATE TABLE [dbo].[SalesOrders]  
(  
     [order_id] [int] NOT NULL,  
     [order_date] [datetime] NOT NULL,  
     [order_status] [tinyint] NOT NULL  
     CONSTRAINT [PK_SalesOrders] PRIMARY KEY NONCLUSTERED HASH   
(  
     [order_id]  
) WITH ( BUCKET_COUNT = 2097152)  
) WITH ( MEMORY_OPTIMIZED = ON )  
go  
  
-- Interpreted.  
CREATE PROCEDURE [dbo].[InsertOrder] @id INT, @date DATETIME2, @status TINYINT  
AS   
BEGIN   
  INSERT dbo.SalesOrders VALUES (@id, @date, @status);  
END  
go  
  
-- Natively Compiled.  
CREATE PROCEDURE [dbo].[InsertOrderXTP]  
      @id INT, @date DATETIME2, @status TINYINT  
  WITH NATIVE_COMPILATION, SCHEMABINDING, EXECUTE AS OWNER  
AS   
BEGIN ATOMIC WITH   
     (TRANSACTION ISOLATION LEVEL = SNAPSHOT, LANGUAGE = N'us_english'  
     )  
  INSERT dbo.SalesOrders VALUES (@id, @date, @status);  
END  
go  
  
SELECT * from SalesOrders;  
go  
  
EXECUTE dbo.InsertOrder @id= 10, @date = '1956-01-01 12:00:00', @status = 1;  
EXECUTE dbo.InsertOrderXTP @id= 11, @date = '1956-01-01 12:01:00', @status = 2;  
  
SELECT * from SalesOrders;