Hitachi

Hitachi Advanced Data Binder システム構築・運用ガイド


7.2.2 性能に関するオペランド(set形式)

[7] adb_sys_rthd_num = 処理リアルスレッド数

〜〈整数〉((1〜4,096))《40》

処理リアルスレッド数を指定します。

処理リアルスレッドは,SQL文,および次に示す対象のコマンドを実行したときに,HADBサーバが使用するリアルスレッドのことです。

■対象のコマンド
  • adbimportコマンド

  • adbgetcstコマンド

  • adbidxrebuildコマンド

  • adbexportコマンド

  • adbmergechunkコマンド

  • adbarchivechunkコマンド

  • adbunarchivechunkコマンド

  • adbreorgsystemdataコマンド

このオペランドには次に示す計算式から求められる値を指定してください。クライアントグループ機能を適用する場合も同様です。

計算式
A×B×C
変数の説明

A同時にSQL文を実行するコネクション数

Badb_sql_exe_max_rthd_numオペランドの値

C1コネクション内で同時に実行するSELECT文の最大数

なお,対象のコマンドを実行する場合で,かつクライアントグループ機能を適用しない場合は,コマンドを実行するために最低限必要な処理リアルスレッド数以上の値を,このオペランドに指定してください。最低限必要な処理リアルスレッド数以上の値を指定しないと,対象のコマンドを実行してもエラーとなるおそれがあります。各コマンドを実行するために最低限必要な処理リアルスレッド数は,「6.23.2 コマンドの実行時に使用する処理リアルスレッド数に関する考慮点」の「(2) コマンドの実行時に使用する処理リアルスレッド数を指定するオペランドとコマンドオプション」の「表6‒28 コマンドの実行時に使用する処理リアルスレッド数を指定するオペランドとコマンドオプションの一覧」を参照してください。

また,クライアントグループ機能を適用する場合は,各グループで使用できる処理リアルスレッドの保証数の合計値よりも,このオペランドの指定値を大きくしてください。各グループで使用できる処理リアルスレッドの保証数の合計値の方が大きい場合は,HADBサーバの開始時にエラーとなります。

各グループで使用できる処理リアルスレッドの保証数については,「7.2.18 クライアントグループ機能に関するオペランドおよびオプション(コマンド形式)」のadbcltgrpオペランドの-eオプションの次の説明を参照してください。

重要

このオペランドは,メモリ所要量への影響が大きいオペランドです。このオペランドの指定値を変更した場合は,必ずメモリ所要量の見積もりを行ってください。メモリ所要量の見積もりについては,「6.3 HADBサーバのメモリ所要量の見積もり」を参照してください。

Hyper-Threadingを有効にしている場合

Hyper-Threadingを有効にしている環境では,adb_sys_rthd_numオペランドの指定値がHADBサーバをインストールしているサーバマシンのCPU数以下の場合であっても,Hyper-Threadingの特性によって次の事象が発生します。

  • adb_sql_exe_max_rthd_numオペランドの指定値を大きくしても,その分SQL文またはコマンドの実行時間が短縮されません。

  • adb_sys_rthd_numオペランドの指定値が上記の計算式の「A×B×C」を満たすようにしてSQL文を同時実行した場合であっても,各SQL文の実行時間がSQL文を単体で実行したときに比べて長くなります。

[8] adb_sys_uthd_num = 1リアルスレッドで生成できる擬似スレッド数

〜〈整数〉((0〜4,096))《128》

1リアルスレッドで生成できる擬似スレッド数を指定します。

このオペランドには,基本的にデフォルト値を指定してください。

重要

このオペランドに0を指定すると,非順序実行方式を適用しないでSQL文を実行します。また,コネクションスレッドだけでSQL文を実行します。

[9] adb_sys_memory_limit = HADBサーバが使用するメモリの最大サイズ

〜〈単位付き整数〉((5,120MB〜1,099,511,627,776MB))

HADBサーバが使用するメモリ(共有メモリおよびプロセスメモリ)の最大サイズを単位付き整数で指定します。

重要

バージョン03-01以降のHADBサーバでは,このオペランドを指定してください。このオペランドと,サーバ定義adb_sys_proc_area_maxオペランドおよびadb_sys_rthd_area_maxオペランドは,対の関係になります。どちらか片方しか指定できません。そのため,このオペランドを指定する場合は,サーバ定義adb_sys_proc_area_maxオペランドおよびadb_sys_rthd_area_maxオペランドは指定しないでください。

■adb_sys_memory_limitオペランドに指定する値の目安

このオペランドには,「6.3 HADBサーバのメモリ所要量の見積もり」のHADBサーバが使用するメモリの最大サイズで求めた値以上の値を指定してください。または,HADBサーバで使用できるメモリの最大サイズを指定してください。

