既存アプリの改修なしでOLTPとリアルタイムアナリティクスを高速化する「Oracle Database In-Memory」:データベースクラウドに求められる3つの要件(3)(2/4 ページ)
Oracle Database上に集約した統合データベース基盤上では、OLTPやデータ分析など、さまざまな処理が行われることになる。それらの処理をさらに高速化し、データのリアルタイム活用を推し進めたいという企業に向け、オラクルは「Oracle Database In-Memory」を提供している。[プライベートクラウド/データベース統合][高可用性/災害対策][Oracle Database 12c]
メモリ使用量の削減と高速化を実現する「ディクショナリ圧縮」
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.
関連記事
- Oracle Database In-Memoryは従来のインメモリDBと何が違う? 徹底解剖した
リアルタイム経営強化に向け、データ活用のさらなるスピードアップを求める企業に決定打となるソリューションが登場した。日本オラクルが2014年7月にリリースした「Oracle Database In-Memory」だ。その特徴を、製品のベータテストに参加したNTTドコモの声も交えて紹介する。[パフォーマンス改善][ビッグデータ][Big Data] - ジャパンネット銀行の情報系システム リアルタイム化の裏側
ジャパンネット銀行は、Oracle Database 12cの新機能である「Oracle Database In-Memory」と富士通のUNIXサーバー「SPARC M10」の組み合わせが発揮する並外れた性能を評価し、次期データウエアハウス基盤に採用したという。その速さの秘密を富士通のスペシャリストに聞いた。[パフォーマンス改善][Oracle Database 12c][Engineered System] - Oracle Database In-Memoryでデータベースの常識が変わる! OASC認定施設で実機検証を支援
Oracle Databaseを桁違いに高速化する「Oracle Database In-Memory」には、オラクルのパートナー企業各社も熱い期待を寄せている。製品検証により、その圧倒的な性能を実感した1社として、伊藤忠テクノソリューションズのスペシャリストの声をお届けする。[プライベートクラウド/データベース統合][パフォーマンス改善][Oracle Database 12c][Engineered System] - DWH環境に即効果! 綿密な検証で得た知見とノウハウでOracle Database In-Memoryの導入を強力サポート
国内ベンダー第1号のOEMパートナーとして、オラクル製品に関する豊富な実績と知見/ノウハウを誇るNEC。「Oracle Database In-Memory」に関しても綿密な製品検証を重ねてきた同社は、このインメモリデータベース製品をどう評価しているのか。同社スペシャリストに聞いた。[プライベートクラウド/データベース統合][パフォーマンス改善][Oracle Database 12c][Engineered System] - 「オールフラッシュ、インメモリなど、Oracle Exadata X5の新機能は本当に使えるのか、どう使うのか?」──全ての疑問に答える
日本オラクルが2015年1月にリリースした「Oracle Exadata X5」では、オールフラッシュストレージをはじめ、さらなる機能強化が図られた。そこで企業が気になるのは、「それらの機能は本当に使えるのか、どう使うのか」ということだろう。そんな疑問に率直に答えるQ&Aセッションが実施された。[クラウド][高可用性/災害対策][運用管理効率化][Oracle Exadata][Oracle Database 12c][In-Memory Option]
提供:日本オラクル株式会社
アイティメディア営業企画/制作:@IT 編集部/掲載内容有効期限:2016年3月15日