適用対象:SQL Server
Azure SQL データベース
トランザクション パフォーマンス分析レポートでは、データベース内にある解釈されたストアド プロシージャをネイティブ コンパイルを使用するように移植した場合に、どのストアド プロシージャで効果が得られるかを知ることができます。 詳細については、「 テーブルまたはストアド プロシージャをインメモリ OLTP に移植する必要があるかどうかの確認」を参照してください。
ネイティブ コンパイルを使用するように移植するストアド プロシージャを特定した後、ネイティブ コンパイル アドバイザー (NCA) を使用して、インタープリター実行のストアド プロシージャをネイティブ コンパイルに移行することができます。 ネイティブ コンパイル ストアド プロシージャの詳細については、「ネイティブ コンパイル ストアド プロシージャ」をご覧ください。
特定のインタープリタ型ストアド プロシージャでは、NCA を使用して、ネイティブ モジュールでサポートされていないすべての機能を識別できます。 NCA には、回避策またはソリューションを説明するドキュメントのリンクが用意されています。
移行方法については、「In-Memory OLTP - Common Workload Patterns and Migration Considerations」(インメモリ OLTP - 一般的なワークロード パターンと移行に関する考慮事項) を参照してください。
ネイティブ コンパイル アドバイザーの使用に関するチュートリアル
オブジェクト エクスプローラーで、変換するストアド プロシージャを右クリックし、[ネイティブ コンパイル アドバイザー]を選択します。 これにより、[ストアド プロシージャのネイティブ コンパイル アドバイザー]のようこそ画面が表示されます。 [次へ] をクリックして次に進みます。
ストアド プロシージャの検証
このページでは、ストアド プロシージャでネイティブ コンパイルと互換性のない構造が使用されているかどうかがレポートされます。 [次へ] をクリックすると、詳細を表示できます。 ネイティブ コンパイルと互換性のない構造がある場合は、 [次へ] をクリックすると、詳細を表示できます。
[ストアド プロシージャの検証結果]
ネイティブ コンパイルと互換性のない構造がある場合は、 [ストアド プロシージャの検証結果] ページに詳細が表示されます。 レポートを生成 ( [レポートの生成]をクリック) し、ネイティブ コンパイル アドバイザーを閉じて、ネイティブ コンパイルと互換性があるようにコードを更新できます。
コードサンプル
次のサンプルは、解釈されたストアド プロシージャと、ネイティブ コンパイルに対する 同等の ストアド プロシージャを示しています。 次のサンプルでは、c:\data というディレクトリがあることを前提にしています。
注
Azure SQL Databaseで追加オプションなしでCREATE DATABASEを実行すると、データベースは論理サーバー上でデフォルト設定で作成されます。
FILEGROUPの構文はMicrosoft FabricのAzure SQL DatabaseやSQLデータベースには適用されません。
Azure SQL Database や Microsoft Fabric の SQL データベースでは、意図したデータベースがすでに存在している場合は、サンプルの CREATE DATABASE ステートメントとUSE ステートメント (これらはサポートされていません) をスキップして、そのデータベースに直接接続できます。
masterと目的のユーザーデータベースに直接別々に接続してください。
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;