注意事項を次に示します。

  • ーバ定義adb_sys_shm_huge_page_sizeオペランドに0以外を指定した場合(HADBサーバが使用する共有メモリにHugePagesを適用する場合)は,サーバ定義adb_sys_memory_limitオペランドには次の計算式を満たす値を指定してください。次の計算式を満たさない値を指定すると,HADBサーバの開始時にエラーとなります。

    サーバ定義adb_sys_memory_limitオペランドの指定値カーネルパラメタvm.nr_hugepages × HugePagesの1ページ当たりのページサイズ

    HugePagesの1ページ当たりのページサイズの確認方法については,サーバ定義adb_sys_shm_huge_page_sizeオペランドを参照してください。

  • クラウドストレージ機能を使用する場合,クラウドストレージ機能で使用する分のメモリが必要になります。そのため,このオペランドには,次のどちらかの値を指定してください。

    • 「HADBサーバが使用するメモリの最大サイズ」で求めた値以上の値

    • 「HADBサーバで使用できるメモリの最大サイズ」-「クラウドストレージ機能使用時のメモリ所要量の求め方」で求めた値

    クラウドストレージ機能使用時のメモリ所要量の求め方については,「6.3.24 クラウドストレージ機能使用時のメモリ所要量の求め方」を参照してください。

■adb_sys_memory_limitオペランドに指定する単位の規則
  • このオペランドに指定できる単位は,MB(メガバイト),GB(ギガバイト)およびTB(テラバイト)です。

    単位を指定した場合の指定例

    set adb_sys_memory_limit = 196608MB
    set adb_sys_memory_limit = 128GB
    set adb_sys_memory_limit = 64TB
  • 単位を省略した場合(整数だけを指定した場合)は,MB(メガバイト)が仮定されます。

    単位を省略した場合の指定例

    この場合は,196608MBが指定されたと仮定されます。

    set adb_sys_memory_limit = 196608
  • 各単位の指定範囲は次のとおりです。

    MB(メガバイト)の場合

    5,120MB1,099,511,627,776MB

    GB(ギガバイト)の場合

    5GB1,073,741,824GB

    TB(テラバイト)の場合

    1TB1,048,576TB

■adb_sys_memory_limitオペランドを指定しない場合に仮定される値

このオペランドを指定しない場合,サーバ定義adb_sys_proc_area_maxオペランドの指定値に従って,プロセス共通メモリの最大サイズが決まります。また,サーバ定義adb_sys_rthd_area_maxオペランドの指定値に従って,1リアルスレッド当たりのリアルスレッド固有メモリの最大サイズが決まります。

このオペランドを指定すると,次の表に従って,HADBサーバが使用するメモリ(共有メモリおよびプロセスメモリ)の最大使用量を制御します。

表7‒3 adb_sys_memory_limitオペランドが制御するメモリ領域の一覧

項番

HADBサーバが使用するメモリ領域

関連するサーバ定義のオペランド

1

共有メモリ

共有メモリ管理

2

プロセス共通メモリ※1

HADBサーバ制御用メモリ

3

その他(SQL文実行用メモリ,コマンド実行用メモリなど)

4

リアルスレッド固有メモリ※2

ローカル作業表用バッファ

adb_dbbuff_wrktbl_clt_blk_num

5

ハッシュグループ化領域

adb_sql_exe_hashgrp_area_size

6

ハッシュテーブル領域

adb_sql_exe_hashtbl_area_size

7

ハッシュフィルタ領域

adb_sql_exe_hashflt_area_size

8

その他(SQL文実行用ワークメモリ,コマンド実行用メモリなど)

9

グローバルバッファページ

グローバルバッファ

adbbuff -p

10

レンジインデクス用バッファ

adbbuff -a

11

テーブルスキャン用バッファ

  • adbbuff -v

  • adbbuff -k

12

グローバル作業表用のグローバルバッファ

adb_dbbuff_wrktbl_glb_blk_num

13

プロセスメモリ

ヒープメモリ

(凡例)

−:関連するサーバ定義のオペランドはありません。

注※1

サーバ定義adb_sys_proc_area_maxオペランドが関連します。

注※2

サーバ定義adb_sys_rthd_area_maxオペランドが関連します。

[10] adb_sql_exe_max_rthd_num = 最大SQL処理リアルスレッド数

〜〈整数〉((0〜4,096))《4》

SQL処理リアルスレッド数の最大値を指定します。

SQL処理リアルスレッドは,SQL文実行時に使用する処理リアルスレッドです。

このオペランドには,HADBサーバをインストールしているマシンのCPUのコア数以下の値を指定してください。指定値を決める際には,次に示す■adb_sql_exe_max_rthd_numオペランドを指定する際の考慮点を確認してください。また,同時に実行するSQL文の数を考慮してください。

重要

このオペランドに指定した値を変更した場合,adb_sys_rthd_numオペランドに指定した値も見直してください。このオペランドにadb_sys_rthd_numオペランドの値より大きな値を指定した場合,adb_sys_rthd_numオペランドの値が仮定されます。

