サイト内の現在位置を表示しています。

Oracle Database 23ai In-Memoryの新機能「インメモリ・ディープ・ベクトル化 の機能拡張」の機能・性能検証レポート

このレポートでは、Oracle Database 23ai In-Memoryの新機能「インメモリ・ディープ・ベクトル化の機能拡張」について、前半では技術背景と機能概要を説明し、後半ではNECで実施した機能/性能検証の結果を報告します。

目次

1.技術背景

目まぐるしく変化する時代の変革とともに毎日膨大なデータがあらゆるところで蓄積されています。それらは常に増加・変化を繰り返しており、希少価値のあるビジネスチャンスを逃さないためにも取得した最新データを素早く分析し活用する必要があります。Oracle Database In-Memoryは膨大なデータを高速に集計・処理・分析が可能になるオプションです。Oracle Database In-Memoryを活用し超高速なバッチ処理・集計レポート作成やリアルタイム分析を行うことで、新たなビジネスチャンスをとらえることが可能となります。

2.機能概要

Oracle Database In-Memoryは、既存のアプリケーションやデータに変更を加えず、Oracle Database上で超高速な集計・分析処理を可能とするオプションです。Oracle Database In-Memoryによる高速化処理を支える機能を紹介します。

データをメモリ上に格納することで処理時間を短縮

Oracle Database In-Memoryオプションは、従来の行(ロー)型フォーマットから、新たに列(カラム)型フォーマットを用いることで、効率的かつ高速にデータを処理できます。メモリ上(SGA領域内)にバッファ・キャッシュとは別にIn-Memory用のエリア(インメモリ・カラムストア)を確保し、バッファ・キャッシュ上にあるロー型フォーマットデータからカラム型にデータを抽出してインメモリ・カラムストアに格納します。その結果、ロー型・カラム型フォーマットを両立させることができ、OLTP系処理は行型フォーマットを使用し、集計・分析用途としてカラム型フォーマットを用いることにより、高速なリアルタイム分析が可能となりました。また、ストレージからインメモリ・カラムストアへデータが一定間隔で更新されるため、タイムラグなしでデータを連携することができ、リアルタイム分析が可能となります。

分析専用のデータベースが不要

Oracle Database In-Memoryオプションを利用すると、1つのデータベースでOLTP処理と分析処理が可能になります。例えば、集計データの分析の場合にはカラム型フォーマット、OLTP処理に基づくリアルタイム分析の場合にはロー型フォーマットといった仕方で、データベース側で自動的に最適なフォーマットを判断して実行することができます。それぞれの用途に合わせたデータベースを用意する必要がないため、データ連携の運用が不要となりますし、運用面のコスト削減にもつながります。また、既存のデータベースの機能をそのまま用いるだけなので、SQLを含む処理スクリプトを改修する必要はなく、データベースを再設計するコストもかかりません。必要なタイミングで用途に応じたデータを即座に利用することが可能となります。

CPUの機能を用いて演算処理を高速化

Oracle Database In-Memoryオプションは、SIMDSingle Instruction Multiple Data)処理により、ハード・ソフトウェア両面の機能を最大限活用することで、より高速な処理を行うことができます。SIMD処理とは、単一の命令で複数のデータをCPUで並列処理することができる機能です。複数のデータをベクターレジスタ(ベクトルレジスタとも言います)に格納し、同じ処理を一度に行うことで効率よく処理することができます。
ある工場の流れ作業をイメージしてみてください。部品Aと部品Bを結合する工程があるとします。ベルトコンベアが1列しかない場合、部品結合を1回ずつしか行えません。100万個の部品がある場合は100万回繰り返す必要があります。しかしベルトコンベアの数を増やすならば、一度に流せる部品の数を増やすことができるので、より効率的に部品を結合できるようになります。ベルトコンベアの数を4列に増やせば、100万個の部品の結合は25万回で済みます。

例)2つの入力値の合算処理

Oracle Database In-Memoryオプションは、ハードウェアの特性を生かすことで、リアルタイム分析に必要なデータを高速に処理できるようにしています。

これらの技術を用いて、Oracle Database In-Memoryは、Oracleのバージョンアップに伴って機能拡張されています。

