スケーラブルデータベースサーバ HiRDB Version 8 UAP開発ガイド
SQL拡張最適化オプションで「ハッシュジョイン,副問合せのハッシュ実行」を適用する場合に,設定しておく項目について説明します。
ハッシュジョイン,副問合せのハッシュ実行を適用する場合,次の項目を設定しておく必要があります。
システム定義のpd_hash_table_sizeオペランド,又はクライアント環境定義のPDHASHTBLSIZEでハッシュ表サイズを設定します。ハッシュ表サイズは,ハッシュ表最大行長を算出後,次の計算式で求めた値以上を設定してください。
ハッシュ表サイズ(単位:キロバイト) ≧↑(ハッシュ表最大行長(単位:バイト)×2+32)÷128↑×128 |
一括ハッシュジョインのハッシュ表サイズ(単位:キロバイト) =↑(ハッシュ表データページ数+ハッシュ表管理テーブルページ数) ÷1セグメントページ数↑×128 |
ハッシュ表データページ数 =↑ハッシュ表行数÷MIN{↓(ハッシュ表ページ長−48)÷ハッシュ表行長↓,255}↑ +63 |
ハッシュ表管理テーブルページ数 =↑(16×ハッシュ表行数 +(↑(ハッシュ表データページ数×ハッシュ表ページ長+16×ハッシュ表行数) ÷(1セグメントページ数×ハッシュ表ページ長)↑×8)+8) ÷ハッシュ表ページ長↑ |
1セグメントページ数 =↓(128×1024)÷ハッシュ表ページ長↓ |
ハッシュ表ページ長は,次の表のハッシュ表行長から求めてください。
ハッシュ表行長 | ハッシュ表ページ長 |
---|---|
0〜1012 | 4096 |
1013〜2036 | 8192 |
2037〜4084 | 16384 |
4085〜16360 | 32768 |
16361〜32720 | ↑(ハッシュ表行長+48)÷2048↑×2048 ハッシュ表行長: 一括ハッシュジョインの対象がジョインの場合は,ジョインの内表の件数です。対象が副問合せの場合は,探索条件中の外への参照列を含む述語を除いた副問合せの検索件数です。 |
作業表用バッファの確保方式を,サーバプロセス単位でバッファ一括確保(pool)に設定しておく必要があるため,システム定義のpd_work_buff_modeオペランドにpoolを指定します。
ハッシュ表は,作業表用バッファ内に確保されます。指定したハッシュ表サイズより作業表用バッファサイズ,又は作業表用バッファの増分確保の上限サイズが小さいと,作業表用バッファ不足でエラーとなります。したがって,システム定義のpd_work_buff_sizeオペランド又はpd_work_buff_expand_limitオペランドには,次の計算式で求めた値以上を設定してください。
作業表用バッファサイズ(単位:キロバイト) ≧(ハッシュ表サイズ(単位:キロバイト)×2+256) ×SELECT文のハッシュジョイン最大数+128
SELECT文でのハッシュジョイン数 =((=で結合している表数)−(=で結合している問合せ指定数)) +(=ANYの限定述語の数) +(=SOMEの限定述語の数) +(IN(副問合せ)の指定数) +(そのほかの副問合せで,探索条件中に=で 外への参照列を指定している副問合せ数)
(例) SELECT A.A1,B.B2,C.C3 FROM A,B,C ......................3-1 WHERE A.A1=B.B1 AND A.A2=B.B2 AND B.B3=C.C3 AND A.A1=C.C1 AND A.A4=ANY(SELECT D.D4 FROM D) ..................1 AND A.A5=SOME(SELECT E.E5 FROM E) .................1 AND A.A6 IN(SELECT F.F6 FROM F WHERE F.F1=A.A1) ...1 AND EXISTS(SELECT G.G1 FROM G WHERE G.G1=B.B1) ...1 この例の場合,(3-1)+1+1+1+1となるので,このSELECT文のハッシュジョイン数は6になります。
作業表用バッファサイズ(単位:キロバイト) ≧ハッシュ表サイズ(単位:キロバイト) ×SELECT文のハッシュジョイン最大数+384
ハッシュジョイン,副問合せを伴った検索は,ハッシングによって処理をします。
ハッシング方式は,システム定義のpd_hashjoin_hashing_modeオペランド,又はクライアント環境定義のPDHJHASHINGMODEで選択できます。デフォルトはTYPE1となります。
TYPE1は,バージョン07-02より前のHiRDBのハッシング方式です。バージョン07-02以降のHiRDBで最初にハッシュジョインを使用する場合は,TYPE2を指定してください。
バージョン07-02以降のHiRDBでTYPE1を指定すると,十分な性能が得られないことがあります。この場合,ハッシング方式をTYPE2に指定するか,又は「(3)ハッシング方式のチューニング方法」を参照してチューニングしてください。
ハッシュ表サイズは,次のどちらかのチューニング情報を基にチューニングできます。
UAP統計レポートについては「11.1.4 UAP統計レポート機能」を,統計解析ユティリティについてはマニュアル「HiRDB Version 8 コマンドリファレンス」を参照してください。
ハッシュ表サイズのチューニング情報を取得すると,次のことが分かります。
なお,バケットの再分割とは,バケットの大きさがハッシュ表サイズを超える場合に,最大3レベルまでバケット分割を再帰的に繰り返すことをいいます。例を次に示します。
1回のバケット分割での分割数は,次の計算式から決まります。
バケット分割数 =MIN{↓(ハッシュ表サイズ÷2)÷ハッシュ表ページ長↓,64}
また,一括ハッシュジョインの場合でも,ジョインの内表については1レベルバケット分割をします。
ハッシュ表サイズのチューニング方法を次の表に示します。
表4-16 ハッシュ表サイズのチューニング方法
チューニング情報 (単位:キロバイト) |
チューニング方法 |
---|---|
最大一括ハッシュ表サイズ | ハッシュ表サイズにこの値以上が設定されていれば,すべてバケット分割をしない一括ハッシュジョインになります。※1また,この値が,ハッシュ表サイズに指定できる上限を超えている場合は,一括ハッシュジョインにはできません。 この値が0の場合は,ハッシュジョイン,副問合せのハッシュ実行がされていません。 |
1レベル最大バケットサイズ | ハッシュ表サイズにこの値以上が設定されていれば,バケット分割が1レベルで完了しています。また,バケット分割が2レベル以上の場合は,ハッシュ表サイズにこの値を指定することで,バケット分割が1レベルで完了するようになります。※2 すべてバケット分割をしない一括ハッシュジョインの場合は,この値には0が表示されます。 |
2レベル最大バケットサイズ | ハッシュ表サイズにこの値以上が設定されていれば,バケット分割が2レベルで完了しています。また,バケット分割が3レベル以上の場合は,ハッシュ表サイズにこの値を指定することで,バケット分割が2レベルで完了するようになります。※2 2レベルバケット分割が一度もされなかった場合は,この値には0が表示されます。 |
3レベル最大バケットサイズ | ハッシュ表サイズにこの値以上が設定されていれば,バケット分割が3レベルで完了しています。 ハッシュ表サイズがこの値より小さい場合,1バケットを部分的にハッシュ表展開していく処理となり,処理効率が悪くなります。この場合,ハッシュ表サイズにこの値以上を設定するようにしてください。※2 また,ハッシュジョイン,副問合せのハッシュ実行を適用しないようにした方が,性能が良くなる場合もあります。 2レベルバケット分割が一度もされなかった場合は,この値には0が表示されます。 |
ハッシュ表サイズは,次のどちらかのチューニング情報を基にチューニングできます。
UAP統計レポートについては「11.1.4 UAP統計レポート機能」を,統計解析ユティリティについてはマニュアル「HiRDB Version 8 コマンドリファレンス」を参照してください。
ハッシュ表サイズのチューニング情報を取得すると,次のことが分かります。
ハッシング方式のチューニング情報を次の表に示します。
表4-17 ハッシング方式のチューニング情報
チューニング情報 (単位:回数) |
説明 |
---|---|
最大比較回数 | ハッシュ探索時の最大比較回数です。 |
総比較回数 | ハッシュ探索時の総比較回数です。 |
探索回数 | ハッシュ表探索回数です。 |
平均比較回数 | 総比較回数÷探索回数で求まります。 |
All Rights Reserved. Copyright (C) 2006, 2016, Hitachi, Ltd.