インメモリ OLTP (インメモリ最適化)
SQL Server 2014 (12.x) の新機能である In-Memory OLTP は、OLTP データベース アプリケーションのパフォーマンスを大幅に向上させることができます。 In-Memory OLTP は、OLTP 用に最適化された、SQL Server エンジンに統合されたメモリ最適化データベース エンジンです。
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 の詳細な情報は、以下で参照できます。