SQL Server 2014 (12.x) の新機能である In-Memory OLTP を使用すると、OLTP データベース アプリケーションのパフォーマンスを大幅に向上させることができます。 In-Memory OLTP は、OLTP 用に最適化された、SQL Server エンジンに統合されたメモリ最適化データベース エンジンです。
![]() |
SQL Server 2016 を試しますか? Microsoft Azure にサインアップし、[ こちら ] に移動して、SQL Server 2016 が既にインストールされている仮想マシンを起動します。 完了したら、仮想マシンを削除できます。 |
In-Memory OLTP を使用するには、アクセスの多いテーブルをメモリ最適化として定義します。 メモリ最適化テーブルは、完全にトランザクション的で持続性があり、ディスク ベースのテーブルと同じ方法で Transact-SQL を使用してアクセスされます。 クエリでは、メモリ最適化テーブルとディスク ベース テーブルの両方を参照できます。 トランザクションは、メモリ最適化テーブルとディスク ベース テーブル内のデータを更新できます。 メモリ最適化テーブルのみを参照するストアド プロシージャは、パフォーマンスをさらに向上させるために、マシン コードにネイティブ コンパイルできます。 In-Memory OLTP エンジンは、高度にスケールアウトされた中間層から駆動される OLTP タイプのトランザクションに対して、非常に高いセッションコンカレンシーを実現するように設計されています。 これを実現するために、ラッチフリーのデータ構造とオプティミスティックなマルチバージョンコンカレンシー制御が使用されます。 その結果、データベース トランザクションの線形スケーリングにより、予測可能でミリ秒未満の低待機時間と高スループットが実現します。 実際のパフォーマンスの向上は多くの要因によって異なりますが、パフォーマンスの向上の 5 倍から 20 倍が一般的です。
次の表は、In-Memory OLTP を使用することで最もメリットがあるワークロード パターンをまとめたものです。
実装シナリオ | 実装シナリオ | In-Memory OLTP の利点 |
---|---|---|
複数の同時接続からの高いデータ挿入率。 | 主に追加専用のストア。 挿入ワークロードに対応できません。 |
競合を排除します。 ログ記録を減らします。 |
定期的なバッチ挿入と更新を使用して、パフォーマンスとスケーリングを読み取ります。 | 高パフォーマンスの読み取り操作。特に、各サーバー要求に複数の読み取り操作が実行される場合。 スケールアップ要件を満たすことができない。 |
新しいデータが到着したときの競合を排除します。 待機時間の短いデータ取得。 コードの実行時間を最小限に抑えます。 |
データベース サーバーでの集中的なビジネス ロジック処理。 | ワークロードを挿入、更新、削除します。 ストアド プロシージャ内での集中的な計算。 読み取りと書き込みの競合。 |
競合を排除します。 コードの実行時間を最小限に抑え、待機時間を短縮し、スループットを向上させます。 |
待機時間が短い。 | 一般的なデータベース ソリューションでは実現できない待機時間の短いビジネス トランザクションが必要です。 | 競合を排除します。 コードの実行時間を最小限に抑えます。 コードの実行の待機時間が短い。 効率的なデータ取得。 |
セッション状態の管理。 | 頻繁な挿入、更新、およびポイント参照。 多数のステートレス Web サーバーからの高スケールの負荷。 |
競合を排除します。 効率的なデータ取得。 非持続性テーブルを使用する場合のオプションの IO の削減または削除 |
In-Memory OLTP によってパフォーマンスが最大に向上するシナリオの詳細については、「 In-Memory OLTP - 一般的なワークロード パターンと移行に関する考慮事項」を参照してください。
In-Memory OLTP を使用すると、実行時間の短いトランザクションで OLTP のパフォーマンスが最も高くなります。
OLTP In-Memory 改善されるプログラミング パターンには、コンカレンシー シナリオ、ポイント参照、多数の挿入と更新があるワークロード、ストアド プロシージャのビジネス ロジックなどがあります。
SQL Server との統合により、メモリ最適化テーブルとディスク ベース テーブルの両方を同じデータベースに配置し、両方の種類のテーブルに対してクエリを実行できます。
SQL Server 2014 (12.x) では、In-Memory OLTP でサポートされる Transact-SQL の領域に制限があります。
In-Memory OLTP では、次を使用してパフォーマンスとスケーラビリティの大幅な向上を実現します。
メモリ常駐データへのアクセス用に最適化されたアルゴリズム。
論理ロックを排除するオプティミスティック コンカレンシー制御。
すべての物理的なロックとラッチを排除する自由なオブジェクトをロックします。 トランザクション処理を実行するスレッドは、コンカレンシー制御にロックまたはラッチを使用しません。
メモリ最適化テーブルにアクセスするときに、解釈されたストアド プロシージャよりもパフォーマンスが大幅に向上するネイティブ コンパイル ストアド プロシージャ。
重要
In-Memory OLTP を使用するには、テーブルとストアド プロシージャに対するいくつかの構文変更が必要になります。 詳細については、「 In-Memory OLTP への移行」を参照してください。 ディスク ベースのテーブルをメモリ最適化テーブルに移行する前に、「 テーブルまたはストアド プロシージャを OLTP に移植する必要があるかどうかを判断する」In-Memory 読み、OLTP のメリットを得られるテーブルとストアド プロシージャ In-Memory 確認してください。
このセクションでは...
このセクションでは、次の概念について説明します。
トピック | 説明 |
---|---|
メモリ最適化テーブルを使用するための要件 | メモリ最適化テーブルを使用するためのハードウェアとソフトウェアの要件とガイドラインについて説明します。 |
VM 環境での In-Memory OLTP の使用 | 仮想化環境での In-Memory OLTP の使用について説明します。 |
インメモリ OLTP のコード サンプル | メモリ最適化テーブルを作成して使用する方法を示すコード サンプルが含まれています。 |
メモリ最適化テーブル | メモリ最適化テーブルについて説明します。 |
メモリ最適化テーブル変数 | tempdb の使用を減らすために、従来のテーブル変数ではなくメモリ最適化テーブル変数を使用する方法を示すコード例。 |
Memory-Optimized テーブルのインデックス | メモリ最適化インデックスを導入します。 |
ネイティブ コンパイル ストアド プロシージャ | ネイティブ コンパイル ストアド プロシージャについて説明します。 |
インメモリ OLTP のメモリ管理 | システムでのメモリ使用量の理解と管理。 |
メモリ最適化オブジェクト用ストレージの作成と管理 | メモリ最適化テーブルにトランザクションに関する情報を格納するデータ ファイルとデルタ ファイルについて説明します。 |
メモリ最適化テーブルのバックアップ、復元、復旧 | メモリ最適化テーブルのバックアップ、復元、および回復について説明します。 |
Transact-SQL によるインメモリ OLTP のサポート | In-Memory OLTPに関するTransact-SQLのサポートについて説明します。 |
In-Memory OLTP データベースの高可用性サポート | In-Memory OLTP の可用性グループとフェールオーバー クラスタリングについて説明します。 |
SQL Server によるインメモリ OLTP のサポート | メモリ最適化テーブルをサポートする新しい構文と更新された構文と機能を一覧表示します。 |
インメモリ OLTP への移行 | ディスク ベースのテーブルをメモリ最適化テーブルに移行する方法について説明します。 |
In-Memory OLTP の詳細については、以下を参照してください。