>>前編

ハッシュ利用で比較を減らす

 後編ではまず,オプティマイザが選択する最短経路を紹介する。

 複数のテーブルを共通のキーを用いて結合する「ジョイン」はいくつかの方式がある。その一つであるハッシュ・ジョインは,ハッシュ関数を使って,一つのテーブルのキーからハッシュ値を計算する(図4)。さらに,ハッシュ値と該当するデータで構成する「ハッシュ・テーブル」を作成する。同様に二つ目のテーブルからハッシュ値を計算し,その値を基に検索するハッシュ・テーブルのレコードを特定する。ハッシュ値を計算するだけで比較対象のデータが絞り込めるので,ほかのジョイン方式よりも高速になる場合がある。ただし,「各テーブルを展開できるだけのメモリー容量が必要になる。メモリーが足りないと逆に遅くなる」(伊藤忠テクノソリューションズ プラットフォーム技術部 部長代行 宮田武氏)といった注意点がある。

図4●ハッシュ・ジョインの仕組み
図4●ハッシュ・ジョインの仕組み
ハッシュ値を利用してテーブルを結合する。ネステッド・ループ・ジョインに比べて,比較回数が少なく済むことが多い。また,ソート・マージ・ジョインと比べて,コストのかかるソートが不要。それだけ処理が速くなる
[画像のクリックで拡大表示]

 DBのオプティマイザは,実行計画を立てるための材料として,統計情報と呼ぶ情報を取得している(図5)。統計情報に含まれるのは,テーブルのレコード数やカラムの数,B-Treeインデックスの階層度合いなどだ。インサイトテクノロジーの岸本拓也氏(テクノロジーコンサルティング本部)によれば,「これまで,ブロックへのアクセス数を参考に実行計画を立てていたが,アクセスにかかる時間も考慮するようになった」という。統計情報で収集する情報や,その使い方はより高度になっている。

図5●統計情報を参照した実行計画立案の例
図5●統計情報を参照した実行計画立案の例
表や列,インデックスなどの情報を基に,最短でアクセスできる実行計画をはじき出す
[画像のクリックで拡大表示]

不足を検知しメモリーを再配分

 ここからは,「アクセスのスピードを上げる」技術を解説していく。

 その代表例が,自動メモリー・チューニング機能だ。この機能は,メモリー上に存在する,SQL文と実行計画を格納する領域「共有プール」と,一度検索したデータそのものを格納する領域「データベース・バッファ・キャッシュ」の間で,メモリーを再配分する(図6)。二つの領域にデータがうまくキャッシュされていれば,アクセス・スピードは上がる。しかし一方のメモリー領域には余裕があり,もう一方が枯渇してディスク・アクセスが発生する場合がある。そこでDBはキャッシュのヒット率を見て,この二つの領域間でメモリーの割り当てを調整する。

図6●自動メモリー・チューニング機能の仕組み
図6●自動メモリー・チューニング機能の仕組み
データベース・バッファ・キャッシュや共有プールのヒット率を動的パフォーマンス表でリアルタイムに管理。どちらか一方のヒット率が著しく低下した場合は,処理速度の向上を狙ってメモリーを再配分する
[画像のクリックで拡大表示]

 最近では,インメモリーDBの導入事例が増えている(図7)。これは,(1)高速なメモリーのみを使う,(2)インメモリーDBに最適化されたT-Treeインデックスを利用,(3)バッファ管理の処理が不要,といった特徴を備える。

図7●インメモリーDBとディスク型DBの違い
図7●インメモリーDBとディスク型DBの違い
インメモリーDBは,ディスク・アクセスやバッファ管理が不要,データがメモリー上にあることを前提とした「T-Treeインデックス」を採用,といった優位性がある
[画像のクリックで拡大表示]