ついにマイクロソフトのSQL Serverが本格的なインメモリDBに進化する。開発コード名「Hekaton(ヘカトン)」で知られていたインメモリOLTP機能が、「Microsoft SQL Server 2014」の標準機能として利用できるのだ。アプリケーションを変更せずに平均で10倍の高速化を実現するこの機能は、多くの企業ユーザーが抱えているDBの性能課題を解決に導くだろう。
「SQL Server 2014のリリースにあたり、日本の企業ユーザーがデータベース(DB)に抱えている課題をIT専門の調査会社に調べてもらいました。その結果、OLTP(オンライントランザクション処理)用途では“トランザクション性能”が課題のトップであることが再確認できました」
日本マイクロソフトでSQL Serverのマーケティングを統括する北川剛氏は、こう語る。この調査結果は、従業員数100人以上の国内企業に勤務し、DB管理またはDB製品選定に関わる個人(母数200)を対象に実施されたアンケートによるもので、株式会社アイ・ティ・アール(ITR)が2013年11月に発表した調査報告書『普及が予測されるインメモリ・データベース 〜ユーザー調査に見る現状と今後〜』にその詳細がまとめられている。
アンケートの回答者がOLTP用途の課題(複数回答)としてトップに挙げたのが、「トランザクション性能」(41.5%)だ。以下、「データベース数の増加」(32.0%)、「データボリュームの増加」(31.5%)、「セキュリティ対策」(30.5%)、「クエリ(検索)性能」(27.5%)と性能に関する課題が続く(図1)。
DBの性能課題に対する“究極の解決策”が、リレーショナル操作などをメモリ上で行う「インメモリ処理」であることは古くから知られていた。ただ、インメモリ処理にはいくつかの弱点や副作用があることも事実。ITRの調査報告書では「運用管理コストの増加」(36.5%)、「ハードウェアコストの増加」(35.0%)、「ソフトウェアコストの増加」(33.0%)、「利用可能なデータ量の制限」(25.5%)、「可用性/耐障害性の低下」(23.5%)、「インメモリ化するデータベースの選択基準が不明確」(22.5%)、「既存のアプリケーションとの互換性」(21.0%)などが主な懸念材料として挙げられている(図2)。
「SQL Server 2014で新たに搭載されるインメモリOLTP機能は、お客さまが感じているさまざま懸念に対するマイクロソフトからの回答となるものです」と、北川氏。SQL Server 2014はトランザクション性能と可用性/耐障害性を両立させつつ、従来からのリレーショナルデータベース(RDB)エンジンとの互換性にも留意したと説明する。
SQL Server 2014の特徴の1つは、2種類のDBエンジンを搭載したこと。1つは従来からのRDBエンジン、もう1つはインメモリOLTPエンジンで、特に性能を要求される処理にはインメモリOLTPエンジン、その他の処理には既存のRDBエンジンと使い分けられるようにしたのである。しかも、インメモリOLTPエンジンはSQL Server 2014の標準機能として提供されるので、オプションとして別途購入する必要はなく、追加のコストも発生しない。
インメモリOLTPエンジンでは、データは「メモリ最適化記憶域」(物理メモリ容量の80%まで確保可能)の中に「メモリ最適化テーブル」と「メモリ最適化インデックス」として保持される。従来からのRDBエンジンとの違いは、(1)ページ構造を使わないこと、(2)バッファプールを設置しないこと、(3)B-Treeなしで直接次レコードをポイントしていることの3点だ。ハードディスクドライブ(HDD)の構造や動作を想定した仕組みを取り外し、メモリ上での操作に特化することで最大限の性能を発揮している。
もちろん、可用性/耐障害性もしっかりと確保される。不意の停電などへの対策としては、メモリ上の更新済みデータを退避しておくための永続格納領域「メモリ最適化テーブルファイルグループ」を新設。処理待ちデータ用のトランザクションログも従来と同じく存在するので、停電以外の理由による障害からも確実に回避できる。
また、従来のRDBエンジンとの互換性確保のため、インメモリOLTPエンジンに対する操作はTransact-SQL(T-SQL)で行われる。ページ構造が存在しないなどの相違については、互換性維持のための機能で自動的に対処。「通常のSQL文で両方のエンジンにもアクセスできるので、既存アプリケーションの書き換えは不要です。データだけを移し替えるだけで移行できます」と北川氏はアピールする。
とはいえ、T-SQLのパーシング(構文解析)処理でオーバーヘッドが発生することは避けられない。本体のデータ操作をインメモリ処理で高速化したのに、T-SQLの解析に時間がかかっていたのでは意味がない――という理由から、SQL Server 2014ではストアドプロシージャ(SP)をネイティブバイナリコードにコンパイルすることができる。
コンパイル後のSPは、一般的なプログラムと同じようにdll形式のファイルとして保存される。コンパイルの際にはコード最適化も行われるので、コードの処理速度は10倍程度向上する、と北川氏は説明する。
一方、ユーザーにとって使い勝手を左右する運用管理性については、これまでも定評があったSQL Serverのツールなどをうまく引き継いでいる。
例えば、運用管理コンソールは従来と同じ「SQL Server Management Studio」が利用可能だ。インメモリOLTP処理と従来型の処理が混在する環境も一元的に管理できるので、新しい操作方法を覚えるためのトレーニングも不要。また、バックアップ/リストアもこれまでと同じ操作で行える。SQL Server 2012で搭載された高可用性機能「AlwaysOn 可用性グループ(Availability Groups)」は、インメモリ OLTP 機能に対してもそのまま適用することができる。
既存のテーブルをインメモリ処理用のメモリ最適化テーブルに移行するかどうかの判断には、SQL Server Management Studioに含まれる「Analysis, Migrate and Report(AMR)ツール」が役立つ。AMRツールは、SQL Serverが内部で保持しているパフォーマンスデータ「パフォーマンスデータコレクション」を分かりやすく可視化するツールだ。北川氏は、「テーブルごとのロック待ちやラッチ待ち、総CPU時間の長いSPをリストアップさせれば、『このテーブルはロック競合が多発しているからインメモリ化しよう』『このSPはネイティブコンパイルすれば速くなりそうだ』といった判断も容易になります」と説明する(図3)。
この他、SPをネイティブコンパイルする際の支援ツールとしては、従来からのRDBエンジンとインメモリOLTPエンジンで互換性のないT-SQL要素(関数など)を自動検出する「ストアドプロシージャネイティブコンパイルアドバイザー」も用意されている。
SQL Server 2014のインメモリOLTP機能によって、ユーザーはどのようなメリットを享受できるのか――。
第1に挙げられるのは、OLTP型の業務アプリケーションを高速に実行できること。日本マイクロソフトの技術資料によると、「アプリケーションの書き替えなしで約10倍高速化」、「SPのネイティブコンパイルで約10倍高速化」とのことだ。単純計算では、最大100倍の高速化になる。
実際には、平均して10倍というところが期待値になるという。「トレーディングシステムにSQL Server 2014 Community Technology Preview 2(CTP 2)を適用されたSBIリクイディティ・マーケット株式会社さまでは、約10倍の性能向上を実現できたとのことです」と、北川氏。CTP 2で検証を進めている企業は他にも数社あるそうで、2014年初めにはいくつかの検証結果の発表できそうだとのことだ。
また、「可用性/耐障害性は別の方法で確保するので、SQL Server 2014は高速処理に専念させたい」というユーザーの要望に対しては、「SCHEMA ONLY」が用意されている。このモードは、メモリ最適化テーブルファイルグループとトランザクションログに関する処理を省略することで超高速処理を実現する。データ複製とロギングに伴うオーバーヘッドがゼロになり、HDDへのアクセスも発生しないので、“究極の処理スピード”が得られる。
特別なデータ構造ではなく、論理的には従来と同じ構造のメモリ最適化テーブルを使うことから、SQL Server 2014のインメモリOLTP機能は「データベース数の増加」や「データボリュームの増加」にも柔軟に対応することが可能だ。
「他社のインメモリDB製品には、バックエンドにDBを必要とするものもあります。SQL Server 2014のインメモリOLTP機能は、既存のテーブルをメモリ最適化テーブルに置き換えるだけです。DBを二重に持つわけではありませんから、数やボリュームが増えても困ることはありません」(北川氏)
SQL Server 2014では、DWH(Data Warehouse)/BI(Business Intelligence)用途の課題解決にもインメモリ処理がフル活用される。
前出のITRの調査報告書では、DWH/BI用途での課題の第1位に「データボリュームの増加」、3位に「クエリ(検索)性能」が挙がっている(図4)。ビッグデータ時代を迎えてDWH/BIでの分析対象となるデータが増え、クエリ速度へのニーズがさらに高まっているからだ。
こうしたDWH/BI用途の課題を解決するのが、SQL Server 2014の「メモリ最適化列ストア」になる。メモリ最適化列ストアは、SQL Server 2012で実装された「列ストアインデックス」をインメモリに対応させたもので、懸案だった「更新」も可能になっている。カラム指向型データベースでありながら、OLTPでの更新とDWH/BIでの分析の両方を扱えることが大きな特徴になる。
メモリ最適化列ストアが「データボリュームの増加」という課題を解決できるのは、データ容量を高率で圧縮できるからだ。メモリ最適化列ストアは、元データを複数行から成るRow Groupに分割し、そのRow Groupを列ごとのセグメントに小分けし、そのセグメントの単位で読み書きを行う。このセグメントをインメモリ型分析エンジン「Vertipaq」で圧縮することで、4〜15倍という高い圧縮率を実現。マイクロソフトの検証では、19.7GBのデータが1.8GBにまで圧縮されたという結果も出ている。
また、必要なセグメントだけをメモリ最適化記憶域に配置する「セグメントエリミネーション」機能により、行ストアでは物理メモリを超えるデータをインメモリに格納できることも、クエリの高速化に大きく貢献する。
DB管理者の視点から見たSQL Server 2014は、低コストで導入し、業務システムが稼働を始めてからでもデータを段階的にインメモリDBに移行できることが大きな魅力になる。
「インメモリDBを段階的に始めていけることが、SQL Server 2014の大きな強みです。SQL Server 2014を導入さえしていただければ、いつでも、追加コストなしで、インメモリDB化していくことができます。一般的な企業では、業務システムがカットオーバーしてからインメモリ機能を追加購入するのは難しいはずです。SQL Server 2014のインメモリ機能であれば、効果を確かめながらテーブルを1つずつ移行していく、といった段階的な導入方法が可能です」(北川氏)
北川氏によると、SQL Server 2014を実際に使えるようになるのは2014年春ごろになるとのこと。
OLTPとDWH/BIを高速化することで顧客満足度を高め、同業他社に対する競争優位性を確保する――。こうした展望を持つ企業にとって、インメモリ処理を低コストで実現できるSQL Server 2014はベストな選択となるだろう。
Copyright © ITmedia, Inc. All Rights Reserved.
提供:日本マイクロソフト株式会社
アイティメディア営業企画/制作:@IT 編集部/掲載内容有効期限:2014年2月15日