「SQL Server 2014」が正式アナウンスに。高速化の仕掛けを取材。「AWS Summit Tokyo 2013」のセッションからはAmazon Redshiftの先行評価の情報を紹介する。
最近、次のSQL Serverの話題を耳にするようになりました。名称は「SQL Server 2014」で決まりのようです(関連記事、米国で開催されたTechEd会期中に発表されている)。
SQL Server 2014にはオンライントランザクション処理(OLTP)に向けたインメモリデータベース機能が搭載されることになっており、「Hekaton」は、この機能の開発コード名です。「SQL Serverを100倍速くしたい」というSQL Server開発者らの気持ちを込めて、100倍を表す「ヘクト」が転じてHekatonになったといいます。
今回は、日本マイクロソフトのSQL Serverカスタマーアドバイザリーチームでプリンシパルプログラムマネジャーを務める多田典史氏に、Hekatonについて話を聞きました。
SQL Serverの将来像は、PCサーバのハードウェア技術動向と密接な関係にあります。
最近のPCサーバでは、個々のCPUの動作周波数はさほど上がらないものの、マルチコア化が進み、メモリは価格が下落して大容量化が進んでいます。このトレンドに追随して、次世代SQL Serverは、マルチコアかつ大容量メモリといったハードウェアのトレンドに沿って開発が行われています。
データベースを利用するビジネスの観点からは、高速なOLTPエンジンが求められています。例えば、株取引やオンラインゲーム、サプライチェーンなどの用途に向けてです。近年では携帯電話やデバイスセンサなどといった機器が刻々と出力するデータの処理の必要性も増大しています。
SQL Serverの製品化に当たっては、目的別に整理する必要もありました。
これまでマイクロソフトは、特定の目的に特化したSQL Server製品を用意してきました。例えば、データウェアハウスのスケールアップに向けた「Fast Track Data Warehouse」やスケールアウトに向けた「Parallel Data Warehouse」などです。それと同様に、大容量のメモリを利用できるシステム向けの、OLTPに特化したエンジンとして開発が進められているのが、Hekatonです。
Hekatonで高速化を実現するための技術的なポイントとなるのが、(1)メインメモリにあるデータ処理の最適化、(2)T-SQL(Transact-SQL)のフルコンパイル、(3)行ロックフリーによる高並列化の3点です。
まずはメインメモリにあるデータ処理の最適化について見ていきましょう。
従来、データはディスクストレージに格納されており、そのデータはディスクからメモリに取り出して処理するため、データの格納単位には「ページ」が使われていました。
しかし、データを常にメモリに乗せるHekatonのアーキテクチャなら、ページ単位でデータを取り出す必要はありません。そこでHekatonのデータベースインデックスは、ページ(ノード)をたどっていくB-Treeではなく、ハッシュで管理する仕様になっています。これで、目的の行に直接アクセスできるようになります。
Hekatonでは、インデックスはメモリにのみ格納し、B-Treeなしのハッシュインデックスとしました。メインメモリに最適化したテーブルは下図の通りです。
行に2つのタイムスタンプを持たせることで、そのデータの有効範囲を表します。これら2つのタイムスタンプはデータの有効期間の最初と最後を表し、最後に相当するタイムスタンプが「∞」なら、有効なデータと見なします。
この仕組みは、行に複数のバージョンを持たせるために使います。1つの行をその都度更新するのではなく、更新の際には新しい行を作ってしまうのです。行のバージョン管理(どの行が古くてどの行が新しいのか)はタイムスタンプで判断します。これは後述するロックフリーにもつながります。
次に、T-SQLのフルコンパイルについて説明します。T-SQLとは、手続き型プログラミング言語のような変数や制御文などを加えたSQL言語です。
従来のT-SQLはインタプリタ的な処理をしていたのに対して、HekatonではT-SQLをフルコンパイルしてCPUのネイティブコードに変換し、処理の高速化を図っています。フルコンパイルしたストアドプロシージャはDLLとして保存されます。
最後にロックフリーです。近年ではマルチコア化が進み、多数のプロセッサコアで処理が並列に稼働します。そこで問題になってくるのが行ロックの問題です。ロックをうまく扱わないと、いくら並列で処理してたとしても、マルチコアの利点を生かせず、処理速度も高まりません。
Hekatonでは、行をロックしないという発想を採用しています。行を更新するときには、前述の通り、内部処理では新規行を追加しています。
行同士の比較・競合回避は「早い者勝ち」のルールで決めます。
先にアップデートしようとした方が実行され、後から処理しようとした方は拒否されるというルールです。古い行は、ガベージコレクションによって削除されます。
Copyright © ITmedia, Inc. All Rights Reserved.