■adb_sql_exe_max_rthd_numオペランドを指定する際の考慮点

次に示す計算式を満たす場合,このオペランドで指定した処理リアルスレッド数をSQL文実行時に使用できないことがあります。その場合,SQL文は,このオペランドで指定した処理リアルスレッド数が確保できるようになるまで待ち状態となります。クライアントグループ機能を適用しているかどうかによって,計算式が異なります。

計算式(クライアントグループ機能を適用していない場合)

[図データ]

計算式(クライアントグループ機能を適用している場合)

[図データ]

変数の説明

Aadb_sys_rthd_numオペランドの値

Badb_sys_max_usersオペランドの値

Cadb_sql_exe_max_rthd_numオペランドの値

D1コネクション内で同時に実行するSELECT文の最大数(0の場合は1を代入する)

E設定したクライアントグループまたはコマンドグループで使用できる処理リアルスレッドの保証数

F設定したクライアントグループまたはコマンドグループの最大同時接続数

このオペランドと,クライアント定義adb_sql_exe_max_rthd_numオペランドを両方指定した場合は,クライアント定義adb_sql_exe_max_rthd_numオペランドの指定値が優先されます。ただし,クライアント定義adb_sql_exe_max_rthd_numオペランドの指定値が,このオペランドの指定値よりも大きい場合は優先されません(このオペランドの指定値が仮定されます)。

クライアント定義adb_sql_exe_max_rthd_numオペランドについては,マニュアルHADB AP開発ガイド性能に関するオペランドを参照してください。

また,設定したクライアントグループおよびコマンドグループの中で,使用できる処理リアルスレッドの最大数よりも,adb_sql_exe_max_rthd_numオペランドの値が大きいグループがある場合,そのグループのadb_sql_exe_max_rthd_numオペランドの値には,使用できる処理リアルスレッドの最大数が仮定されます。

使用できる処理リアルスレッドの最大数については,「7.2.18 クライアントグループ機能に関するオペランドおよびオプション(コマンド形式)」のadbcltgrpオペランドの-rオプションを参照してください。

このオペランドの指定値と,SQL文の実行時に使用するSQL処理リアルスレッド数の関係を次の表に示します。

表7‒4 SQL文の実行時に使用するSQL処理リアルスレッド数

項番

実行するSQL文

adb_sql_exe_max_rthd_numオペランドの指定値

0を指定

1を指定

2以上を指定

1

定義系SQL

ALTER TABLE文(アーカイブマルチチャンク表をレギュラーマルチチャンク表に変更する場合)※1

使用するSQL処理リアルスレッド数は0になります。

使用するSQL処理リアルスレッド数は0になります。

使用するSQL処理リアルスレッド数は,adb_sql_exe_max_rthd_numオペランドの指定値となります。

2

DROP INDEX※1

3

DROP SCHEMA※1

4

DROP TABLE※1

5

DROP USER※1

6

REVOKE文のSCHEMA(スキーマ操作権限の取り消し)※1

7

操作系SQL

PURGE CHUNK※1

使用するSQL処理リアルスレッド数は,計算式※2で求めた値となります。

8

TRUNCATE TABLE※1

9

SELECT※3

使用するSQL処理リアルスレッド数は1になります。

使用するSQL処理リアルスレッド数は,adb_sql_exe_max_rthd_numオペランドの指定値となります。

10

上記以外のSQL文※4

使用するSQL処理リアルスレッド数は0になります。

使用するSQL処理リアルスレッド数は0になります。

注※1

このオペランドに1以下を指定した場合は,コネクションスレッドだけでSQL文を実行します。このオペランドに2以上を指定した場合は,セグメントの解放処理を行うときに,表で示すSQL処理リアルスレッド数を使用してSQL文を実行します。

注※2

使用するSQL処理リアルスレッド数は,次の計算式で求めた値になります。

[図データ]

注※3

このオペランドに0を指定した場合は,非順序実行方式を適用しないでSQL文を実行します。このオペランドに1以上を指定した場合は,表で示すSQL処理リアルスレッド数を使用して,非順序実行方式を適用してSQL文を実行します。

注※4

このオペランドの指定値に関係なく,コネクションスレッドだけでSQL文を実行します。

重要

サーバ定義adb_sys_uthd_numオペランドに0を指定した場合は,このオペランドに0を指定した場合と同じようにSQL文が実行されます。

[11] adb_sql_exe_hashgrp_area_size = ハッシュグループ化領域サイズ

〜〈整数〉((0,4〜1,000,000))《4,800》(単位:キロバイト)

ハッシュグループ化領域をキロバイト単位で指定します。

ローカルハッシュグループ化処理(GROUP BY句によるグループ分けにハッシングが使用される)が適用されるSQL文を実行すると,SQL処理リアルスレッドごとに,リアルスレッド固有メモリに対して,指定した値でハッシュグループ化領域が確保されます。

