Hitachi

Hitachi Advanced Data Binder AP開発ガイド


5.7.1 ハッシュグループ化とは

ハッシュグループ化とは,グループ化列の値をハッシングしてハッシュテーブルを作成しながらグループ化する処理方式のことです。ハッシュグループ化の処理方式を次の図に示します。

図5‒15 ハッシュグループ化の処理方式

[図データ]

ハッシュグループ化には次の2種類があります。

〈この項の構成〉

(1) ローカルハッシュグループ化

最初にSQL処理リアルスレッドごとにハッシュテーブルを作成し,グループ化します。次に,各SQL処理リアルスレッドでグループ化した結果を集めて,全体をグループ化します。この処理方式をローカルハッシュグループ化といいます。

ハッシュテーブルは,SQL処理リアルスレッドごとにハッシュグループ化領域に作成されます。ハッシュテーブル1つ当たりのハッシュグループ化領域サイズは,サーバ定義またはクライアント定義のadb_sql_exe_hashgrp_area_sizeオペランドで指定します。

(2) グローバルハッシュグループ化

SQL処理リアルスレッド間で共有するハッシュテーブルを作成し,グループ化します。この処理方式をグローバルハッシュグループ化といいます。

ハッシュテーブルは,ハッシュテーブル領域に作成されます。ハッシュテーブル領域サイズは,サーバ定義またはクライアント定義のadb_sql_exe_hashtbl_area_sizeオペランドで指定します。なお,adb_sql_exe_hashtbl_area_sizeオペランドに0を指定した場合,グローバルハッシュグループ化は適用されません。

DISTINCT集合関数を含むSQL文を実行した場合に,検索結果の重複を排除するためにグローバルハッシュグループ化が適用されることがあります。

■ハッシュテーブル領域が不足した場合の対処方法

ハッシュテーブル領域が不足した場合,ハッシュテーブルに格納されるデータが複数の作業表に分割されて格納されます。そのため,SQL文の処理時間が長くなることがあります。ハッシュテーブル領域の不足を解消するには,サーバ定義またはクライアント定義のadb_sql_exe_hashtbl_area_sizeオペランドの指定値(ハッシュテーブル領域サイズの指定値)を大きくしてください。

ハッシュテーブル領域が不足して作業表が作成された場合,サーバメッセージログファイルにKFAA51130-Wメッセージが出力されます。

■ハッシュテーブル領域が不足した場合の処理の流れ

ハッシュテーブルの作成中に,ハッシュテーブル領域が不足した場合の処理の流れを説明します。

  1. ハッシュテーブルの作成中にハッシュテーブル領域が不足した場合,複数の作業表が作成されます。ハッシュテーブルに格納されるデータが,各作業表に分割されて格納されます。

    [図データ]

  2. 作業表1に対するハッシュテーブルを作成しながらグループ化処理が行われます。

    [図データ]

    上記のグループ化処理が完了したあとに,作業表2に対するハッシュテーブルを作成しながらグループ化処理が行われます。そのあとに,作業表3についても同様の処理が行われます。

    なお,作業表に対するハッシュテーブルが作成される際に,ハッシュテーブル領域不足が発生した場合,新たな作業表が作成されます。ハッシュテーブル領域に格納できなかったデータが,その作業表に格納されます。この場合,新たに作成された作業表を使用したグループ化処理が追加で発生します。

    [図データ]