検索
Special

既存アプリの改修なしでOLTPとリアルタイムアナリティクスを高速化する「Oracle Database In-Memory」データベースクラウドに求められる3つの要件(3)(2/4 ページ)

Oracle Database上に集約した統合データベース基盤上では、OLTPやデータ分析など、さまざまな処理が行われることになる。それらの処理をさらに高速化し、データのリアルタイム活用を推し進めたいという企業に向け、オラクルは「Oracle Database In-Memory」を提供している。[プライベートクラウド/データベース統合][高可用性/災害対策][Oracle Database 12c]

PC用表示
Share
Tweet
LINE
Hatena
PR

メモリ使用量の削減と高速化を実現する「ディクショナリ圧縮」

 Oracle Database In-Memoryが使う領域はSGA(System Global Area)内にあり、割り当てるメモリ容量は「INMEMORY_SIZE」で指定する。SGAは、カラム型のデータが入るIMCU(In-Memory Column Unit)プールと、メタデータやトランザクション情報を格納するSMUプールで構成される。

 IMCUとは、カラム型オブジェクトの管理単位であり、おおよそ50万行ごとに1ユニットが割り当てられる。また、IMCU内にはCU(Column Unit)があり、ここにROWIDを含む列単位の値が格納される。

 カラム型の表は、各行に含まれる全ての列を読み取る必要がある行型とは異なり、必要な列だけにアクセスする。これが分析用クエリを高速に処理できる理由の1つだが、Oracle Database In-Memoryでは、高速化のためにさらに独自の機構を組み込んでいる。その1つが「ディクショナリ圧縮」だ。ディクショナリ圧縮では、列の値をそのまま持つのではなく、それぞれの値に割り当てたID(ディクショナリ値)を保持する。このIDは当然、実際の値よりもサイズが小さく、そのまま検索することが可能なため、高速にアクセスできるわけだ。

SIMD命令セットに対応したことで、さらなる高速化を実現

 CUごとの最小値と最大値を自動的に記録する「インメモリストレージ索引」も、高速化に寄与する機能だ。Oracle Database In-Memoryでは、特定条件での表のスキャン時にインメモリストレージ索引を使い、条件に合致しないCUを読み飛ばすことで検索処理の高速化を図っている。

 ハードウェアの性能を最大限に生かすために、最新世代のプロセッサーで採用されているSIMD命令セット(SIMD)をサポートしていることもポイントである。SPARCプロセッサーではVIS(Visual Instruction Set)、インテルCPUではAVX(Advanced Vector eXtentions)と呼ばれるSIMDは、1回の命令セットで複数のデータを処理することができる。例えば、レジスターに記録された4組の値を評価する場合、通常はまず1組目を評価し、その結果をレジスターにセットするという処理を4回繰り返す。これに対して、SIMDを使えば4組の値をまとめて評価することが可能であるため、通常の命令セットよりも高速に処理できるのだ。

 また、このSIMDによる処理はディクショナリ圧縮と相性が良いという利点を持つ。ディクショナリ圧縮を行うことで、各カラムの値は固定長のビットデータとして表現することが可能となり、より多くのデータをレジスター(SIMDの場合はベクターレジスタ)に配置して処理することができるからだ。

デュアルフォーマットでも読み取り一貫性を保持

 ロー型とカラム型の両フォーマットを同時に使うことから、データの一貫性確保に不安を抱く方がおられるかもしれない。もちろん、Oracle Database In-Memoryには、それを保つための仕組みも組み込まれている。

 まずデータの更新については、バッファキャッシュをベースに処理が行われる。例えば、UPDATE文で更新が行われたとき、その内容をバッファキャッシュに反映するのとほぼ同時に、インメモリ領域にあるSMUのトランザクションジャーナルに記録する。また、トランザクションがコミットされたタイミングで、更新行と同じROWIDを持つ各カラムの行を無効行(Invalid)としてマークする。これにより、どの行が更新されたのかが分かるようにしているわけだ。

 そして、カラム型からデータを読み取る際には、Invalidマークのある無効行のデータは使わず、バッファキャッシュあるいはトランザクションジャーナルからデータを読み取る。そのデータと、カラム型の有効な行から読み取ったデータを結合することで、更新されたデータを反映した結果を返すことができる。これが、2つのフォーマットを使いつつ、読み取り一貫性を保証するための仕組みだ。

 ただし、Invalidマークの付いた行が増えると、カラム型からデータを読み取る際のオーバーヘッドが大きくなり、処理速度に悪影響が及びかねない。そこで、Oracle Database In-Memoryでは約2分間隔で更新されたデータをインメモリ領域に反映するリフレッシュ処理を行っている他、Invalidな行が大幅に増える処理が行われた場合は、その直後にリフレッシュする機構が備わっている。

Copyright © ITmedia, Inc. All Rights Reserved.


提供:日本オラクル株式会社
アイティメディア営業企画/制作:@IT 編集部/掲載内容有効期限:2016年3月15日

関連情報

驚異的なパフォーマンス、優れた運用効率、最高の可用性とセキュリティ、クラウド対応を実現するOracle Exadataとの統合、クラウド、可用性や運用管理など、次世代データベース基盤構築のために参考になる必見資料をまとめてご紹介いたします。

ページトップに戻る