0を指定すると,ローカルハッシュグループ化処理は実行されません。また,4より小さい値を指定した場合には,4が指定されたと仮定されます。

ハッシュグループ化領域は,ローカルハッシュグループ化処理が適用されるSQL文ごと,そのSQL文で指定されたGROUP BY句ごとに指定の値で確保されます。

指定した値がローカルハッシュグループ化処理に十分な領域サイズでなかった場合,指定されたサイズで処理できる範囲でハッシュグループ化されます。処理できなかった行は,作業表用DBエリアに作業表として格納されます。

ハッシュグループ化領域サイズの値は,次に示す計算式で求めた値を目安としてください。なお,GROUP BY句が指定された問合せ指定が複数あるSQL文の場合は,各問合せについて求めた値の最大値を目安としてください。

計算式

[図データ]

変数の説明

このオペランドと,クライアント定義adb_sql_exe_hashgrp_area_sizeオペランドを両方指定した場合は,クライアント定義adb_sql_exe_hashgrp_area_sizeオペランドの指定値が優先されます。クライアント定義adb_sql_exe_hashgrp_area_sizeオペランドについては,マニュアルHADB AP開発ガイド性能に関するオペランドを参照してください。

[12] adb_sql_exe_hashtbl_area_size = ハッシュテーブル領域サイズ

〜〈整数〉((0〜4,194,304))《2,000》(単位:メガバイト)

ハッシュテーブル領域のサイズをメガバイト単位で指定します。

ハッシュ検索が適用されるSQL文が実行されると,SQL処理リアルスレッドごとに,リアルスレッド固有メモリに対して,次に示す計算式に従ってハッシュテーブル領域が確保されます。

計算式
このオペランドの指定値÷adb_sql_exe_max_rthd_numオペランドの指定値

なお,adb_sql_exe_max_rthd_numオペランドの指定値が0の場合,ハッシュ検索は適用されません。

メモ

ハッシュ検索とはハッシュテーブル領域を使用する処理のことです。次に示す処理が該当します。

  • 表の結合方式のハッシュジョイン

  • グループ化の処理方式のグローバルハッシュグループ化

  • 副問合せの処理方式のハッシュ実行

  • SELECT DISTINCTの処理方式のハッシュ実行

  • 集合演算の処理方式のハッシュ実行

上記のハッシュ検索の各処理については,マニュアルHADB AP開発ガイドの次の個所を参照してください。

  • 表の結合方式

  • 副問合せの処理方式

  • グループ化の処理方式

  • SELECT DISTINCTの処理方式

  • 集合演算の処理方式

ハッシュテーブル領域は,ハッシュ検索が適用されるSQL文ごとに確保されます。

このオペランドに0を指定した場合,ハッシュ検索は適用されません。なお,次に示す場合に限り,このオペランドに0を指定してください。

このオペランドに0を指定してもよいケース

次に示すオペランドの指定値を大きくできないため,メモリ不足によるエラーを回避できない場合(KFAA30919-E,またはKFAA30930-Eメッセージが出力されるとき)

  • adb_sys_rthd_area_maxオペランド

  • adb_sys_memory_limitオペランド

  • adb_dbbuff_wrktbl_clt_blk_numオペランド

指定した値がハッシュ検索に十分な領域サイズでなかった場合,指定されたサイズで処理できる範囲でハッシュテーブルが作成されます。ハッシュテーブルで処理できなかった行は,作業表用DBエリアに作業表として格納されます。

ハッシュテーブル領域サイズの値は,次の計算式で求めた値を目安としてください。

計算式

[図データ]

変数の説明
  • 最大SQL文単位ハッシュテーブル領域サイズ

    実行する各SQL文について求めたSQL文単位ハッシュテーブル領域サイズの最大値です。SQL文単位ハッシュテーブル領域サイズは,次の計算式で求めてください。

    [図データ]

    ハッシュテーブル数,ハッシュテーブル最大行長,および中間検索結果最大件数については,「6.25.3 ハッシュテーブルを使用した検索時に作成される作業表の数」を参照してください。

  • 最大SQL処理リアルスレッド数

    サーバ定義adb_sql_exe_max_rthd_numオペランドの指定値です。ただし,adb_sql_exe_max_rthd_numオペランドの指定値が0の場合は,1と仮定して計算してください。

このオペランドと,クライアント定義adb_sql_exe_hashtbl_area_sizeオペランドを両方指定した場合は,クライアント定義adb_sql_exe_hashtbl_area_sizeオペランドの指定値が優先されます。ただし,クライアント定義adb_sql_exe_hashtbl_area_sizeオペランドの指定値が,このオペランドの指定値よりも大きい場合は優先されません(このオペランドの指定値が仮定されます)。クライアント定義adb_sql_exe_hashtbl_area_sizeオペランドについては,マニュアルHADB AP開発ガイド性能に関するオペランドを参照してください。

[13] adb_sql_exe_hashflt_area_size = ハッシュフィルタ領域サイズ