12c デュアルフォーマット 同一のDBシステム内で列型フォーマットと同時に行型フォーマットを運用可能。
インメモリ空間でのオブジェクト圧縮 オブジェクトをインメモリ列ストアに圧縮して格納、かつ圧縮したまま処理が可能。
SIMDベクター処理 CPU(プロセッサ)の機能を生かして、複数のデータ処理を1回の演算命令で実行することにより処理を高速化。
18c 自動インメモリ データの使用状況を監視し、ユーザーが操作しなくても必要に応じてインメモリ・カラムストアのデータの追加や削除を自動的に実施する。
21c インメモリハイブリッドスキャン 1つの表に対するスキャンをインメモリ列ストアと通常の行型ストアの両方にアクセスして処理可能。表全てが列ストアに格納出来ない場合でも対応可能。
自動インメモリの拡張 使用頻度が少ない列に対して圧縮制御を行う。
インメモリ・ディープ・ベクトル化 SIMDベクター処理を使用してインメモリ上の結合を高速化することが可能。ただし結合条件は1つまで(2つ以上には適用不可)。

表 In-Memoryの主な機能拡張

<23ai新機能>インメモリ・ディープ・ベクトル化の機能拡張

従来のSIMDベクター処理では、インメモリ・カラムストアから条件に合ったカラムデータを検索してブルーム・フィルタ(ジョイン・フィルタ)を作成することで対象行を削減し、高速な検索を実現させていました。21cではインメモリ・ディープ・ベクトル化フレームワークを使用したインメモリ・ベクター結合が新機能として実装されました。この機能により、これまでSIMDベクター処理で行っていたスキャンとブルーム・フィルタ以外に、結合処理が行えるようになりました。また、この機能の実装により、結合の対象となる行が多い場合でも、高速処理が可能となりました。
※インメモリ・ベクター結合は初期化パラメータ「INMEMORY_DEEP_VECTORIZATION」を無効(FALSE)に設定することが可能です(デフォルトは有効(TRUE))。

例:特定の都道府県の売上情報

図 21cの新機能「インメモリ・ベクター結合」の仕組み

この図では、インメモリ・ベクター結合を用いて売上情報を出力しています。「拠点」表の都道府県NOを限定した上で、支店NOを条件として「購入情報」表と結合させています。インメモリ・ベクター結合では、SIMDベクター処理を用いて表スキャンと結合処理を行うことが可能になったことで、高速に処理が行えるようになりました。ただし「単⼀レベル結合、内部結合」といった結合の場合のみ、インメモリ・ベクター結合による高速処理が可能となっていました。

23aiではインメモリ・ディープ・ベクトル化フレームワークが機能拡張され、以下の機能が追加・サポートされました。これにより、複雑な結合や集計が高速化され、リアルタイム分析処理がより高速に行えるようになりました。

マルチレベル結合 複数の表(3表以上)を用いた結合
Group By集計 列または集計をグループ化する単純な式など
マルチ結合キー 複数の結合キーを用いた結合
セミ結合・外部結合 INやEXISTSJOIN句を用いた結合

23ai新機能「インメモリ・ディープ・ベクトル化の機能拡張」

例:40歳未満の購入者における各支店の売上情報

図 23aiの新機能「インメモリ・ベクター結合の機能拡張」の仕組み

この図では、23aiで機能拡張したインメモリ・ベクター結合を用いて、購入者の年齢を限定した支店ごとの売上情報を出力しています。「購入者」表と「拠点」表の結合条件としている列を用いてブルーム・フィルタを作成し、「購入情報」表と「拠点」表をスキャン&結合し、さらに「購入者」表とスキャン&結合しています。このように、23aiでは複数の表・条件でもインメモリ・ベクター結合を用いることができるようになりました。またグループ集計も実行できるようになったので、複雑な結合や集計をこれまで以上に高速に処理できるようになりました。なお、今回追加された機能も、アプリケーション(SQL)を変更することなく使用可能となっています。

3.機能及び性能検証

では、実際に23ai新機能「インメモリ・ディープ・ベクトル化の機能拡張」を見てみましょう。今回は「マルチ結合キー(複数の列による結合)」の機能及び性能検証を実施しました。例として、以下のSQLで2つの結合条件を設定して2つの表を結合しています。

【実行SQL

SELECT SUM(lo_quantity) FROM lineorder l , date_table d
WHERE l.LO_ORDERKEY = d.D_DAYNUMINWEEK AND l.LO_LINENUMBER = d.D_DAYNUMINMONTH ;

