解釈された Transact-SQL を使用したメモリ最適化テーブルへのアクセスAccessing Memory-Optimized Tables Using Interpreted Transact-SQL

適用対象: ○SQL Server (2014 以降) ○Azure SQL Database XAzure SQL Data Warehouse XParallel Data Warehouse APPLIES TO: yesSQL Server (starting with 2014) yesAzure SQL Database noAzure SQL Data Warehouse noParallel Data Warehouse

いくつかの例外を除き、 Transact-SQLTransact-SQL クエリまたは DML 操作 (選択、挿入、更新、または削除)、アドホック バッチ、および SQL モジュール (ストアド プロシージャ、テーブル値関数、トリガー、ビューなど) を使用して、メモリ最適化テーブルにアクセスできます。With only a few exceptions, you can access memory-optimized tables using any Transact-SQLTransact-SQL query or DML operation (select, insert, update, or delete), ad hoc batches, and SQL modules such as stored procedures, table-value functions, triggers, and views.

インタープリターによって処理される Transact-SQLTransact-SQL とは、ネイティブ コンパイル ストアド プロシージャとは異なる、 Transact-SQLTransact-SQL バッチまたはストアド プロシージャを意味します。Interpreted Transact-SQLTransact-SQL refers to Transact-SQLTransact-SQL batches or stored procedures other than a natively compiled stored procedure. インタープリターによって処理される Transact-SQLTransact-SQL による、メモリ最適化されたテーブルへのアクセスは、相互運用アクセスと呼ばれます。Interpreted Transact-SQLTransact-SQL access to memory-optimized tables is referred to as interop access.

SQL Server 2016 (13.x)SQL Server 2016 (13.x)以降では、解釈された Transact-SQLTransact-SQL のクエリは、直列モードだけではなく、並列でもメモリ最適化テーブルをスキャンできます。Starting with SQL Server 2016 (13.x)SQL Server 2016 (13.x), queries in interpreted Transact-SQLTransact-SQL can scan memory-optimized tables in parallel, instead of just in serial mode.

メモリ最適化テーブルには、ネイティブ コンパイル ストアド プロシージャを使用してアクセスすることもできます。Memory-optimized tables can also be accessed using a natively compiled stored procedure. ネイティブ コンパイル ストアド プロシージャは、パフォーマンスが重要な OLTP 操作に推奨されます。Natively compiled stored procedures are recommended for performance-critical OLTP operations.

解釈された Transact-SQLTransact-SQL によるアクセスは、次のシナリオにお勧めします。Interpreted Transact-SQLTransact-SQL access is recommended for these scenarios:

  • アドホック クエリおよび管理タスク。Ad hoc queries and administrative tasks.

  • レポート クエリ。このクエリでは通常、ネイティブ コンパイル ストアド プロシージャでは使用できない構造 ( ウィンドウ 関数など) を使用します (ウィンドウ関数は OVER 関数とも呼ばれます)。Reporting queries, which typically use constructs not available in natively compiled stored procedures (such as window functions, sometimes referred to as OVER functions).

  • アプリケーション コードの変更を最小限に抑えて (またはコードを変更することなく)、アプリケーションのパフォーマンスが重要な部分をメモリ最適化テーブルに移行するには、次の手順を実行します。To migrate performance-critical parts of your application to memory-optimized tables, with minimal (or no) application code changes. テーブルを移行すると、パフォーマンス向上を確認できることがあります。You can potentially see performance improvements from migrating tables. ストアド プロシージャをネイティブ コンパイル ストアド プロシージャに移行すると、いっそうのパフォーマンス向上が確認されることがあります。If you then migrate stored procedures to natively compiled stored procedures, you may see further performance improvement.

  • ネイティブ コンパイル ストアド プロシージャでは、 Transact-SQLTransact-SQL を使用できません。When a Transact-SQLTransact-SQL statement is not available for natively compiled stored procedures.

ただし、次の Transact-SQLTransact-SQL 構造は、メモリ最適化されたテーブル内のデータにアクセスする、インタープリターによって処理される Transact-SQLTransact-SQL ストアド プロシージャでサポートされていません。However, the following Transact-SQLTransact-SQL constructs are not supported in interpreted Transact-SQLTransact-SQL stored procedures that access data in a memory-optimized table.

領域Area サポートされていないUnsupported
テーブルへのアクセスAccess to tables TRUNCATE TABLETRUNCATE TABLE

MERGE (ターゲットとしてのメモリ最適化テーブル)MERGE (memory-optimized table as target)

動的カーソルおよびキーセット カーソル (これらは自動的に静的カーソルに降格されます)。Dynamic and keyset cursors (these automatically degrade to static).

コンテキスト接続を使用した CLR モジュールからのアクセス。Access from CLR modules, using the context connection.

インデックス付きビューから、メモリ最適化されたテーブルへの参照。Referencing a memory-optimized table from an indexed view.
複数のデータベース間Cross-database 複数データベースにまたがるクエリCross-database queries

複数データベースにまたがるトランザクションCross-database transactions

リンク サーバーLinked servers

テーブル ヒントTable Hints

テーブル ヒントの詳細については、For more information about table hints, see. テーブル ヒント (Transact-SQL).Table Hints (Transact-SQL). インメモリ OLTPIn-Memory OLTP をサポートするために SNAPSHOT が追加されました。The SNAPSHOT was added to support インメモリ OLTPIn-Memory OLTP.

次のテーブル ヒントは、解釈された Transact-SQLTransact-SQLを使用してメモリ最適化テーブルにアクセスする場合はサポートされません。The following table hints are not supported when accessing a memory-optimized table using interpreted Transact-SQLTransact-SQL.

HOLDLOCKHOLDLOCK IGNORE_CONSTRAINTSIGNORE_CONSTRAINTS IGNORE_TRIGGERSIGNORE_TRIGGERS NOWAITNOWAIT
PAGLOCKPAGLOCK READCOMMITTEDREADCOMMITTED READCOMMITTEDLOCKREADCOMMITTEDLOCK READPASTREADPAST
READUNCOMMITTEDREADUNCOMMITTED ROWLOCKROWLOCK SPATIAL_WINDOW_MAX_CELLS = integerSPATIAL_WINDOW_MAX_CELLS = integer TABLOCKTABLOCK
TABLOCKXXTABLOCKXX UPDLOCKUPDLOCK XLOCKXLOCK

解釈された Transact-SQLTransact-SQLを使用して明示的または暗黙のトランザクションからメモリ最適化テーブルにアクセスする場合には、次の操作のうち少なくとも 1 つを実行する必要があります:When accessing a memory-optimized table from an explicit or implicit transaction using interpreted Transact-SQLTransact-SQL, you must do at least one of the following:

自動コミット モードで実行されるクエリでアクセスするメモリ最適化テーブルの場合、分離レベルのテーブル ヒントは必要ありません。An isolation level table hint is not required for memory-optimized tables accessed by queries running in auto-commit mode.

参照See Also

Transact-SQL によるインメモリ OLTP のサポートTransact-SQL Support for In-Memory OLTP

インメモリ OLTP への移行Migrating to In-Memory OLTP