〜〈整数〉((0〜419,430))《サーバ定義のadb_sql_exe_hashtbl_area_sizeオペランドの値÷10》(単位:メガバイト)

ハッシュフィルタを作成するハッシュフィルタ領域のサイズをメガバイト単位で指定します。次の処理を実行する際に,ハッシュフィルタが適用されます。

  • 表の結合方式のハッシュジョイン

  • 副問合せの処理方式のハッシュ実行

ハッシュジョイン,ハッシュ実行,ハッシュフィルタについては,マニュアルHADB AP開発ガイドハッシュジョインとはおよび副問合せの処理方式を参照してください。

ハッシュフィルタ領域は,ハッシュジョインまたはハッシュ実行の際,ハッシュフィルタが適用されるSQL文ごとに確保されます。ハッシュフィルタが適用されるSQL文が実行された場合,SQL処理リアルスレッドごとに,リアルスレッド固有メモリに対して,次に示す計算式に従ってハッシュフィルタ領域が確保されます。

このオペランドの指定値÷adb_sql_exe_max_rthd_numオペランドの指定値

指定値の目安と調整

  • 次の計算式で求めた値を,このオペランドの指定値の目安としてください。

    ハッシュフィルタ領域サイズ=
    ↑adb_sql_exe_hashtbl_area_sizeオペランドの指定値(ハッシュテーブル領域サイズ)÷10↑
  • ハッシュジョインおよびハッシュ実行の際にハッシュフィルタを適用した結果,処理性能が低下した場合に限り,このオペランドに0を指定してください。

  • このオペランドの指定値が小さく,ハッシュフィルタ領域サイズが十分に確保できない場合,ハッシュジョインおよびハッシュ実行の際にハッシュフィルタは適用されません。ハッシュフィルタが適用されたかどうかは,アクセスパスの統計情報のHashtbl_filter_num,およびHashtbl_sum_filter_check_cntの値で確認できます。

    このオペランドに0以外を指定した状態で,Hashtbl_filter_numの値に0以外が出力され,かつ,Hashtbl_sum_filter_check_cnt0が出力された場合,ハッシュフィルタ領域サイズが不足しています。ハッシュフィルタが適用されていない状態のため,このオペランドの指定値を大きくしてください。アクセスパスの統計情報については,「10.11.3 アクセスパスの統計情報の出力例と出力項目」の「(2) アクセスパスの統計情報に出力される項目」の「(e) ハッシュテーブル領域に関する情報」を参照してください。

留意事項

  • このオペランドに0を指定した場合,ハッシュジョインおよびハッシュ実行の際,ハッシュフィルタは適用されません。

  • adb_sql_exe_max_rthd_numオペランドに0を指定した場合,ハッシュジョインおよびハッシュ実行は適用されません。

  • このオペランドと,クライアント定義のadb_sql_exe_hashflt_area_sizeオペランドの両方を指定した場合は,クライアント定義のadb_sql_exe_hashflt_area_sizeオペランドの指定値が優先されます。ただし,クライアント定義のadb_sql_exe_hashflt_area_sizeオペランドの指定値が,このオペランドの指定値よりも大きい場合は優先されません(このオペランドの指定値が仮定されます)。クライアント定義のadb_sql_exe_hashflt_area_sizeオペランドについては,マニュアルHADB AP開発ガイド性能に関するオペランドを参照してください。

[14] adb_sql_opt_hashjoin_div = Y|N}

ハッシュジョインの分割実行を適用するかどうかを指定します。ハッシュジョインについては,マニュアルHADB AP開発ガイドハッシュジョインとはを参照してください。

  • Y

    ハッシュジョインの分割実行をHADBが適用可能と判断した場合は,ハッシュジョインの分割実行を適用することがあります。

  • N

    ハッシュジョインの分割実行を適用しません。

通常,このオペランドは指定不要です。

ハッシュジョインの分割実行を適用すると問題がある場合に,このオペランドにNを指定してください。

すべてのSQL文に対してハッシュ検索を実行するのに十分なハッシュテーブル領域サイズがadb_sql_exe_hashtbl_area_sizeオペランドに指定されている場合は,ハッシュジョインの分割実行を適用する必要はありません。このような場合にハッシュジョインの分割実行が適用されると,処理時間が長くなります。そのときは,このオペランドにNを指定してください。

なお,SQL文の実行時にハッシュジョインの分割実行が適用されるかどうかは,アクセスパス情報で確認できます。詳細については,マニュアルHADB AP開発ガイドツリー表示に出力される情報表の結合方式を参照してください。

[マルチノード機能]

マルチノード機能を使用する場合は,全ノードのHADBサーバでこのオペランドの指定値を同じにすることを推奨します。各ノードでこのオペランドの指定値が異なる場合,SQL文を実行するノードごとに異なるアクセスパスになるおそれがあります。

[15] adb_sql_opt_drvtbl_grping_prior = LOCAL|GLOBAL}

