TOP>企業情報>コラム>技術情報>既存の概念を覆す!Oracle Database In-Memoryのテクノロジー Vol.1

既存の概念を覆す!Oracle Database In-Memoryのテクノロジー Vol.1

2014年7月22日、インメモリ技術によってOracle Databaseを高速化するOracle Database In-Memoryがリリースされました。本連載では、OLTPとDWHの処理を同時に高速化し、「業務を変える」とまで言われているその仕組みや性能に迫ります。

Vol.1 OracleDBを超高速化!図解でわかるOracle Database In-Memoryの仕組み

役者が揃ったインメモリ・データベース市場


Oracle Open World 2013でその存在が明らかになってからおよそ1年、ついにOracle Database In-Memoryの提供が開始されました。先日開催された国内向けのローンチ・イベントとなるOracle DBaaS & Big Data Summitでは、セミナー会場が満席となり立ち見が出るなど、本製品には非常に多くの期待が寄せられています。

インメモリ・データベースについてはこれまで多くの製品がリリースされており、1990年代にTimesTen社やSolid Information Technology 社などが先駆者となり歴史を作ってきました。最近ではSAP社のHANAやIBM社のDB2 BLU Acceleration、Microsoft社のSQL Serverなどインメモリの技術が次々と投入され、データベースにおけるトレンドになりつつあります。

ITR社のユーザ調査では、「インメモリ・データベースをすでに導入している」と回答した割合が23.0%、「今後1年以内に導入を予定している」が19.0%、「導入に向けて具体的な取り組みを始めている」が12.0%となっており、その注目度は数字にもはっきりと現れています。

インメモリ・データベースの導入状況

図1:インメモリ・データベースの導入状況

Oracle Database In-Memoryも広い意味ではインメモリ・データベースに分類される製品ですが、これまでのインメモリ・データベースとの大きな違いは、「アプリケーションやSQLの変更なしに、OLTPとDWH処理の両方を高速化できる」という点です。インメモリ用に別のソフトウェアやハードウェアを導入したり、固有のプログラムを書く必要はありません。Oracle Database用に作成された既存のアプリケーションやデータといった資産をそのまま使うことができるのが、最大の強みであり差別化のポイントです。セットアップも非常に簡単で、Oracle Databaseが導入されている環境で機能をオンにするだけです。

Oracle Database In-Memoryの特徴

図2:Oracle Database In-Memoryの特徴

行と列のデュアル・フォーマット


現在稼働している多くのデータベース・システムでは、用途に応じて「OLTP用」と「DWH用」のデータベース(DBMS)をそれぞれ使い分けています。DBMSにはロー(行)型、カラム(列)型という2つの代表的なフォーマットがあり、それぞれ向き不向きが存在するためです。

例えば、Oracle Databaseが採用しているロー型のフォーマットの場合、少数の行に対して多くの列を扱うようなOLTPとしての用途には向いていますが、大量の行に対して少数の列を扱うDWH処理には向いていません。カラム型のフォーマットはその逆で、DWH処理には向いているものの、OLTPには向いていないという特性があります。
※ 適切な索引を作成したり、圧縮やパラレル処理を行うことで性能向上を図ることはできます。

そのため、以下のようにOLTP用のデータベース(基幹系システム)で追加/更新されたデータをDWH用のデータベース(情報系システム)にロードし、それから分析をするという構成にならざるを得ず、このタイム・ラグがリアルタイムな情報活用を困難にしていました。

ロー型とカラム型の使い分け

図3:ロー型とカラム型の使い分け

Oracle Database In-Memoryでは、メモリ上にロー型とカラム型のフォーマットを同時に保持するという仕組みを採用しており、OLTPとDWH処理の両方を高速化できるようになっています。OLTPでは従来どおりデータベース・バッファ・キャッシュを使い、DWH処理では新しく実装された「インメモリ・カラムストア」というメモリ領域を使います。

