PR





＞＞前編

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

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

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

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

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

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

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

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