次の条件をすべて満たすSQL文を実行する場合に,優先するグループ化の処理方式を指定します。

  • FROM句に表参照を1つだけ指定している

  • 上記の表参照が,展開されない内部導出表である

  • 最も外側の問合せ指定にGROUP BY句を指定している

通常,このオペランドは指定不要です。

SQL文の処理に使用できるSQL処理リアルスレッド数が多い場合(目安は30以上)にGLOBALを指定すると,SQL文の実行時間が短くなることがあります。

  • LOCAL

    グループ化の処理方式にローカルハッシュグループ化を優先します。

  • GLOBAL

    グループ化の処理方式にグローバルハッシュグループ化を優先します。

このオペランドの指定値とグループ化の処理方式の関係を次の例で説明します。

(例)

SELECT "C2"
    FROM (SELECT "C1",COUNT(*) FROM "T1" GROUP BY "C1") AS "DT1" ("C1","C2")
    GROUP BY "C2"

このオペランドにLOCALを指定して上記のSQL文を実行した場合は,外側のグループ化(下線部分のグループ化)の処理方式にローカルハッシュグループ化が適用されます。

このオペランドにGLOBALを指定して上記のSQL文を実行した場合は,外側のグループ化(下線部分のグループ化)の処理方式にグローバルハッシュグループ化が適用されます。

[マルチノード機能]

マルチノード機能を使用する場合は,全ノードのHADBサーバでこのオペランドの指定値を同じにすることを推奨します。各ノードでこのオペランドの指定値が異なる場合,SQL文を実行するノードごとに異なるアクセスパスになるおそれがあります。

[16] adb_sys_rthd_area_max = 確保できるリアルスレッド固有メモリの最大サイズ

〜〈整数〉((1,024〜2,000,000,000))《1,024》(単位:メガバイト)

確保できる1リアルスレッド当たりのリアルスレッド固有メモリの最大サイズをメガバイト単位で指定します。

バージョン03-01以降のHADBサーバでは,このオペランドは指定不要です。その代わり,サーバ定義adb_sys_memory_limitオペランドを指定してください。このオペランドを指定した場合,サーバ定義adb_sys_memory_limitオペランドは指定できません。

もし,このオペランドを指定する場合は,次に示す計算式で求めた値を指定してください。

計算式

[図データ]

変数の説明
  • MACHINE_MEMORY_SIZE

    HADBサーバをインストールしたサーバマシンに搭載された物理メモリサイズ(単位:メガバイト)

  • SHMMAN

    HADBサーバ開始時に取得するHADBで使用する共有メモリの情報を格納する領域の領域サイズ(単位:キロバイト)

    変数SHMMANについては,「6.3.3 HADBサーバ開始時のメモリ所要量の求め方」の「(1) 共有メモリ管理の所要量の求め方(HADBサーバ開始時)」を参照してください。

  • SHM_BUFGLOBAL

    HADBサーバ開始時に取得するグローバルバッファ領域の領域サイズ(単位:キロバイト)

    変数SHM_BUFGLOBALについては,「6.3.3 HADBサーバ開始時のメモリ所要量の求め方」の「(2) グローバルバッファページの所要量の求め方(HADBサーバ開始時)」を参照してください。

  • RTHD_NUM

    HADBサーバで使用するリアルスレッド数(単位:個)

    次に示す計算式で求めてください。マルチノード機能を使用するかどうかで,計算式が異なります。

    • マルチノード機能を使用しない場合

      RTHD_NUMサーバ定義のadb_sys_max_usersオペランドの指定値サーバ定義のadb_sys_rthd_numオペランドの指定値+10
    • マルチノード機能を使用する場合(ワーカーノードを使用しない場合)

      RTHD_NUMサーバ定義のadb_sys_max_usersオペランドの指定値サーバ定義のadb_sys_rthd_numオペランドの指定値+10
         +(サーバ定義のadb_sys_multi_node_infoオペランドに指定したホスト名の数-1)
         ×(サーバ定義のadb_sys_max_parallel_exec_numオペランドの指定値×2+2)+5
    • マルチノード機能を使用する場合(ワーカーノードを使用する場合)

      ・プライマリノードまたはセカンダリノードの場合

      RTHD_NUMサーバ定義のadb_sys_max_usersオペランドの指定値サーバ定義のadb_sys_rthd_numオペランドの指定値+10
         +(サーバ定義のadb_sys_multi_node_infoオペランドに指定したホスト名の数-1)
         ×(サーバ定義のadb_sys_max_parallel_exec_numオペランドの指定値×2+2)+5
         +サーバ定義のadb_sys_multi_max_worker_nodesオペランドの指定値
         ×(サーバ定義のadb_sys_max_parallel_exec_numオペランドの指定値×2+2)

      ・ワーカーノードの場合

      RTHD_NUMサーバ定義のadb_sys_max_usersオペランドの指定値サーバ定義のadb_sys_rthd_numオペランドの指定値+10
         +(サーバ定義のadb_sys_multi_node_infoオペランドに指定したホスト名の数-1)
         ×(サーバ定義のadb_sys_max_parallel_exec_numオペランドの指定値×2+2)+5
         +サーバ定義のadb_sys_multi_max_worker_nodesオペランドの指定値
         ×サーバ定義のadb_sys_max_parallel_exec_numオペランドの指定値×2+2
