列指向データベースでもOLTPに対応したSAP Sybase IQ16の機能拡張


こんにちは、SAPジャパンの境です。暑い中皆様いかがお過ごしでしょうか?今回も前回に引き続きSAP Sybase IQ16の新機能のいくつかを詳細に解説したいと思います。

OLTP処理の対応:ローレベルバージョニング

TC002214前回の最後に「インメモリーローレベルストア」と書きましたが正式名称は「ローレベルバージョニング」となります。Sybase社が販売していたデータベース製品は対象の用途、対象の業務規模等に応じて複数あり、「これ一つでどんなものにも対応」というデータベース製品はありません。これらのデータベース製品はそれぞれの用途に応じて専用の設計がされています。SAP Sybase IQはビッグデータの解析に特化された列指向データベース製品であり、OLTP系処理は苦手としています。

例えばSAP Sybase IQは複数のユーザーが一つの表に対して同時に書き込み系の処理を行うことが仕様上できません。(注:一つの表に対しての一つの書き込み系の処理と複数の読み込み系の処理は同時に行うことができますよ。)片方のユーザーのトランザクションが完了するまでもう一人のユーザーは待ち状態、もしくはロック待ちでエラーとなります。これはSAP Sybase IQはデータウェアハウス用であり、データウェアハウスにおいてデータの書き込み系処理はバッチやSAP Data ServicesなどのETLツール等で管理者の管理のもと行われるという想定で、OLTP的に複数のユーザーが同時に書き込みを行うという状態は設計思想に含まれていないためです。そのため昨今増えてきたデータウェアハウス上の少量のデータをWebアプリから修正するなどという要求に対してはSybase IQ 15.4までは少々トリッキーな手段を用いないと、処理の同時並列性の面で難しいという事が言えました。

SAP Sybase IQ 16ではローレベルバージョニング(以下RLV)という機能が追加され、このような要求に簡単に応えることができるようになりました。これは「指定したテーブルにインメモリーのデータ領域を追加する」という機能です。「指定したテーブル」の通りこの機能はテーブル単位で有効・無効の設定が可能で、有効にしたテーブルのみで使用できます。

Picture1

RLV機能は上記の様にメモリー上に作成するインメモリーRLVストアとディスク上に作成するRLV DB領域の2つが主となり構成されます。RLVの使用が宣言されたテーブルに対しての書き込み系処理はインメモリーRLVストア、つまりはメモリー上の領域に対して行われ、その後ディスク上のIQストアに対して定期的にマージ処理が行われます。

例えばInsertによるデータ追加はメモリー上の領域に対して行われます。(これは非常に高速に終了します。)Deleteはメモリー上の領域に対して「削除した」という情報を書き込むという処理で行い、Updateは削除と挿入の組み合わせとしてメモリー上の領域に書き込まれます。そしてこれらの操作は定期的に行われるマージ処理でディスクに反映されるという仕組みです。前回解説したデルタマージと同様にマージされる前はデータがディスク上とメモリー上に分散することになりますが、オプティマイザはそれをきちんと認識しますので開発者側がそれを考慮する必要はありません。

RLV DB領域は「DB領域」となっていますが、実質「ログ」が格納されます。インメモリーRLVストアはメモリーですのでマージされる前に電源断などが発生した場合インメモリーRLVストアに対しての作業内容が失われることになります。そのためトランザクションがコミットされた時点で同期的にRLV DB領域にその内容を書き込みます。そしてマージが完了するとRLV DB領域の内容はクリアされます。もしマージ前に電源断などが発生した場合、RLV DB領域の内容を用いてリカバリーが行われますので最終コミット時点まで復旧が可能です。

この機能ですが現在のところ「マルチプレックス環境では使用できない」という制限があります。また、SAP Sybase ASESAP Sybase SQL Anywhere、他社RDBMSの置き換えとしてOLTPシステムでバリバリご使用いただくという用途に向くとは言い難いのが現状です。ただし、これまで対応困難であったOLTP系処理がSAP Sybase IQ上で行えるようになりましたので先に挙げましたオンラインでのデータ修正、データ追加など単純なOLTP系処理にぜひご利用いただければと思います。

スケールアウト構成での機能拡張:マルチプレックスの拡張

