解釈された Transact-SQL を使用したメモリ最適化テーブルへのアクセス
適用対象: SQL Server Azure SQL Database Azure Synapse Analytics Analytics Platform System (PDW)
いくつかの例外を除き、Transact-SQL クエリまたは DML 操作 (選択、挿入、更新、または削除)、アドホック バッチ、および SQL モジュール (ストアド プロシージャ、テーブル値関数、トリガー、ビューなど) を使用して、メモリ最適化テーブルにアクセスできます。
インタープリターによって処理される Transact-SQL とは、ネイティブ コンパイル ストアド プロシージャとは異なる、Transact-SQL バッチまたはストアド プロシージャを意味します。 インタープリターによって処理される Transact-SQL による、メモリ最適化されたテーブルへのアクセスは、相互運用アクセスと呼ばれます。
SQL Server 2016 (13.x) 以降では、解釈された Transact-SQL のクエリは、直列モードだけではなく、並列でもメモリ最適化テーブルをスキャンできます。
メモリ最適化テーブルには、ネイティブ コンパイル ストアド プロシージャを使用してアクセスすることもできます。 ネイティブ コンパイル ストアド プロシージャは、パフォーマンスが重要な OLTP 操作に推奨されます。
解釈された Transact-SQL によるアクセスは、次のシナリオにお勧めします。
アドホック クエリおよび管理タスク。
レポート クエリ。このクエリでは通常、ネイティブ コンパイル ストアド プロシージャでは使用できない構造 ( ウィンドウ 関数など) を使用します (ウィンドウ関数は OVER 関数とも呼ばれます)。
アプリケーション コードの変更を最小限に抑えて (またはコードを変更することなく)、アプリケーションのパフォーマンスが重要な部分をメモリ最適化テーブルに移行するには、次の手順を実行します。 テーブルを移行すると、パフォーマンス向上を確認できることがあります。 ストアド プロシージャをネイティブ コンパイル ストアド プロシージャに移行すると、いっそうのパフォーマンス向上が確認されることがあります。
ネイティブ コンパイル ストアド プロシージャでは、Transact-SQL を使用できません。
ただし、次の Transact-SQL 構造は、メモリ最適化されたテーブル内のデータにアクセスする、インタープリターによって処理される Transact-SQL ストアド プロシージャでサポートされていません。
面グラフ | サポートされていない |
---|---|
テーブルへのアクセス | TRUNCATE TABLE MERGE (ターゲットとしてのメモリ最適化テーブル) 動的カーソルおよびキーセット カーソル (これらは自動的に静的カーソルに降格されます)。 コンテキスト接続を使用した CLR モジュールからのアクセス。 インデックス付きビューから、メモリ最適化されたテーブルへの参照。 |
複数のデータベース間 | 複数データベース間のクエリ データベースにまたがるトランザクション リンク サーバー |
テーブル ヒント
テーブル ヒントの詳細については、 テーブル ヒント (Transact-SQL) インメモリ OLTP をサポートするために SNAPSHOT が追加されました。
次のテーブル ヒントは、解釈された Transact-SQL を使用してメモリ最適化テーブルにアクセスする場合はサポートされません。
HOLDLOCK
PAGLOCK
READUNCOMMITTED
TABLOCKXX
IGNORE_CONSTRAINTS
READCOMMITTED
ROWLOCK
UPDLOCK
IGNORE_TRIGGERS
READCOMMITTEDLOCK
SPATIAL_WINDOW_MAX_CELLS = integer
XLOCK
NOWAIT
READPAST
TABLOCK
解釈された Transact-SQL を使用して明示的または暗黙のトランザクションからメモリ最適化テーブルにアクセスする場合には、次の操作のうち少なくとも 1 つを実行する必要があります。
SNAPSHOT、REPEATABLEREAD、SERIALIZABLE などの 分離レベルのテーブル ヒント を指定する。
データベース オプション MEMORY_OPTIMIZED_ELEVATE_TO_SNAPSHOT を ON に設定する。
自動コミット モードで実行されるクエリでアクセスするメモリ最適化テーブルの場合、分離レベルのテーブル ヒントは必要ありません。