事务性能报告工具(请参阅 “确定是否应将表或存储过程移植到 In-Memory OLTP”)将通知你,如果移植到使用本机编译,则数据库中解释的存储过程将受益。 确定想要移植以使用本机编译的存储过程后,可以使用本机编译顾问来帮助将解释的存储过程迁移到本机编译。 有关本机编译的存储过程的详细信息,请参阅 本机编译的存储过程。
首先,连接到包含解释存储过程的实例。 可以连接到 SQL Server 2008、SQL Server 2008 R2、SQL Server 2012 或 SQL Server 2014 实例。 但是,如果要使用顾问执行迁移作,则必须连接到启用了 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