db tech showcase 大阪2013 Hekaton セッションメモ

Database Watch(2013年6月版):SQL Server 2014 処理高速化の仕掛け/Redshiftの先行評価の内容とは? (1/2) - @IT で SQLCAT 多田 さんのお話しが載っていたので、
この前の db tech showcase 大阪 2013 | Insight Technology, Inc. での Hekaton セッションの個人的なメモを書いておきます。

ほぼ、上記記事と同じ内容です。

メインメモリ最適化

 メモリ中データの最適化
  ページの概念は、メモリとディスクの行き来を想定している。メモリ内で完結するならページである必要が無い。
 インデックスはメモリ中のみ(Hash/Range)
  インデックスのメンテナンスに関するI/O無し
  インデックスはデータファイルに存在しない(ファイルサイズ減)
 バッファプール無し/B-Tree 無し
  B-Tree の場合、1行にアクセスするために、数ページ辿る必要がある
  Hekaton では、ハッシュインデックス。目的の行にダイレクトにアクセス
 ストリームベースのストレージ
  従来のチェックポイントでは、大量のランダムI/Oを発行
 メインメモリ
  Hekaton は UPDATE しない
   Timestamp を保持した追記型
  テーブルは行の集まり/行は複数バージョン保持
   それぞれの行は、2つのタイムスタンプによる有効範囲を保持している

T-SQL のフルコンパイル

 上がらないクロック => CPU を浪費しない必要性
 従来は、インタプリタ
 プロシージャコールは、DLLのエントリポイント
  コンパイルされたストアドプロシージャは DLL として保存される
   マシンコードまでコンパイルする
 フルコンパイルは、Hekaton だけ
  使える SQL 文にも制限がある
  通常の SQL Server のストアドはフルコンパイルしづらい
   ディスクにデータがあるため、コンパイル時に最適な実行プラン等を決められない

ロックフリーの高並列

 マルチバージョン楽観的並列制御下でのフルACID
  UPDATE は、内部的に INSERT
   有効範囲外データは、GC で回収
  =>後から UPDATE を発行した方が負ける
   COMMIT では無い!!
   =>通常の SQL Server だと、UPDATE でロックが掛かるので後から来た UPDATE はロックが解除されるのを待つ。
 コアエンジンがロックフリーなアルゴリズム
  CPUインストラクションレベルでの排他制御 (CMPXCHG)
 ロック/ラッチ/スピンロック なし
  アプリケーションによるロック競合
  ページラッチ/ページIOラッチ
  内部構造へのアクセスのためスピンロック
トランザクションログは同じファイルを利用
 ログレコードは少し変わっている


V1では、高速化を要するデータ・アプリケーションの一部の移行をターゲットにしている
 いきなり全部 Hekaton ではない
Hekaton もデータはファイルに書き込みを行う
 書き込みは非同期だから、書き込み前にサービスが落ちたらデータは消失する?
 =>commit 時にトランザクションログには書き込みを行うのでそこから復旧可能