劇的にパフォーマンスは向上するのか?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は評価版が提供されています。

sql

  

 

とはいえ、インメモリ 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 無料評価版

https://www.windowsazure.com/ja-jp/pricing/free-trial/

・処理が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)

8

14GB

A6

4

28GB

A7

8

56GB

当然ながら必要とされるサイズはシステムによって異なります。次の記事を参考にサイズを検討してください。

メモリ最適化テーブルのテーブルと行のサイズ

https://msdn.microsoft.com/ja-jp/library/dn205318(v=sql.120).aspx

Hardware Considerations for In-Memory OLTP in SQL Server 2014

https://blogs.technet.com/b/dataplatforminsider/archive/2013/08/01/hardware-considerations-for-in-memory-oltp-in-sql-server-2014.aspx

 

仮想マシンの構成

インメモリOLTPでベストパフォーマンスを出すためにはベストプラクティスに従ってください。基本的なものをいくつか列挙しておきます。

  • 同じVMにアタッチする全てのディスクは、同じストレージアカウントを利用してください。
  • ディスクキャッシュは無効にしてください。
  • Temporary Disk (D: Drive)を利用しないでください。
  • インメモリOLTP DBのログをストアするドライブでは、OSによるストライプは使用しないでください。ドライブのストライピングはI/Oオペレーションのレイテンシーを増加します。どうしても必要であれば、テストして影響ないことを確認してください。
  • インメモリOLTPテーブルでデータ圧縮はサポートされません。

  

  

ちなみに、私がSQL Server 2014 自習書のシナリオで検証したところ、オンプレとほぼ同等の効果がありました。詳しくは自習書をご覧ください。

 

 

ご参考

Boosting Transaction Performance in Windows Azure Virtual Machines with In-Memory OLTP

https://blogs.technet.com/b/dataplatforminsider/archive/2013/11/25/boosting-transaction-performance-in-windows-azure-virtual-machines-with-in-memory-oltp.aspx