[17] adb_sys_proc_area_max = 確保できるプロセス共通メモリの最大サイズ

〜〈整数〉((5,120〜2,000,000,000))《8,192》(単位:メガバイト)

確保できるプロセス共通メモリの最大サイズをメガバイト単位で指定します。

バージョン03-01以降のHADBサーバでは,このオペランドは指定不要です。その代わり,サーバ定義adb_sys_memory_limitオペランドを指定してください。このオペランドを指定した場合,サーバ定義adb_sys_memory_limitオペランドは指定できません。

もし,このオペランドを指定する場合は,次に示す計算式で求めた値を指定してください。

計算式

[図データ]

変数の説明
  • MACHINE_MEMORY_SIZE

    HADBサーバをインストールしたサーバマシンに搭載された物理メモリサイズ(単位:メガバイト)

  • SHMMAN

    HADBサーバ開始時に取得するHADBで使用する共有メモリの情報を格納する領域の領域サイズ(単位:キロバイト)

    変数SHMMANについては,「6.3.3 HADBサーバ開始時のメモリ所要量の求め方」の「(1) 共有メモリ管理の所要量の求め方(HADBサーバ開始時)」を参照してください。

  • SHM_BUFGLOBAL

    HADBサーバ開始時に取得するグローバルバッファ領域の領域サイズ(単位:キロバイト)

    変数SHM_BUFGLOBALについては,「6.3.3 HADBサーバ開始時のメモリ所要量の求め方」の「(2) グローバルバッファページの所要量の求め方(HADBサーバ開始時)」を参照してください。

  • RTHD_NUM

    HADBサーバで使用するリアルスレッド数(単位:個)

    次に示す計算式で求めてください。マルチノード機能を使用するかどうかで,計算式が異なります。

    • マルチノード機能を使用しない場合

      RTHD_NUMサーバ定義のadb_sys_max_usersオペランドの指定値サーバ定義のadb_sys_rthd_numオペランドの指定値+10
    • マルチノード機能を使用する場合(ワーカーノードを使用しない場合)

      RTHD_NUMサーバ定義のadb_sys_max_usersオペランドの指定値サーバ定義のadb_sys_rthd_numオペランドの指定値+10
         +(サーバ定義のadb_sys_multi_node_infoオペランドに指定したホスト名の数-1)
         ×(サーバ定義のadb_sys_max_parallel_exec_numオペランドの指定値×2+2)+5
    • マルチノード機能を使用する場合(ワーカーノードを使用する場合)

      ・プライマリノードまたはセカンダリノードの場合

      RTHD_NUM=サーバ定義のadb_sys_max_usersオペランドの指定値サーバ定義のadb_sys_rthd_numオペランドの指定値+10
         +(サーバ定義のadb_sys_multi_node_infoオペランドに指定したホスト名の数-1)
         ×(サーバ定義のadb_sys_max_parallel_exec_numオペランドの指定値×2+2)+5
         +サーバ定義のadb_sys_multi_max_worker_nodesオペランドの指定値
         ×(サーバ定義のadb_sys_max_parallel_exec_numオペランドの指定値×2+2)

      ・ワーカーノードの場合

      RTHD_NUM=サーバ定義のadb_sys_max_usersオペランドの指定値サーバ定義のadb_sys_rthd_numオペランドの指定値+10
         +(サーバ定義のadb_sys_multi_node_infoオペランドに指定したホスト名の数-1)
         ×(サーバ定義のadb_sys_max_parallel_exec_numオペランドの指定値×2+2)+5
         +サーバ定義のadb_sys_multi_max_worker_nodesオペランドの指定値
         ×サーバ定義のadb_sys_max_parallel_exec_numオペランドの指定値×2+2
[18] adb_sys_shm_huge_page_size = HugePagesの1ページ当たりのページサイズの倍数

〜〈整数〉((0〜2,147,483,647))《0》(単位:キロバイト)

HADBサーバが使用する共有メモリにHugePagesを適用する場合,HugePagesの1ページ当たりのページサイズの倍数をキロバイト単位で指定します。

このオペランドには,次のコマンドで確認した値(HugePagesの1ページ当たりのページサイズ)を指定することを推奨します。コマンドで値を確認するときは,値の単位に注意してください。このオペランドにHugePagesの1ページ当たりのページサイズの倍数以外の値を指定すると,共有メモリの確保に失敗し,HADBサーバが開始できなくなります。

実行するコマンド
grep Hugepagesize /proc/meminfo
実行結果の例
Hugepagesize:       2048 kB

