劇的にパフォーマンスは向上するのか?SQL Server 2014 のインメモリ OLTP(Hekaton) を Windows Azure 仮想マシンで試してみよう
SQL Server 2014 にはインメモリ OLTP機能(コードネーム:Hekaton)が搭載されています。Windows Azure 仮想マシンはストレージまわりがボトルネックになりがちなので、これによりOLTPワークロードのパフォーマンスが劇的に改善される可能性があります。ちなみに Windows Azure 仮想マシンのギャラリーではSQL Server 2014 構成済みイメージが選択できるので、即座に環境構築してインメモリ OLTPの検証が出来るので便利です。
現時点(2013/12/09)でWindows Azure にはSQL Server 2014は評価版が提供されています。
とはいえ、インメモリ OLTP はどんな特性を持つシステムでもドンとこい!というわけではありません。諸々制限もあります。そこで、いくつかの推奨シナリオと構成をここで記載しておくので参考にしてください。
そもそも「SQL Server 2014のインメモリOLTPって・・・・?」という方は、最初にざっとでいいので自習書を読んでおくことを推奨します。
SQL Server 2014 自習書
https://www.microsoft.com/ja-jp/sqlserver/2014/technology/self-learning.aspx
推奨シナリオ
・開発、テスト環境として
Windows Azure 仮想マシンを使えばSQL Server 2014 の評価検証環境をサクッと構築できます。検証目的で自分のPCを汚す必要もありません。また分単位課金なので一時的に利用する開発、テスト環境としてはもってこいです。どうしてもお金が気になる方は無料評価版をうまく活用してください。
Windows Azure 無料評価版
・処理がReadメイン
インメモリOLTでは、メモリに保持されたデータのアクセスに最適化したアルゴリズムが採用されています。とくにオンラインの商品カタログのようなReadメインのシステムでは、本領を発揮して劇的にパフォーマンスが向上する可能性があります。
インメモリ OLTP (インメモリ最適化)
https://msdn.microsoft.com/ja-jp/library/dn133186(v=sql.120).aspx
・ログI/Oがボトルネックにならないシステム
通常のSQL Serverではデータの更新時(Insert/Update/Delete)にロックやラッチで待ち(Wait)が発生してパフォーマンスが低下することがありました。インメモリOLTPではロックを利用しないマルチバージョンの楽観的同時実行制御を採用しているため、Waitが発生してパフォーマンスが低下することがほとんどありません。このためログ I/Oがボトルネックにならななければ、かなりパフォーマンスが向上する可能性があります。
・厳密な永続化が不要な場合
インメモリ OLTP では「永続化(Durable) or 非永続化(Non-Durable) or 緩めの永続化(Delayed Durability ※CTP2以降)」テーブルの作成が出来ます。永続化する際には当然ながらディスクIOが発生するわけで、そこではパフォーマンスが落ちる可能性があります。永続化しないデータであればメモリ上で処理できるので、パフォーマンスが向上します。
メモリ最適化オブジェクト用ストレージの作成と管理
https://msdn.microsoft.com/ja-jp/library/dn133174(v=sql.120).aspx
適切な Windows Azure 仮想マシンのサイズ選択
検証する際は、ある程度メモリがのっているサイズを選択しましょう。
Windows Azure の仮想マシンおよびクラウド サービスのサイズ
https://msdn.microsoft.com/ja-jp/library/windowsazure/dn197896.aspx
推奨サイズの候補
インスタンス | 仮想コア数 | RAM |
Extra Large(A4) |
|
|
|
|
|
|
|
|
当然ながら必要とされるサイズはシステムによって異なります。次の記事を参考にサイズを検討してください。
メモリ最適化テーブルのテーブルと行のサイズ
https://msdn.microsoft.com/ja-jp/library/dn205318(v=sql.120).aspx
Hardware Considerations for In-Memory OLTP in SQL Server 2014
仮想マシンの構成
インメモリOLTPでベストパフォーマンスを出すためにはベストプラクティスに従ってください。基本的なものをいくつか列挙しておきます。
- 同じVMにアタッチする全てのディスクは、同じストレージアカウントを利用してください。
- ディスクキャッシュは無効にしてください。
- Temporary Disk (D: Drive)を利用しないでください。
- インメモリOLTP DBのログをストアするドライブでは、OSによるストライプは使用しないでください。ドライブのストライピングはI/Oオペレーションのレイテンシーを増加します。どうしても必要であれば、テストして影響ないことを確認してください。
- インメモリOLTPテーブルでデータ圧縮はサポートされません。
ちなみに、私がSQL Server 2014 自習書のシナリオで検証したところ、オンプレとほぼ同等の効果がありました。詳しくは自習書をご覧ください。
ご参考