インメモリ OLTP に対してサポートされていない SQL Server の機能
適用対象: SQL Server Azure SQL データベース Azure SQL Managed Instance
このトピックでは、SQL Serverの機能で、メモリ最適化オブジェクトと共に使用できないものについて説明します。 さらに、最後のセクションでは、インメモリ OLTP でサポートされておらず、後にサポートされるようになった機能の一覧を示します。
インメモリ OLTP に対してサポートされない SQL Server 機能
次に示す SQL Server の機能は、(メモリ最適化データ ファイル グループを含む) メモリ最適化オブジェクトを持つデータベースでサポートされません。
サポートされない機能 | 機能の説明 |
---|---|
メモリ最適化テーブルに対するデータ圧縮。 | データ圧縮機能を使用することにより、データベース内のデータを圧縮したり、データベースのサイズを小さくすることができます。 詳細については、「 Data Compression」を参照してください。 |
メモリ最適化テーブル、HASH インデックス、および非クラスター化インデックスのパーティション分割。 | パーティション テーブルとパーティション インデックスのデータは、データベース内の複数のファイル グループに分散できるように、複数の単位に分割されます。 詳細については、「 Partitioned Tables and Indexes」を参照してください。 |
レプリケーション | サブスクライバー上でのメモリ最適化されたテーブルに対するトランザクション レプリケーションを除き、他のレプリケーション構成は、メモリ最適化されたテーブルを参照するテーブルまたはビューと互換性がありません。 メモリ最適化ファイル グループがある場合、sync_mode='database snapshot' を使用したレプリケーションはサポートされません。 詳細については、「メモリ最適化テーブル サブスクライバーへのレプリケーション」を参照してください。 |
ミラーリング | データベース ミラーリングは、MEMORY_OPTIMIZED_DATA ファイル グループのデータベースではサポートされていません。 ミラーリングの詳細については、「データベース ミラーリング (SQL Server)」を参照してください。 |
ログの再構築 | ログの再構築は、MEMORY_OPTIMIZED_DATA ファイル グループのデータベースでは、アタッチと ALTER DATABASE のいずれによるものでもサポートされていません。 |
リンク サーバー | メモリ最適化テーブルと同じクエリまたはトランザクションで、リンク サーバーにアクセスすることはできません。 詳しくは、「リンク サーバー (データベース エンジン)」を参照してください。 |
一括ログ記録 | データベースの復旧モデルにかかわらず、持続性のあるメモリ最適化テーブル上のすべての操作は、常に完全にログに記録されます。 |
最小ログ記録 | 最小ログ記録は、メモリ最適化テーブルではサポートされていません。 最小ログ記録の詳細については、「トランザクション ログ (SQL Server)」および「一括インポートで最小ログ記録を行うための前提条件」を参照してください。 |
変更の追跡 | メモリ最適化テーブルでは、変更履歴はサポートされていません。 |
DDL トリガー | インメモリ OLTP テーブルまたはネイティブ コンパイル モジュールでは、データベースレベルとサーバーレベルの DDL トリガーはどちらもサポートされません。 |
変更データ キャプチャ (CDC) | メモリ最適化テーブルが含まれるデータベースで CDC を有効にする、SQL Server 2017 CU15 以上のサポート。 これはデータベースとデータベース内のオンディスク テーブルにのみ該当します。 以前のバージョンの SQL Server では、CDC の内部で DROP TABLE に対して DDL トリガーが使用されているため、メモリ最適化テーブルが含まれるデータベースでは CDC を使用できません。 |
ファイバー モード | ファイバー モードは、メモリ最適化テーブルではサポートされていません。 ファイバー モードがアクティブな場合は、メモリ最適化ファイル グループが含まれたデータベースを作成することも、既存データベースへのメモリ最適化ファイル グループの追加を行うこともできません。 メモリ最適化ファイル グループが含まれたデータベースを使用している場合に、ファイバー モードを有効にすることはできます。 ただし、ファイバー モードを有効にするには、サーバーを再起動する必要があります。 このような場合、メモリ最適化ファイル グループを含むデータベースは回復できません。 メモリ最適化ファイル グループを含むデータベースのファイバー モードでの使用が無効になっていることを示すエラー メッセージが表示されます。 ファイバー モードがアクティブであれば、メモリ最適化ファイル グループが含まれたデータベースのアタッチおよび復元は失敗します。 また、データベースが SUSPECT としてマークされます。 詳細については、「 lightweight pooling Server Configuration Option」を参照してください。 |
Service Broker の制限事項 | ネイティブ コンパイル ストアド プロシージャからキューにアクセスできません。 メモリ最適化テーブルにアクセスするトランザクションでリモート データベースのキューにアクセスできません。 |
サブスクライバーでのレプリケーション | サブスクライバー上でのメモリ最適化テーブルに対するトランザクション レプリケーションはサポートされていますが、いくつかの制限があります。 詳細については、「 メモリ最適化テーブル サブスクライバーへのレプリケーション」を参照してください。 |
複数のデータベースにまたがるクエリとトランザクション
一部の例外を除き、複数データベースにまたがるトランザクションはサポートされません。 次の表では、サポートされるケースと、対応する制限について説明します (「 複数データベースにまたがるクエリ」も参照してください。)
データベース | 許可 | 説明 |
---|---|---|
ユーザー データベース、model、および msdb。 | いいえ | ほとんどの場合、複数のデータベースにまたがるクエリおよびトランザクションはサポートされません。 クエリがメモリ最適化テーブルまたはネイティブにコンパイルされたストアド プロシージャを使用している場合、そのクエリは他のデータベースにアクセスできません。 この制限は、クエリだけでなくトランザクションにも適用されます。 例外は、システム データベースである tempdb と master です。 ここで、master データベースは読み取り専用アクセスで利用できます。 |
Resource データベース、tempdb | はい | インメモリ OLTP オブジェクトを扱うトランザクションでは、Resource および tempdb システム データベースを追加の制限なく使用できます。 |
サポートされていないシナリオ
CLR ストアド プロシージャ内からのコンテキスト接続を使用したメモリ最適化テーブルへのアクセス。
メモリ最適化テーブルにアクセスするクエリでのキーセットと動的カーソル。 これらのカーソルは静的および読み取り専用に降格されます。
MERGE INTO target の使用は、target がメモリ最適化テーブルである場合にはサポートされません。
- MERGE USING source は、メモリ最適化テーブルでサポートされます。
ROWVERSION (TIMESTAMP) データ型はサポートされていません。 詳細については、「FROM (Transact-SQL)」を参照してください。
自動終了は、MEMORY_OPTIMIZED_DATA ファイル グループのあるデータベースではサポートされていません。
インメモリ OLTP オブジェクトの CREATE/ALTER/DROP などのトランザクション DDL は、ユーザー トランザクション内ではサポートされていません。
イベント通知。
ポリシー ベースの管理 (PBM)。
- PBM の "回避" モードと "ログのみ" モードはサポートされません。 サーバーにこのようなポリシーが存在すると、インメモリ OLTP の DDL が正常に実行されないことがあります。 "要求時" モードと "スケジュールで実行" モードはサポートされます。
データベースの包含 (包含データベース) は、インメモリ OLTP ではサポートされていません。
- Contained database authentication がサポートされます。 ただし、すべてのインメモリ OLTP オブジェクトは、動的管理ビュー (DMV) dm_db_uncontained_entities で "breaking containment" とマークされています。
最近追加されたサポート
SQL Server の新しいリリースでは、以前はサポートされていなかった機能のサポートが追加される場合があります。 このセクションでは、以前はインメモリ OLTP でサポートされておらず、後にインメモリ OLTP でサポートされるようになった機能の一覧を示します。
次の表で、(15.x)
などの "バージョン" の値は、Transact-SQL ステートメント SELECT @@Version;
から返される値を指します。
機能名 | SQL Server のバージョン | Comments |
---|---|---|
データベース スナップショット | 2019 (15.x) | データベース スナップショットは、MEMORY_OPTIMIZED_DATA ファイル グループのあるデータベースでサポートされるようになりました。 |