図 実行SQLのインメモリ・ベクター結合処理の流れ

この図は、実行SQLがインメモリ・ベクター結合を用いてどのように処理されていくかを示しています。「date_table」表から2つの列「DAYNUMINWEEK」と「D_DAYNUMINMONTH」からブルーム・フィルタを作成し、「lineorder」表を用いてインメモリ・ベクター結合を実行して表と結合を実施、「lo_quantity」の合計値を出力しています。

SQLモニター

<21c>

<23ai>

SQL監視をXMLで出力して21c23aiの実行結果を確認しました。

<stat id="11">1</stat>

23aiではこのように出力されました。XMLではid="11"がインメモリ・ベクター結合の項目になっており、結果が「1」と表示されている場合はインメモリ・ベクター結合が行われていることになります。21cではインメモリ・ベクター結合が実行されませんでしたが、23aiではインメモリ・ベクター結合が実行されたことが分かります。

実行計画

<21c>

<23ai>

実行計画を確認すると、21cではインメモリ・ベクター結合が実行されなかったので処理行数が271件でした。23aiではインメモリ・ベクター結合が実行されたことで処理行数が1件となり、超高速に処理されたことが分かります。

 ※項目
  E-Rows:1回の操作で処理される見積り行数
  A-Rows:その操作で処理されたすべての行数

処理時間

以下のグラフは21cの処理時間を1とした場合の23aiの処理時間比です。23aiではインメモリ・ベクター結合が実行されたことで、処理時間が大幅に減少した結果となり、23aiでは超高速に処理されたことが分かります。

図 インメモリ・ディープ・ベクトル化の機能拡張における21c23aiの処理時間比

4.In-Memoryの導入方法

Oracle Database In-Memoryは既存のアプリケーションを改修することなく、少ステップで実装可能です。

実装方法

(1)インメモリ・カラムストア領域を設定

ALTER SYSTEM文を実行して、インメモリサイズを設定します。最小値は100Mです。設定後、データベースの再起動が必要です。

ALTER SYSTEM SET INMEMORY_SIZE=***[K | M | G] SCOPE=SPFILE;

※インメモリ・カラムストア領域はシステム・グローバル(SGA)領域内に割り当てられるため、必要に応じてSGA領域の拡張を検討してください。SGA領域を上回るサイズを設定すると、データベースが起動しなくなりますのでご注意ください。

(2)対象表のインメモリ属性を変更

ALTER TABLE文を実行して、表のインメモリ属性を有効にします。例としてCUSTOMERS表を有効にします。

ALTER TABLE CUSTOMERS INMEMORY;

設定後、問い合わせ文を実行して、データをインメモリ・カラムストアへ載せます(ポピュレーション)。

SELECT COUNT(*) FROM CUSTOMERS;

なお、RU19.8以降からOracle Database In-Memoryオプションを購入しなくてもインメモリ機能を試すことができます。ただし以下の条件を満たす必要があります。

  • 初期化パラメータ「INMEMORY_FORCE=BASE_LEVEL」に設定する
  • INMEMORY_SIZEは16GB以内(インスタンス単位で設定)

  • 圧縮レベルはQUERY LOWのみ

その他にも設計・運用の観点でOracle Database In-Memory特有の検討事項がありますので、詳細に関しましてはNECへお問い合わせください。

5.まとめ

今回の検証では、23ai新機能の一部を検証しました。23aiではインメモリ・ディープ・ベクトル化を用いて結合できる表や列が増え、集計処理も高速に行えるようになりました。それによって、インメモリ・ディープ・ベクトル化を用いて処理できるSQLが増え、より高速にデータを処理できるようになりました。

Oracle Database In-Memoryは、膨大化したデータの分析処理において高い性能を発揮します。また、既存のデータベースの機能を拡張させるオプション製品であるため、現状のデータベースの設計構造を大きく改修する必要がありません。データベース側で自動的に最適なフォーマットを判断して実行するため、既存のアプリケーションの改修も不要です。

OLTP処理と分析処理どちらも可能なため、目的範囲を広げてデータベースを利用できます。導入も少ない手順で容易に行うことができます。データ分析や集計レポート作成やリアルタイム分析などの処理の高速化を検討されているお客様は、Oracle Database In-Memoryの導入をご検討ください。

関連情報