共用方式為


原生編譯建議程式

交易效能報告工具(請參閱 判斷數據表或預存程式是否應移植到 In-Memory OLTP)會通知您,如果移植到使用原生編譯,資料庫中哪些解譯預存程式會受益。 在您識別想要移植使用原生編譯的預存程序之後,您可以使用原生編譯建議程式來協助您將解譯的預存程式移轉至原生編譯。 如需原生編譯預存程式的詳細資訊,請參閱 原生編譯預存程式

若要開始,請連接到包含解譯預存程序的 實例。 您可以連線到 SQL Server 2008、SQL Server 2008 R2、SQL Server 2012 或 SQL Server 2014 實例。 不過,如果您想要使用 Advisor 執行移轉作業,您必須連線到啟用 In-Memory OLTP 功能的 SQL Server 2014 實例。 如需 In-Memory OLTP 需求的詳細資訊,請參閱 使用 Memory-Optimized 數據表的需求

如需移轉方法的相關信息,請參閱 In-Memory OLTP - 一般工作負載模式和移轉考慮

使用原生編譯助手的指南

[物件總管] 中,以滑鼠右鍵按下您要轉換的預存程式,然後選取 [原生編譯建議程式]。 這將顯示預存程序原生編譯顧問的歡迎頁面。 選取 [下一步] 以繼續操作。

預存程序驗證

如果預存程式使用任何與原生編譯不相容的建構,此頁面將會回報。 您可以按 [下一步 ] 以查看詳細數據。 如果有與原生編譯不相容的建構,您可以按 [下一步 ] 以查看詳細數據。

預存程式驗證結果

如果有與原生編譯不相容的建構,預 存程式驗證結果 頁面會顯示詳細數據。 您可以產生報表(按兩下[ 產生報表]、結束 原生編譯建議程式,並更新您的程式代碼,使其與原生編譯相容。

程式碼範例

下列範例顯示解譯的預存程式,以及原生編譯的對等預存程式。 此範例假設目錄稱為 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  

另請參閱

移轉至 In-Memory OLTP