Skip to content

MS_InMemoryOLTP

nishi_74322014 edited this page Aug 19, 2026 · 1 revision

メモリ最適化データベースエンジン

概要

補足(原文が空欄のため、要点を補う): In-Memory OLTP
(旧称 Hekaton。SQL Server 2014 以降)のこと。
テーブルをメモリ常駐にし、ロック・ラッチを使わずに
高スループットな更新処理を行う機能である。

通常のテーブルとの違い

ディスク ベース テーブル メモリ最適化テーブル
配置 バッファ プール経由でディスク 常時メモリ上(全行がメモリに載る)
同時実行制御 ロック / ラッチ ロックフリー(楽観的な多版同時実行制御)
インデックス B-Tree ハッシュ / 非クラスター化(メモリ専用構造)
永続性 常に永続 永続(SCHEMA_AND_DATA)/ 非永続(SCHEMA_ONLY)を選べる
主な効果 ラッチ競合・ロック待ちの解消

何に効くのか

単に「メモリに載せるから速い」のではない。
通常のテーブルでも、よく使うページは
バッファ プールに載っている。
本当の効果はロックとラッチの排除にある。

【従来】 大量の同時更新 → ロック待ち・ラッチ競合 → CPU を使い切れない
【In-Memory OLTP】 競合そのものが構造的に発生しない

したがって、同一行・同一ページへの更新が集中して
スケールしない
という症状に効く。
SQL Server でのロック・タイムアウト
SQL Server のロックのエスカレーション
扱う問題の、根本的な回避策の一つと言える。

ネイティブ コンパイル ストアド プロシージャ

併せて提供される機能で、T-SQL をマシン語(DLL)にコンパイルして実行する。
インタープリタのオーバーヘッドが消えるため、
メモリ最適化テーブルへのアクセスがさらに速くなる。

実務上の注意

  • 全データがメモリに載る前提なので、
    テーブル サイズ分のメモリ(+更新用の余裕)が必要になる。
  • メモリ不足になると更新が失敗する(ディスクへの退避が無い)。
  • 制約や機能に制限がある(バージョンにより異なる)。
  • SCHEMA_ONLY(永続化しない)は、
    一時テーブル・セッション状態・ステージングの高速化に有効。
    再起動で消えてよいデータなら、ログ書き込みすら不要になる。

使いどころの判断

「まずこれを試す」機能ではない
SQL Server 問題の分析方法 の手順で
ボトルネックを特定し、ロック / ラッチ待ちが支配的だと
分かった場合に検討する、という順序になる。

参考

Microsoft Learn


Tags: 移行, データアクセス, SQL Server

NetDevInfraWiki

マイクロソフト系技術情報 Wiki
Open 棟梁 Wiki

(未着手)

開発基盤部会 Wiki

移行管理: DONETODO

Clone this wiki locally