Sdílet prostřednictvím


Nativní poradce pro kompilaci

platí pro:SQL Serverazure SQL Database

Zprávy o analýze výkonu transakcí vám ukazují, které interpretované uložené procedury ve vaší databázi budou mít prospěch, pokud je převedete k použití nativní kompilace. Podrobnosti najdete v tématu Určení, jestli má být tabulka nebo uložená procedura portována do In-Memory OLTP.

Jakmile identifikujete uloženou proceduru, kterou chcete portovat tak, aby používala nativní kompilaci, můžete pomocí nativního poradce pro kompilaci (NCA) migrovat interpretovanou uloženou proceduru do nativní kompilace. Další informace o nativně kompilovaných uložených procedurách naleznete v tématu Nativní kompilace uložených procedur.

V dané interpretované uložené procedurě ncA umožňuje identifikovat všechny funkce, které nejsou podporovány v nativních modulech. NCA poskytuje odkazy na dokumentaci s alternativními postupy nebo řešeními.

Informace o metodologiích migrace najdete v tématu In-Memory OLTP – Běžné vzory úloh a aspekty migrace.

Návod s využitím nativního poradce pro kompilaci

V Průzkumníku objektů klikněte pravým tlačítkem myši na uloženou proceduru, kterou chcete převést, a vyberte Native Compilation Advisor. Zobrazí se úvodní stránka pro Nativního poradce pro kompilaci uložených procedur. Pokračujte kliknutím na Další.

Ověření uložené procedury

Tato stránka bude hlásit, pokud uložená procedura používá jakékoli konstrukty, které nejsou kompatibilní s nativní kompilací. Kliknutím na tlačítko Další zobrazíte podrobnosti. Pokud existují konstrukce, které nejsou kompatibilní s nativní kompilací, můžete kliknutím na tlačítko Další zobrazit podrobnosti.

Výsledek ověření uložené procedury

Pokud jsou konstrukty, které nejsou kompatibilní s nativní kompilací, zobrazí se podrobnosti na stránce Výsledek ověření uložené procedury . Můžete vygenerovat sestavu (klikněte na Generovat sestavu), ukončete nativní nástroj Advisor pro kompilaci a aktualizujte kód tak, aby byl kompatibilní s nativní kompilací.

Ukázka kódu

Následující ukázka ukazuje interpretovanou uloženou proceduru a ekvivalentní uloženou proceduru pro nativní kompilaci. Ukázka předpokládá adresář s názvem c:\data.

Poznámka:

Jako obvykle platí, že element FILEGROUP a příkaz USE mydatabase platí pro Microsoft SQL Server, ale nevztahuje se na Azure SQL Database.

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;  

Viz také

Migrace na In-Memory OLTP
Požadavky na používání paměťově optimalizovaných tabulek