Consulente per la compilazione nativa

Si applica a:SQL ServerDatabase SQL di Azure

I report di analisi delle prestazioni delle transazioni indicano quali stored procedure interpretate nel database traggono vantaggio se vengono convertite per usare la compilazione nativa. Per altri dettagli, vedere Determinare se una tabella o una procedura archiviata deve essere sottoposta a porting a In-Memory OLTP.

Una volta identificata la stored procedure da trasferire per usare la compilazione nativa, è possibile usare Native Compilation Advisor (NCA) per facilitare la migrazione della stored procedure interpretata alla compilazione nativa. Per altre informazioni sulle stored procedure compilate in modo nativo, vedere Natively Compiled Stored Procedures.

In una determinata stored procedure interpretata, l'NCA consente di identificare tutte le funzionalità non supportate nei moduli nativi. NCA fornisce collegamenti alla documentazione relativa a soluzioni alternative o soluzioni.

Per informazioni sulle metodologie di migrazione, vedere In-Memory OLTP - Common Workload Patterns and Migration Considerations.

Procedura guidata per l'utilizzo dell'Assistente per la compilazione nativa

In Esplora oggetti, fai clic con il pulsante destro del mouse sulla stored procedure che desideri convertire, quindi seleziona Advisor per compilazione nativa. Verrà visualizzata la pagina introduttiva di Stored Procedure Native Compilation Advisor. Fare clic su Avanti per continuare.

Validazione della stored procedure

In questa pagina verrà indicato se la stored procedure utilizza dei costrutti che non sono compatibili con la compilazione nativa. Fare clic su Avanti per vedere i dettagli. Se sono presenti costrutti che non sono compatibili con la compilazione nativa, fare clic su Avanti per vedere i dettagli.

Risultato di convalida della stored procedure

Se sono presenti costrutti non compatibili con la compilazione nativa, la pagina Stored Procedure Validation Result visualizzerà i dettagli. È possibile generare un report (facendo clic su Genera report), uscire da Assistente compilazione nativae aggiornare il codice in modo che risulti compatibile con la compilazione nativa.

Codice di esempio

L'esempio seguente mostra una stored procedure interpretata e la stored procedure equivalente per la compilazione nativa. Nell'esempio viene supposto l'utilizzo di una directory denominata c:\data.

Nota

Quando esegui CREATE DATABASE senza opzioni aggiuntive in database SQL di Azure, il database viene creato sul server logico con le impostazioni predefinite. La FILEGROUP sintassi non si applica a database SQL di Azure o SQL database in Microsoft Fabric.

In database SQL di Azure o SQL Database in Microsoft Fabric, se il database previsto esiste già, puoi saltare le istruzioni non supportate dell'esempio CREATE DATABASE e USE e collegarti direttamente a quel database. Connettiti direttamente al master e ai database degli utenti desiderati separatamente.

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;