日々のSQL Serverの商談活動でお客様と会話する際に「”インメモリ”だから早いんでしょ?」という質問をよく頂きます。”インメモリ” = 速い という漠然としたイメージが読者の皆さんの中、ひいてはこの業界の中に植え付けられているように感じています。
これはこれで間違いではないのですが、今回の記事ではSQL Serverとメモリ関連テクノロジーを少し掘り下げてみたいと思います。
SQL Serverに限らず古今東西の様々なリレーショナルデータベースは基本的にメモリが今よりもはるかに高価で貴重なものだった時代に設計されています。よって、データは処理に必要な時にメモリに読み出し、通常はディスクに置いておくのに最適なアーキテクチャーを取っています。
しかし、この30年でメモリの価格は大幅に下がり、CPUはマルチコアが当たり前の世の中になってきました。実際に今日、CPUが40コア、搭載メモリが1TBというような一昔前のモンスターマシンは500万円以下で手に入るようになってきています。
我々は、”インメモリだから速いですよ”と一口に片付けてしまうのではなく、お客様が実行するワークロードに最適なテクノロジーをご提供したいと考えています。SQL Serverではそれぞれのワークロードに応じて最適な選択ができるよう、2種類のメモリ関連テクノロジー(Hekaton、xVelocity)を様々に組み合わせた実装を行っています。
ここでメモリを活用した技術アプローチと本連載において使用する用語について簡単に整理しておきます。
インメモリ型(メモリ常駐型)
メモリの大容量化・低価格化により、数TBのメモリを搭載したサーバーを安価に導入できるようになりましたが、それに伴って市場には”インメモリ(データのメモリ常駐型)データベース”が登場してきました。ストレージよりも高速なメモリ上にデータを常駐させておくことで、従来のディスクベースのデータベースに比べ、処理によっては数十倍も高速になるケースも出てきました。しかし、導入に際してはまだ考慮すべき点があります。
- メモリよりもデータが大きくなった(データがメモリに収まらない)場合、システムは動作しなくなる。また、起動時のメモリへのデータロードに時間がかかる
- メモリにデータを載せただけでは従来のオンメモリ型と大きく変わらないが、関連するテクノロジーの改良により驚異的なパフォーマンス向上を可能とする
オンメモリ型(メモリ最適化型)
近年、メモリの大容量化・低価格化だけでなく、CPUの高集積化・高速化も飛躍的な進歩を遂げています。メモリ最適化テクノロジーは、単にデータをメモリにロードして高速化しようとするだけでなく、高度な符号化・圧縮テクノロジーでより効率的にメモリを使用すると共に、CPUのマイクロアーキテクチャに適した命令やキャッシュ活用したテクノロジーです。
- メモリにデータが収まる場合にはインメモリテクノロジーと同等のスピードが得られる
- メモリにデータが収まらない場合でも、従来のデータベースに比べて高速処理が実現できる
インメモリ+α型(メモリ常駐が基本、但し動作モード変更が可能)
SQL Server の分析データベース機能である Analysis Services 表形式モードは、マイクロソフトが開発したメモリ最適化データ管理テクノロジーであるxVelocity を利用したインメモリ型(メモリ常駐型)分析データベースです。ただし、Analysis Services 表形式モードにおいて扱うデータがメモリに収まらない場合や、データソースへリアルタイムアクセスする必要がある場合には DirectQuery 機能によりメモリへのロードを回避することもできるようになっています。
これらのテクノロジーは、SQL Serverを利用して下さる皆さんにとって使い難い、一部の人しか使えないものであっては意味がありません。我々マイクロソフトは、ライセンスやソフトウェアコンポーネントといった側面においてもSQL Serverという製品を購入頂ければ追加で何かを必要とすることなく全てのインメモリ関連テクノロジーをご利用頂けるようにしています。