インメモリ OLTP (インメモリ最適化)

SQL Server 2014 (12.x) の新機能である In-Memory OLTP は、OLTP データベース アプリケーションのパフォーマンスを大幅に向上させることができます。 In-Memory OLTP は、OLTP 用に最適化された、SQL Server エンジンに統合されたメモリ最適化データベース エンジンです。

Azure Virtual Machine SQL Server 2016 をお試しになりますか? Microsoft Azure にサインアップし、ここに移動して、SQL Server 2016 が既にインストールされている仮想マシンを起動します。 完了したら、仮想マシンを削除できます。

OLTP In-Memory使用するには、頻繁にアクセスされるテーブルをメモリ最適化として定義します。 メモリ最適化テーブルは完全にトランザクションで持続性があり、ディスク ベースのテーブルと同じ方法で Transact-SQL を使用してアクセスされます。 クエリでは、メモリ最適化テーブルとディスク ベース テーブルの両方を参照できます。 トランザクションでは、メモリ最適化テーブルおよびディスク ベース テーブル内のデータを更新できます。 メモリ最適化テーブルのみを参照するストアド プロシージャは、パフォーマンスをさらに向上させるために、マシン語コードにネイティブ コンパイルできます。 In-Memory OLTP エンジンは、高度にスケールアウトされた中間層から駆動される OLTP タイプのトランザクションに対して、非常に高いセッションコンカレンシーを実現するように設計されています。 このことを実現するために、ラッチ フリー データ構造と複数のバージョンから成るオプティミスティック コンカレンシーが使用されます。 結果は、予測可能なミリ秒未満の低待機時間と、データベース トランザクションの線形スケールによる高いスループットです。 実際にパフォーマンスがどの程度向上するかは多くの要因によって異なりますが、一般的にはパフォーマンスが 5 ~ 20 倍向上します。

次の表は、In-Memory OLTP を使用することで最もメリットがあるワークロード パターンをまとめたものです。

実装シナリオ 実装シナリオ In-Memory OLTP の利点
複数のコンカレント接続からの高いデータ挿入レート 主に追加専用の格納

挿入ワークロードに対する遅れ
競合の排除

ログ記録の削減
読み取りパフォーマンスと、定期的な一括挿入および更新への対応 特に各サーバー要求で複数の読み取り操作が実行される場合の、パフォーマンスの高い読み取り操作

スケールアップ要件への対応不可
新しいデータが到着したときの競合の排除

短い待機時間でのデータの取得

コードの実行時間の最小化
データベース サーバーでのビジネス ロジックの集中処理 ワークロードの挿入、更新、および削除

ストアド プロシージャ内での集中計算

読み取りと書き込みの競合
競合の排除

待機時間の短縮とスループットの向上のためのコードの実行時間の最小化
低待機時間 通常のデータベース ソリューションでは実現できない待機時間の短いビジネス トランザクションが必要 競合の排除

コードの実行時間の最小化

待機時間の短いコード実行

効率的なデータの取得
セッション状態管理 頻繁な挿入、更新、およびポイント参照

多数のステートレス Web サーバーからの高い負荷
競合の排除

効率的なデータの取得

持続性のないテーブルを使用する場合のオプションの IO 削減または削除

In-Memory OLTP によってパフォーマンスが最大に向上するシナリオの詳細については、「 インメモリ OLTP - 一般的なワークロード パターンと移行に関する考慮事項」を参照してください。

インメモリ OLTP によって、特にトランザクションの実行時間が短い OLTP のパフォーマンスが向上します。

OLTP をIn-Memoryするプログラミング パターンには、コンカレンシー シナリオ、ポイント参照、多数の挿入と更新があるワークロード、ストアド プロシージャ内のビジネス ロジックなどがあります。

SQL Serverとの統合は、メモリ最適化テーブルとディスク ベース テーブルの両方を同じデータベースに配置し、両方の種類のテーブルに対してクエリを実行できることを意味します。

SQL Server 2014 (12.x) では、In-Memory OLTP でサポートされる Transact-SQL サーフェス領域に制限があります。

In-Memory OLTP では、次を使用して、パフォーマンスとスケーラビリティの大幅な向上を実現します。

  • メモリ常駐のデータへのアクセスに最適化されたアルゴリズム。

  • 論理ロックが不要なオプティミスティック コンカレンシー。

  • 物理的なロックおよびラッチをすべて排除するロックフリーのオブジェクト。 トランザクション処理を実行するスレッドは、コンカレンシー制御にロックまたはラッチを使用しません。

  • ネイティブ コンパイル ストアド プロシージャ。メモリ最適化テーブルにアクセスする場合に、解釈されたストアド プロシージャよりもパフォーマンスは大幅に向上します。

重要

インメモリ OLTP を使用するためには、テーブルやストアド プロシージャの構文の変更が必要になることがあります。 詳細については、「インメモリ OLTP への移行」を参照してください。 ディスク ベースのテーブルをメモリ最適化テーブルに移行する前に、「 テーブルまたはストアド プロシージャを移植する必要があるかどうかを判断する」をIn-Memory OLTP に 読み込み、OLTP In-Memoryメリットのあるテーブルとストアド プロシージャを確認してください。

このセクションの内容

このセクションでは、以下の概念について説明します。

トピック 説明
メモリ最適化テーブルを使用するための要件 メモリ最適化テーブルを使用するためのハードウェア要件、ソフトウェア要件、およびガイドラインについて説明します。
VM 環境でのインメモリ OLTP の使用 仮想化環境でのインメモリ OLTP の使用について説明します。
インメモリ OLTP のコード サンプル メモリ最適化テーブルを作成して使用する方法を示すコード例が記載されています。
メモリ最適化テーブル メモリ最適化テーブルの概要を示します。
メモリ最適化テーブル変数 tempdb の使用を減らすために、従来のテーブル変数の代わりにメモリ最適化テーブル変数を使用する方法を示すコード例です。
メモリ最適化テーブルのインデックス メモリ最適化インデックスを示します。
ネイティブ コンパイル ストアド プロシージャ ネイティブ コンパイル ストアド プロシージャについて説明します。
インメモリ OLTP のメモリ管理 システムのメモリ使用量について説明し、メモリ使用量を管理する方法を示します。
メモリ最適化オブジェクト用ストレージの作成と管理 メモリ最適化テーブルでのトランザクションに関する情報を格納するデータ ファイルとデルタ ファイルについて説明します。
メモリ最適化テーブルのバックアップ、復元、復旧 メモリ最適化テーブルのバックアップ、復元、および復旧について説明します。
Transact-SQL によるインメモリ OLTP のサポート In-Memory OLTP の Transact-SQL サポートについて説明します。
インメモリ OLTP データベースにおける高可用性のサポート In-Memory OLTP の可用性グループとフェールオーバー クラスタリングについて説明します。
SQL Server によるインメモリ OLTP のサポート 新しい構文および機能、更新された構文および機能のうち、メモリ最適化テーブルをサポートするものを一覧にして紹介します。
インメモリ OLTP への移行 ディスク ベース テーブルをメモリ最適化テーブルに移行する方法について説明します。

インメモリ OLTP の詳細な情報は、以下で参照できます。

参照

データベース機能