Natywny doradca kompilacji

Dotyczy:programu SQL ServerAzure SQL Database

Raporty analizy wydajności transakcji informują, które zinterpretowane procedury składowane w bazie danych będą korzystne, jeśli zostaną przeniesione do korzystania z kompilacji natywnej. Aby uzyskać szczegółowe informacje, zobacz Określanie, czy tabela lub procedura składowana powinna być portowana do In-Memory OLTP.

Po zidentyfikowaniu procedury składowanej, którą chcesz przenieść do korzystania z kompilacji natywnej, możesz użyć natywnego doradcy kompilacji (NCA), aby ułatwić migrację zinterpretowanej procedury składowanej do kompilacji natywnej. Aby uzyskać więcej informacji na temat natywnie skompilowanych procedur składowanych, zobacz Natywnie skompilowane procedury składowane.

W danej zinterpretowanej procedurze składowanej NCA umożliwia zidentyfikowanie wszystkich funkcji, które nie są obsługiwane w modułach natywnych. NCA zawiera linki do dokumentacji dotyczących obejść lub rozwiązań.

Aby uzyskać informacje na temat metodologii migracji, zobacz In-Memory OLTP — typowe wzorce obciążeń i zagadnienia dotyczące migracji.

Przewodnik po użyciu doradcy kompilacji natywnej

W Eksploratorze obiektów kliknij prawym przyciskiem myszy procedurę składowaną, którą chcesz przekonwertować, i wybierz pozycję Native Compilation Advisor. Spowoduje to wyświetlenie strony powitalnej dla Doradcy Kompilacji Natywnej Procedur Składowanych. Kliknij przycisk Dalej, aby kontynuować.

Sprawdzanie poprawności procedury składowanej

Ta strona będzie raportować, jeśli procedura składowana używa konstrukcji, które nie są zgodne z kompilacją natywną. Możesz kliknąć przycisk Dalej , aby wyświetlić szczegóły. Jeśli istnieją konstrukcje, które nie są zgodne z kompilacją natywną, możesz kliknąć przycisk Dalej , aby wyświetlić szczegóły.

Wynik weryfikacji procedury składowanej

Jeśli istnieją konstrukcje, które nie są zgodne z natywną kompilacją, na stronie Wynik weryfikacji procedury składowanej zostaną wyświetlone szczegóły. Możesz wygenerować raport (kliknij pozycję Generuj raport), zamknąć doradcę kompilacji natywnej i zaktualizować kod, aby był zgodny z kompilacją natywną.

Przykładowy kod

Poniższy przykład przedstawia zinterpretowaną procedurę składowaną i równoważną procedurę składowaną dla kompilacji natywnej. W przykładzie przyjęto założenie, że katalog o nazwie c:\data.

Uwaga / Notatka

Gdy uruchamiasz CREATE DATABASE bez dodatkowych opcji w Azure SQL Database, baza danych jest tworzona na serwerze logicznym z domyślnymi ustawieniami. FILEGROUP Składnia ta nie ma zastosowania do Azure SQL Database ani baz danych SQL w Microsoft Fabric.

W Azure SQL Database lub SQL w Microsoft Fabric, jeśli docelowa baza danych już istnieje, możesz pominąć przykładowe instrukcje CREATE DATABASE i nieobsługiwane instrukcje USE oraz połączyć się bezpośrednio z tą bazą danych. Połącz się bezpośrednio z bazą danych master oraz wybranymi bazami danych użytkowników osobno.

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;