インメモリ・カラムストア内のデータはカラム型のフォーマットになっており、DWH処理をディスクI/Oなしで実行できます。Oracle Databaseの中に、DWH処理に特化した機構が実装されたと考えれば分かりやすいでしょう。これにより、ロー型と比べて数十倍~数百倍の性能向上が期待できます。

情報系システムにデータをロードしてから分析するというこれまでの常識を変え、OLTPもDWH処理もすべて同じデータベース上で高速に処理できるのが、Oracle Database In-Memoryなのです。

Oracle Database In-Memoryのデュアル・フォーマット

図4:Oracle Database In-Memoryのデュアル・フォーマット

アプリケーションからは透過的


Oracle Database In-Memoryは、従来のOracle Databaseにインメモリ・カラムストアを追加したものです。あくまでOracle Databaseとして動作するので、カラム型のデータだからといってSQLを書き換えたり、表の構成を変更する必要はありません。インメモリ・カラムストアとバッファ・キャッシュのどちらを使うのかは、オプティマイザが自動的に判断してくれます。

また、インメモリ・カラムストアとバッファ・キャッシュのデータにはトランザクションの一貫性があり、更新内容も自動的に同期がとられるようになっています。そのため、どちらか一方のデータだけが古くなるという状況にはなりません。これにより、OLTPを実行しながら、その裏で最新のデータを使ったDWH処理を実行するというリアルタイムな情報活用が可能になります。

アプリケーションからの透過的なアクセス

図5:アプリケーションからの透過的なアクセス

インメモリ・カラムストアの存在は、OLTPの性能にも良い影響を与えます。DWH処理をインメモリで行うことで索引が不要になり、表のデータを更新する度に行われていた索引メンテナンスのオーバーヘッドがなくなるからです。DWHでは分析軸(WHERE句の条件)が多いほど索引の数が増えていくので、表にある大半の列に索引が作成されているというケースも珍しくありません。そうなるとデータを更新する際にかなりのオーバーヘッドが発生してしまいますが、Oracle Database In-Memoryではそのような心配はありません。これがOLTPを高速化できる理由です。

索引の削除によるOLTPの高速化

図6:索引の削除によるOLTPの高速化

3ステップで設定完了


Oracle Database In-MemoryはOracle Database 12.1.0.2から提供された新しいオプションなので、使用にあたっては最新のパッチ・セット・リリース(PSR)を適用する必要があります。環境さえ用意できればあとは簡単で、最短3ステップで設定が完了します。

Oracle Database In-Memoryの設定に必要な3つのステップ

  • 1. インメモリ・カラムストアのサイズを決め、初期化パラメータを設定する
  • 2. インメモリ・カラムストアに格納するデータを選択する
  • 3. インメモリ・カラムストアにデータを読み込む(ポピュレーションを行う)


①インメモリ・カラムストアのサイズを決め、初期化パラメータを設定する

インメモリ・カラムストアのサイズは、初期化パラメータのINMEMORY_SIZEで指定します。最小値は100MBで、インストール直後は0(無効)になっています。インメモリ・カラムストアはSGAの中に含まれる領域であるため、設定の際はSGA_TARGETのサイズを大きめに設定しておく必要があります。設定の反映にはインスタンスの再起動が必要です。

また、インメモリ・カラムストアは自動メモリ管理(SGA_TARGET,MEMORY_TARGET)の対象にはならないので、サイズの自動調整は行われません。そのため、ある程度余裕を持ったサイズを指定しておくと良いでしょう。

インメモリ・カラムストアの設定

図7:インメモリ・カラムストアの設定

②インメモリ・カラムストアに格納するデータを選択する

インメモリ・カラムストアには、インメモリ化することを明示的に指定したデータだけが格納されるようになっています。表単位で指定できるのはもちろんのこと、限られた領域を効率的に使うために特定の列やパーティションだけを指定することもできます。

格納するデータの選択

図8:格納するデータの選択