この例では,2048を指定することを推奨します。

このオペランドに0を指定すると,HADBサーバが使用する共有メモリにHugePagesは適用されません。

なお,HADBサーバが使用する共有メモリにHugePagesを適用するためには,カーネルパラメタを設定する必要があります。カーネルパラメタの設定については,「6.2 カーネルパラメタの見積もり」を参照してください。

[19] adb_dbbuff_wrktbl_glb_blk_num = グローバル作業表用のグローバルバッファのページ数

〜〈整数〉((5〜100,000,000))《128》

グローバル作業表用のグローバルバッファのページ数を指定します。

このオペランドを指定して確保されたグローバルバッファは,グローバル作業表を作成するSQL文を実行したときだけ使用されます。

このオペランドの指定値の見積もり方法については,「6.25.1 グローバル作業表用のグローバルバッファのページ数の見積もり」を参照してください。

また,グローバル作業表については,マニュアルHADB AP開発ガイドAPの性能向上に関する設計作業表が作成されるSQLを実行する際の考慮点作業表の種類を参照してください。

[20] adb_dbbuff_wrktbl_clt_blk_num = ローカル作業表用バッファのページ数

〜〈整数〉((5〜100,000,000))《256》

ローカル作業表用バッファのページ数を指定します。

このオペランドを指定して確保されたローカル作業表用バッファは,ローカル作業表を作成するSQL文を実行したときだけ使用されます。また,このオペランドで指定したページ数分のローカル作業表用バッファは,リアルスレッドごとに確保されます。

このオペランドの指定値の見積もり方法については,「6.25.2 ローカル作業表用バッファのページ数の見積もり」を参照してください。

ローカル作業表については,マニュアルHADB AP開発ガイドAPの性能向上に関する設計作業表が作成されるSQLを実行する際の考慮点作業表の種類を参照してください。

メモ
  • このオペランドと,クライアント定義adb_dbbuff_wrktbl_clt_blk_numオペランドを両方指定した場合は,クライアント定義adb_dbbuff_wrktbl_clt_blk_numオペランドの指定値が優先されます。クライアント定義adb_dbbuff_wrktbl_clt_blk_numオペランドについては,マニュアルHADB AP開発ガイド性能に関するオペランドを参照してください。

  • このオペランドと,エクスポートオプションadb_export_wrktbl_blk_numを両方指定した場合は,エクスポートオプションadb_export_wrktbl_blk_numの指定値が優先されます。エクスポートオプションadb_export_wrktbl_blk_numについては,マニュアルHADB コマンドリファレンスadbexport(データのエクスポート)adbexportコマンドの指定形式エクスポートオプションの形式を参照してください。

  • 実際に確保されたローカル作業表用バッファのページ数は,adbls -d lbufコマンドで確認できます。adbls -d lbufコマンドについては,マニュアルHADB コマンドリファレンスadbls -d lbuf(ローカル作業表用バッファの情報表示)を参照してください。

  • このオペランドで指定したローカル作業表用バッファのページ数は,HADBサーバの稼働中に,adbmodbuffコマンドで変更できます。adbmodbuffコマンドについては,マニュアルHADB コマンドリファレンスadbmodbuff(バッファの変更)を参照してください。

[21] adb_sql_tbldef_cache_size = 表定義プールサイズ

〜〈整数〉((500〜2,048,000))《5,120》(単位:キロバイト)

表定義情報を格納する表定義プールサイズをキロバイト単位で指定します。

通常,このオペランドは指定不要です。コスト情報を使用して運用する場合は,以降の説明を読み,適切な値を指定してください。

表定義情報とは,表にアクセスするために必要な情報で,表の情報だけではなく,列やインデクスの情報も含みます。表定義情報の作成時にはディクショナリ表へのアクセスが発生します。一度使用された表定義情報は,表定義プール(キャッシュ)に登録され,LRU方式で管理されます。

表定義プールに表定義情報が登録されていると,次にその表定義情報が必要になったとき,表定義プールから取り出して利用できます(ディクショナリ表にアクセスして表定義情報を作成する必要がなくなります)。したがって,表定義プールを使用することで,I/O回数の削減や,CPU使用時間の短縮が期待できます。

表へのアクセス時に必要な表定義情報が表定義プールに存在しない場合は,表定義情報が作成され,表定義プールに登録されます。表定義プール上に空き領域がない場合は,使用されていないほかの表定義情報が表定義プールから掃き出されたあとで,表定義情報が登録されます。なお,表定義プール上に空き領域が確保できなかったときは,表定義情報が登録されません。

このため,HADBで実行されるトランザクション中で使用する表の表定義情報をすべて格納できるように,次の計算式で求めた表定義プールサイズを指定してください。表定義プールの空き領域が不足して表定義情報の掃き出しが発生した場合,SQL文の性能に影響するおそれがあります。

計算式

[図データ]

変数の説明