In-Memoryで全件検索と一意検索を実行し、従来のアクセス方法と比べて数十倍の性能になっていることを確認しました。今回は結合処理などもう少し踏み込んだパターンについて、動作のポイントを紹介します。前回は全件検索と一意検索を試しながら、インメモリ・カラムストアの中にストレージ索引という独自の仕組みがあることを紹介しました。今回はより現実的な性能を計測するために、多数の表を結合する分析系のクエリを実行していきます。Benchmarkです。BenchmarkはDWHの代表的なデータ・モデルであるスター・スキーマを採用しており、ファクト表であるLINEORDER表を中心に、放射状にディメンション表が配置されています。LINEORDER表には商品の購入履歴(明細データ)が約6億件格納されており、ディメンション表にはマスター・データ(分析軸)となる顧客IDや商品IDなどの情報が少ない件数で格納されています。LINEORDER表の列は大半がNUMBER型で、顧客名や商品名といった文字列ではなくIDのみが記録されています。何度も出てくる情報を文字列からID(番号)にすることで表のサイズを抑えられますが、分析処理においてはファクト表とディメンション表の結合が必要になります。Benchmarkのデータ・モデル結合のイメージを具体的なSQLで見てみましょう。Benchmarkにあらかじめ用意されているもので、1993年の売上高を特定の条件をもとに集計しています。返される結果は1件だけですが、6億件あるLINEORDER表の広範囲にアクセスし、さらにDATE1表との結合も行われるため、それなりに負荷の高いSQLであると言えます。Databaseが苦手とする処理です。In-Memoryを使うことで高速化できるはずです。Databaseと比較してみましょう。今回は以下のパターンで結果を取得しました。In-Memoryが桁違いの速さになっています。In-Memoryでは0.6秒まで短くなっています。「少数の列+多数の行」を扱う処理が苦手なロー型と、得意なカラム型の差が顕著に現れた結果と言えます。In-Memoryの速さにはもうひとつのポイントがあります。先ほど実行したSQLの実行計画を確認すると、何やら見慣れないオペレーションが行われていることが分かります。FILTER」や「BF0000」とは一体何なのでしょうか?※実行計画が見やすいよう、パラレル処理ではなくシリアル処理の結果を掲載しています。In-Memoryが初めてではありません。2から実装されていた処理で、結合の前に対象となるレコードを絞り込むという働きをします。Databaseの機能名ではありません。In-Memoryではカラム型の特性を活かして結合するレコードを絞り込むことができます。以下のようにカラム検索を使用して結合する列にフィルタを作成し、条件に合うものだけを抽出することで結合処理が高速になります。先ほどの実行計画を確認してみましょう。ここではDATE1表とLINEORDER表のハッシュ結合を行っていますが、サイズの小さいDATE1表のスキャン(1)においてブルーム・フィルタが作成されており、それをサイズの大きいLINEORDER表のスキャン(2)で使用しています。3を見ると、WHERE句で指定したものに加えて「SYS_OP_BLOOM_FILTER(:BF0000,"LO_ORDERDATE"))」という条件でも絞り込みが行われているのが分かります。WHERE句で絞り込んだレコードのうち、対象になるものだけをフィルタリングしてから結合しているのです。In-Memoryの結合処理では従来と比べて数倍速い時間で結果を返すことができます。In-Memoryでブルーム・フィルタを有効にした場合と無効にした場合で結果を比較してみます。12cではブルーム・フィルタがデフォルトで有効になっているため、今回の検証では隠しパラメータを変更して無効化しています。SELECT文はこれまでと同じものを使用します。ブルーム・フィルタの有無による性能差パラレル度を変えながら複数パターンで試してみましたが、どのパターンでもおよそ2~3倍程度性能が向上することが分かりました。In-Memoryでは特別な設定を必要とせず自動的にブルーム・フィルタが使用されるため、こうした検証でもしない限り効果を計ることはできませんが、数字を見ると性能向上に大きく貢献していることが分かります。SQLトレースを見ると、ブルーム・フィルタがない場合は78552553行を処理しているのに対し、ブルーム・フィルタがある場合はおよそ1/6となる11915774行だけで済んでいます。この違いが2~3倍という性能向上に繋がっているのです。In-Memoryは単純にインメモリだから速いというだけではなく、こうした工夫もしっかりと考えられているのが面白いところです。性能評価や試使用を行う際には、こうした実行計画の違いに目を向けてみてはいかがでしょうか。俊洋ビジネスインフラ技術本部2006年入社。データベース・システムの構築や運用トラブルの解決といった業務を経験し、その後新製品の検証やソリューションの立ち上げを経てエバンジェリストへ。2016年にクラウド事業を立ち上げ、現在はクラウドとデータベースの二足の草鞋を履いている。最後までご覧いただきありがとうございました。本記事でご紹介した製品・サービスに関するコンテンツをご用意しています。この記事の他にも、IT技術情報に関する執筆記事を多数公開しておりますのでぜひご覧ください。2019の様子を紹介します。SQLを拡張したプログラミング言語であるPL/SQLを理解し、活用していくための実践講座です。Databaseで発生するトラブルを「どんな方法で」「どのように」解決していくか。データベースの運用管理において、より円滑に業務を進めるために必要なノウハウを紹介していきます。