設定方法は非常に簡単で、例えば表全体をインメモリ・カラムストアに格納したい場合は、以下のようにALTER文でINMEMORY属性を指定するだけです。

ALTER文


③インメモリ・カラムストアにデータを読み込む(ポピュレーションを行う)

データ・ファイルの中にあるデータをインメモリ・カラムストアに読み込む動作を「ポピュレーション」と呼びます。ポピュレーションが行われるタイミングは大きく2つあり、以下のように優先度を明示的に設定している場合は、バックグラウンド・プロセスによって自動的にポピュレーションが行われます。反対に優先度を設定していない場合は、初回アクセス時にポピュレーションが行われます。

優先度の設定

図9:優先度の設定

優先度を設定するには、2.のALTER文にPRIORITY句を追加します。NONE以外の優先度に設定しておけば、あとはバックグラウンド・プロセスが自動的にポピュレーションを実行してくれます。

ALTER文


6種類から選択できる圧縮レベル


Oracle Database In-Memoryを使用する際には、サーバに搭載されているメモリの容量が重要になります。もちろん多ければ多いほど良いのですが、最近相次いでリリースされているようなテラバイト級の大容量メモリ(ビッグ・メモリ)を搭載したサーバが必須かというと、そうではありません。

先ほど紹介したとおり、Oracle Database In-Memoryでは必要なデータだけを選んでメモリ上に配置できます。一般的なインメモリ・データベースのように、すべてのデータをメモリ上に配置する仕組みではないので、まずこの時点でメモリの使用量を抑えられます。さらに、メモリ上のデータは自動的に圧縮されるため、実際に必要なメモリ量は想像よりもずっと少なくなるのです。

Oracle Database In-Memoryでは6種類の圧縮レベルをサポートしており、それぞれ「DML向け」「クエリ向け」など用途別に特化した動作になっています。例えばFOR QUERYであればクエリの性能が優れており、FOR CAPACITYであれば圧縮率が優れています。これらを使い分けることで、必要なデータだけを適切なサイズでメモリ上に配置することができます。

6種類の圧縮レベル

図10:6種類の圧縮レベル

圧縮レベルを設定するには、ALTER文にMEMCOMPRESS句を追加します。何も指定しなかった場合はFOR QUERY LOWが選択され、クエリ向けに最適化された圧縮モードになります。圧縮モードは重要度と並ぶ大事な設定のひとつなので、用途に応じた設定を意識するようにしましょう。

ALTER文


今回はOracle Database In-Memoryの仕組みを中心にご紹介しました。これまでのOracle Databaseにインメモリ・カラムストアを追加するというシンプルな仕組みでありながら、アプリケーションやSQLを変更することなく処理を高速化でき、さらに圧縮によって限られたメモリの領域を効果的に使える機能になっています。これまでにない強力な機能なので、その仕組みや効果について理解を深め、自社のシステムに適合するかどうか検討していただければと思います。

次回はOracle Database In-Memoryの検索性能について詳しくご紹介します。


関 俊洋(Toshihiro Seki)

アシスト:関 俊洋

株式会社アシスト データベース技術本部

2006年、株式会社アシスト入社。データベース・システムの構築や運用トラブルの解決といったフィールド・サポート業務を経験し、その後は新製品の検証やハードウェアとデータベースを組み合わせたソリューション(DODAI)の立ち上げに従事。現在はデータベースの価値や魅力を伝えるための執筆・講演活動を行っている。『SQL逆引き大全363の極意』共著。

関の紹介記事はこちら

「既存の概念を覆す!Oracle Database In-Memoryのテクノロジー」
連載記事一覧はこちら

関連製品/サービス


Facebookで情報をお届けしています

Facebookでは、アシストの「今」を週3回のペースでお届けしています。「めげない、逃げない、あまり儲けない」を合言葉に日々頑張っておりますので、応援よろしくお願いします。



ページの先頭へ戻る