5.7.1 ハッシュグループ化とは
ハッシュグループ化とは,グループ化列の値をハッシングしてハッシュテーブルを作成しながらグループ化する処理方式のことです。ハッシュグループ化の処理方式を次の図に示します。
ハッシュグループ化には次の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に対するハッシュテーブルを作成しながらグループ化処理が行われます。そのあとに,作業表3についても同様の処理が行われます。
なお,作業表に対するハッシュテーブルが作成される際に,ハッシュテーブル領域不足が発生した場合,新たな作業表が作成されます。ハッシュテーブル領域に格納できなかったデータが,その作業表に格納されます。この場合,新たに作成された作業表を使用したグループ化処理が追加で発生します。
-