新機能の解説に入る前にRLVの最後にも出てきました「マルチプレックス(Multiplex)」という機能について解説しましょう。

image003

マルチプレックスはSAP Sybase IQのスケールアウト機能となります。これは共有ディスクグリッドテクノロジーでありSAP Sybase IQデータベースサーバーを複数台のマシンで構成することで性能と可用性を同時に向上させることができます。また、特別なハードウェア、オペレーティングシステムを使用するのではなく通常のハードウェア、オペレーティングシステムによって構成される環境のため総所有コストを低く抑えることができるというのも魅力の一つです。

image005

マルチプレックス構成ではユーザーから要求された問い合わせが分散処理可能な場合、それぞれのサーバーノードに問い合わせを分散して処理させることができます。これにより処理の高速化を行うことが可能で、実際に1つのクエリを3ノードで分散処理させたところ処理時間が1/3になったという事例もあります。このようにSAP Sybase IQではビジネスの成長により使用しているハードウェアの処理能力が不足した場合でもハードウェアを買い換えるのではなく「ハードウェアを追加する」という対応を選択肢に入れることができます。ビジネスの成長に合わせて買い換えより低コストで性能と可用性を同時に向上させることが可能です。

SAP Sybase IQではマルチプレックス機能周りにも手が加えられました。以下がトピックス的な機能となります。

  • データアフィニティ
    Sybase IQ 15.4までのマルチプレックスではクエリの分散の際に分散されたクエリの推定処理量と現在の各ノードのリソースの使用度合いにより分散されたクエリを割り当てるノードを決定していました。SAP Sybase IQ 16ではここに「ノードのキャッシュの状態」が追加されます。分散されたクエリの処理に必要なキャッシュを持つノードが存在する場合、そこに分散クエリを割り振ることでディスクからの読み込み量が削減されパフォーマンスを向上させることができます。
  • キャッシュヒット率の向上
    表のデータに変更があった場合のキャッシュの再作成のアルゴリズムが変更され、キャッシュのヒット率が向上しました。
  • トランザクションの復元
    マルチプレックス環境の分散処理は書き込み系処理にも適用されますが、分散書き込み処理中に処理を行なっているノード間の接続がどれか1つでも何らかの理由で切断した場合、これまでは分散して行っていたすべての処理が即時ロールバックされていました。SAP Sybase IQ 16では指定した時間内に切断したノードとの接続を復旧すればその処理は継続させることができます。
  • テンポラリー領域の変更
    マルチプレックス環境において各ノード上でそれぞれ確保が必要だったローカルテンポラリー領域は必須ではなくなり、共有システムテンポラリー領域をその代わりに使用することができます。また、共有システムテンポラリー領域の代わりに各ノードのテンポラリ―キャッシュを使用するという機能が追加されました。

マルチプレックスはSybase IQ15より追加された機能です。SAP Sybase IQ 16では熟成が進み無駄をなくし、更なるパフォーマンスの向上に繋げるようにしています。

その他の変更点

機能拡張等と比べて地味な変更点ですが、Sybase製品全般で長らくご利用いただきましたGUI管理ツールの「Sybase Central」ですが、SAP Sybase IQ 16で廃止となりました。「Sybase Control Center」が後継ツールとなります。

image007

SAP Sybase IQ 16からはこちらをご利用いただくことになります。機能的にはSybase Centralと同機能のツールとなりますが、Webブラウザ上で動作するAdobe Flashベースのツールとなります。なお、「Interactive SQL(dbisql)」はこれまでどおり付属しますので、バッチなどにご利用されていたお客様はご安心ください。

さて、2回にわたりSAP Sybase IQ 16の新機能を解説させていただきましたがいかがでしたでしょうか?私見ですがSAPというアプリケーションベンダーとの統合で、Sybase時代より「業務システムで使用する」が強く考慮され、より実践的な部分に手が加えられたなという印象があります。今後も旧Sybaseのデータベース製品はSAPの製品ラインアップとして発展していきますのでぜひともご利用いただければと思います。

ご質問はチャットWebからも受け付けております。お気軽にお問い合わせください。

●お問い合わせ先
チャットで質問する
Web問い合わせフォーム
電話: 0120-554-881(受付時間:平日 9:00~18:00)