트랜잭션 성능 보고서 도구( 테이블 또는 저장 프로시저를 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