原生編譯 Advisor
交易效能報告工具 (請參閱 判斷資料表或預存程式是否應移植到In-Memory OLTP) 通知您,如果移植成使用原生編譯,哪些解譯預存程式會對您有所説明。 識別您要匯出使用原生編譯的預存程序之後,即可使用原生編譯 Advisor 協助您將解譯的預存程序移轉到原生編譯。 如需原生編譯的預存程序的詳細資訊,請參閱 原生編譯的預存程序。
開始時,請先連接至執行個體,其中包含解譯的預存程序。 您可以連線到 SQL Server 2008、SQL Server 2008 R2、SQL Server 2012 或 SQL Server 2014 實例。 不過,如果您想要使用建議程式執行移轉作業,您必須連線到啟用In-Memory OLTP 功能的 SQL Server 2014 實例。 如需有關記憶體中 OLTP 需求的詳細資訊,請參閱< Requirements for Using Memory-Optimized Tables>。
如需移轉方法的資訊,請參閱 In-Memory OLTP - 一般工作負載模式和移轉考量。
使用原生編譯 Advisor 的逐步解說
在 [物件總管] 中,以滑鼠右鍵按一下您想要轉換的預存程序,然後選取 [原生編譯 Advisor]。 隨即顯示 [預存程序原生編譯 Advisor] 的歡迎頁面。 選取 [下一步] 以繼續操作。
預存程序驗證
此頁面將會回報預存程序是否使用任何與原生編譯不相容的建構。 您可以按 [下一步] 查看詳細資料。 如果有與原生編譯不相容的建構,您可以按 [下一步] 查看詳細資料。
預存程序驗證結果
如果有與原生編譯不相容的建構,[預存程序驗證結果] 頁面會顯示詳細資料。 您可以產生報表 (按一下 [產生報表])、結束 [原生編譯 Advisor],並更新您的程式碼,使其與原生編譯相容。
程式碼範例
下列範例顯示解譯的預存程序及原生編譯的對等預存程序。 該範例假設目錄名為 c:\data。
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
CREATE PROCEDURE [dbo].[InsertOrder] @id INT, @date DATETIME2, @status TINYINT
AS
BEGIN
INSERT dbo.SalesOrders VALUES (@id, @date, @status)
END
go
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
exec dbo.InsertOrder @id= 10, @date = '1956-01-01 12:00:00', @status = 1 ;
exec dbo.InsertOrderXTP @id= 11, @date = '1956-01-01 12:01:00', @status = 2 ;
select * from SalesOrders