Hitachi

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


7.2.11 グローバルバッファに関するオペランドおよびオプション(コマンド形式)

[57] adbbuff

データ用DBエリアに割り当てるグローバルバッファの内容を定義します。このオペランドは,複数指定できます。

このオペランドを指定する場合,次に示す2つの変数の合計値が,「6.3 HADBサーバのメモリ所要量の見積もり」で求めたHADBサーバが使用するメモリの最大サイズの3割〜4割程度の値となるよう,見積もってください。

なお,マスタディレクトリ用DBエリア,ディクショナリ用DBエリア,システム表用DBエリアおよび作業表用DBエリアには,自動的にグローバルバッファが割り当てられるため,このオペランドで定義する必要はありません。

また,このオペランドで割り当てたグローバルバッファの内容については,adbls -d gbufコマンドで確認できます。adbls -d gbufコマンドについては,マニュアルHADB コマンドリファレンスadbls -d gbuf(グローバルバッファの情報表示)を参照してください。

メモ

作業表用DBエリアに割り当てられるバッファには,グローバル作業表用のグローバルバッファ,およびローカル作業表用バッファがあります。指定方法を次に示します。

  • グローバル作業表用のグローバルバッファの指定方法

    7.2.2 性能に関するオペランド(set形式)」のサーバ定義adb_dbbuff_wrktbl_glb_blk_numオペランドで,グローバル作業表用のグローバルバッファのページ数を指定できます。グローバル作業表用のグローバルバッファ名は,ADBWRKになります。

  • ローカル作業表用バッファの指定方法

    7.2.2 性能に関するオペランド(set形式)」のサーバ定義adb_dbbuff_wrktbl_clt_blk_numオペランドで,ローカル作業表用バッファのページ数を指定できます。

    また,クライアント定義adb_dbbuff_wrktbl_clt_blk_numオペランド,およびエクスポートオプションadb_export_wrktbl_blk_numでも,ローカル作業表用バッファのページ数を指定できます。

    クライアント定義adb_dbbuff_wrktbl_clt_blk_numオペランドについては,マニュアルHADB AP開発ガイド性能に関するオペランドを参照してください。エクスポートオプションadb_export_wrktbl_blk_numについては,マニュアルHADB コマンドリファレンスadbexport(データのエクスポート)adbexportコマンドの指定形式エクスポートオプションの形式を参照してください。

-g グローバルバッファ名

〜〈グローバルバッファ名〉((1〜30バイト))

HADBサーバ内で一意なグローバルバッファ名を指定します。

グローバルバッファ名の名称規則を次に示します。

  • 指定できる文字は,半角数字,半角英大文字,半角英小文字,半角カタカナ文字,半角空白,半角下線(_),および半角ハイフン(-)になります。また,全角文字も指定できます。ただし,全角空白は指定できません。

  • 半角文字と全角文字を混在させて指定できます。

  • 半角英大文字および半角英小文字は,常に区別して扱われます。

  • 先頭の文字には,半角英大文字,半角英小文字,半角カタカナ大文字(ア〜ン,ヲ)を指定してください。または,全角文字を指定してください。

  • 最後の文字に,半角空白は指定できません。

  • 半角空白と半角ハイフン(-)を含む場合は,まず,\"(バックスラッシュと二重引用符)でグローバルバッファ名を囲んでください。次に,それらを"(二重引用符)で囲んでください。

    指定例

  adbbuff -g "\"Sample Buffer01\"" -n AREA01 -p 1024
  adbbuff -g "\"Sample-Buffer02\"" -n AREA02 -p 1024

なお,このオプションに指定するグローバルバッファ名には,「##ADBOTHER」を含む名称を指定しないでください。「##ADBOTHER」を含む名称は,自動的にグローバルバッファを割り当てるときにHADBサーバが使用することがあります。そのため,「##ADBOTHER」を含む名称を指定した場合,グローバルバッファ名で区別できなくなるおそれがあります。

ヒント
■グローバルバッファの割り当て方法(-nオプション,-oオプション)の使い分け

グローバルバッファを割り当てるDBエリアを指定する場合,通常は-nオプションで指定してください。-nオプションで指定していないすべてのDBエリアに一括でグローバルバッファを割り当てたい場合,-oオプションを指定してください。

-n DBエリア名〔,DBエリア名〕…

〜〈文字列〉((1〜30バイト))

グローバルバッファを割り当てるDBエリア名を指定します。

DBエリア名の名称規則については,マニュアルHADB SQLリファレンス名前の指定を参照してください。

このオプションを指定するときの注意事項を次に示します。

  • DBエリア名を複数指定する場合

    このオプションにDBエリア名を複数指定した場合,1つのグローバルバッファに複数のDBエリアを割り当てられます。DBエリア名を複数指定する場合,ページサイズが同じDBエリアだけを指定してください。ページサイズが異なるDBエリアを指定した場合,エラーとなります。

  • カラムストア表が格納されているデータ用DBエリアを指定する場合

    カラムストア表が格納されているデータ用DBエリアを指定する場合,このオプションにそのデータ用DBエリア名だけを指定したadbbuffオペランドを定義することを推奨します。つまり,カラムストア表が格納されているデータ用DBエリアに対して,専用のグローバルバッファを割り当てるようにしてください。

    1つのグローバルバッファに対して,カラムストア表が格納されているデータ用DBエリア以外に,ローストア表やインデクスが格納されているデータ用DBエリアなども一緒に割り当てた場合,ローストア表の検索性能やインデクスを使用した検索性能が低下するおそれがあります。

  • ディクショナリ用DBエリアを指定する場合

    ディクショナリ用DBエリアにグローバルバッファを割り当てるようメッセージが出力された場合には,このオプションにADBDICだけを指定したadbbuffオペランドを新たに定義してください。通常は,このオプションにディクショナリ用DBエリアを指定する必要はありません。

  • システム表用DBエリアを指定する場合

    システム表用DBエリアにグローバルバッファを割り当てるようメッセージが出力された場合には,このオプションにADBSTBLだけを指定したadbbuffオペランドを新たに定義してください。通常は,このオプションにシステム表用DBエリアを指定する必要はありません。

なお,-nオプションでグローバルバッファを割り当てなかったDBエリアについては,自動的に-oオプションを指定したときと,同様のグローバルバッファが割り当てられます。このとき-gオプションには,「##ADBOTHER」が指定されます。

-o

-nオプションで指定していないすべてのDBエリアにグローバルバッファを割り当てます。

このオプションを指定したadbbuffオペランドは1つだけ定義できます。

このオプションを指定した場合,同じページサイズのDBエリアごとにまとめられて,それぞれに1つのグローバルバッファが割り当てられます。各グローバルバッファ名は,「-g グローバルバッファ名」+「#nnnnnnnnnn」(nはページサイズを10桁の10進数で表現したもの)になります。例を次に示します。

(例)
  • adbbuffオペランドの指定

    adbbuff -g gbuf01 -o
  • -nオプションでグローバルバッファを割り当てていないDBエリア

    ・ページサイズが4キロバイトのDBエリア:ADBDICADBSTBLADBU00011ADBU00012

    ・ページサイズが32キロバイトのDBエリア:ADBU00013

[説明]

この場合,HADBサーバによって,次のように2つのグローバルバッファが作成されます。

  • gbuf01#0000004096

    上記のグローバルバッファには,ADBDICADBSTBLADBU00011,およびADBU00012が割り当てられます。

  • gbuf01#0000032768

    上記のグローバルバッファには,ADBU00013が割り当てられます。

なお,-nオプションですべてのDBエリアにグローバルバッファを割り当てた場合,このオプションを指定しても無視されます。

-p グローバルバッファのページ数

〜〈整数〉((0〜2,147,483,647))《0》

DBエリアに割り当てるグローバルバッファのページ数を指定します。

このオプションを省略した場合,またはこのオプションに0を指定した場合は,次に示す計算式で求めた値が仮定されます。

計算式
グローバルバッファのページ数=
          (adb_sys_max_usersオペランドの指定値adb_sys_rthd_numオペランドの指定値
           +10+multi_numworker_num)
           ×(adb_sys_uthd_numオペランドの指定値+2)

数の説明

  • multi_num

    マルチノード機能を使用する場合に以下の値を加算します。

    adb_sys_multi_node_infoオペランドに指定したホスト名の数-1)
    ×(adb_sys_max_parallel_exec_numオペランドの指定値×2+2)+5
  • worker_num

    マルチノード機能のワーカーノードを使用する場合に以下の値を加算します。

    • adbbuffオペランドを指定するノードがプライマリノードまたはセカンダリノードの場合

      adb_sys_multi_max_worker_nodesオペランドの指定値
      ×(adb_sys_max_parallel_exec_numオペランドの指定値×2+2)
    • adbbuffオペランドを指定するノードがワーカーノードの場合

      adb_sys_multi_max_worker_nodesオペランドの指定値
      ×adb_sys_max_parallel_exec_num オペランドの指定値×2+2
-a レンジインデクス専用のグローバルバッファのページ数

〜〈整数〉((0〜2,147,483,647))

このオプションは,レンジインデクスに関するオプションです。

レンジインデクス専用のグローバルバッファのページ数を指定します。

次に示す計算式から求めた値を指定することを推奨します。なお,マルチチャンク表の場合は,チャンクごとに次に示す計算式で値を求めてください。そして,求めた値を合計した値をこのオプションに指定してください。

計算式

[図データ]

rngidx_num

このadbbuffオペランドに指定したDBエリアに格納されるレンジインデクス数

SGRI(i)

5.8.6 レンジインデクスを格納するセグメント数の求め方」の「(1) 変数SGRIの求め方」を参照してください。

SEGSIZE(i)

各レンジインデクスが格納されるDBエリアのセグメントサイズ(単位:ページ数)

次に示す計算式で求めてください。

SEGSIZE(i)1セグメントの容量(単位:バイト)÷page_size(i)
page_size(i)

各レンジインデクスが格納されるDBエリアのページサイズ(単位:バイト)

SAUSEDPAGENUM(i)

各レンジインデクスが使用しているページ数(単位:ページ)

次に示す計算式で求めてください。

[図データ]

PTNUM(i)

各レンジインデクスが管理しているポインタの数(単位:個)

次に示す計算式で求めてください。

[図データ]

tbl_dbareafile_num(i)

各レンジインデクスを定義した表が格納されたDBエリアファイルの数(単位:個)

tbl_dbarea_initsize(i)

各レンジインデクスを定義した表が格納されたDBエリアの初期確保サイズ(単位:ギガバイト)

対象のDBエリアに対して,次に示すコマンドを実行したときに,初期確保サイズのオプションに指定した値を代入してください。

  • adbinitコマンドの初期設定オプションadbinitdbarea-iオプションに指定した値

  • adbmodareaコマンドのDBエリア追加・変更オプションadbaddarea-iオプションに指定した値

  • adbmodareaコマンドのDBエリア追加・変更オプションadbexpandarea-iオプションに指定した値

メモ
  • adbinitコマンドの初期設定オプションについては,マニュアルHADB コマンドリファレンスadbinit(データベースの初期設定)adbinitコマンドの指定形式初期設定オプションの形式を参照してください。

  • adbmodareaコマンドのDBエリア追加・変更オプションについては,マニュアルHADB コマンドリファレンスadbmodarea(DBエリアの追加・変更)adbmodareaコマンドの指定形式DBエリア追加・変更オプションの形式を参照してください。

留意事項を次に示します。
  • -aオプションのグローバルバッファのページは,-pオプションのグローバルバッファのページとは別に確保されます。

  • -aオプションを指定した場合,レンジインデクスは-pオプションで指定したグローバルバッファのページを使用しません。

  • -aオプションを省略した場合,レンジインデクスは-pオプションで指定したグローバルバッファのページを使用します。

-v テーブルスキャンバッファに使用するメモリサイズ〔,リアルスレッドごとに使用するメモリサイズの上限値

このオプションを指定すると,テーブルスキャンの処理速度を向上させるためのテーブルスキャンバッファが確保されます。

確保されたテーブルスキャンバッファは,次のセグメントに対して適用されます。

  • 基本行用セグメント(ローストア形式の表の場合)

  • カラムデータ用セグメント(カラムストア形式の表の場合)

上記以外のセグメントに対しては適用されません。

重要

バージョン04-01以降のHADBサーバで,テーブルスキャンバッファを確保したい場合は,このオプションを指定してください。-kオプションは指定しないでください。

また,このオプションと-kオプションの指定をどちらも省略した場合,テーブルスキャンバッファは確保されません。

テーブルスキャンバッファに使用するメモリサイズ

~〈整数〉((50~100,000,000))(単位:メガバイト)

テーブルスキャン実行時に使用されるテーブルスキャンバッファに割り当てるメモリサイズを,メガバイト単位で指定してください。

HADBサーバの起動時に,このオプションの指定値に従って,テーブルスキャンバッファに割り当てるメモリサイズが確保されます。

テーブルスキャンバッファは,テーブルスキャンの処理速度を向上させるためのバッファです。テーブルスキャンバッファに,データベース上の複数ページを一括読み込みすると,I/O回数を削減できます。HADBサーバは,読み込んだテーブルスキャンバッファ上のページに対して,グローバルバッファと同様にページ単位でアクセスします。

このオプションを指定すると,テーブルスキャンバッファが確保されます。そのため,テーブルスキャン実行時にグローバルバッファではなく,テーブルスキャンバッファが使用されます。テーブルスキャンバッファが使用されると,次のSQL文の実行速度が向上する可能性があります。

  • 単純なテーブルスキャンとなるSQL文

  • 最も外側の問合せ指定がテーブルスキャンとなるようなSQL文

なお,テーブルスキャン実行時に確保したテーブルスキャンバッファが不足した場合は,グローバルバッファが使用されます。

また,SQL文の実行中に,テーブルスキャンが複数回実行される場合は,そのSQL文を実行するリアルスレッドが切り出したメモリが再利用されます。例えば,SQL文の実行時に,複数の表に対してテーブルスキャンが実行される場合などが該当します。各SQL文を実行するリアルスレッドが切り出したメモリは,カーソルのクローズ時に返却されます。

このオプションを指定する場合,次に示す2つの計算式から求めた「最小メモリサイズ」以上,「最大メモリサイズ」以内の値を指定してください。

計算式(-vオプションのテーブルスキャンバッファに使用するメモリサイズの指定値)

[図データ]

メモ

このオプションに指定したメモリサイズには,次の2つが含まれます。

  • データベースからの読み込みに使用するグローバルバッファページ

  • テーブルスキャンバッファの管理に使用するプロセス共通メモリ

データベースからの読み込みに使用するグローバルバッファページのページサイズについては,「6.3.3 HADBサーバ開始時のメモリ所要量の求め方」の「(2) グローバルバッファページの所要量の求め方(HADBサーバ開始時)」の変数SCANPAGESを参照してください。

リアルスレッドごとに使用するメモリサイズの上限値

~〈整数〉((50~100,000,000))(単位:メガバイト)

各リアルスレッドが使用できるテーブルスキャンバッファのメモリサイズの上限を,メガバイト単位で指定してください。

指定を省略した場合,メモリサイズの上限は設定されません。

このオプションを指定すると,各SQL文を実行するリアルスレッドが切り出したテーブルスキャンバッファのメモリサイズが上限に達した場合,上限以降はテーブルスキャンバッファではなくグローバルバッファが使われます。

同時に実行するテーブルスキャンを含むSQL文の数がわからない場合には,より効率的にテーブルスキャンバッファを使えるようにするために,指定を省略することを推奨します。

同時に実行するテーブルスキャンを含むSQL文の数がわかっており,それらのSQL文の間で均等にテーブルスキャンバッファが使われるようにしたい場合は,次の計算式で求めた値を指定してください。

計算式(-vオプションのリアルスレッドごとに使用するメモリサイズの上限値に指定する値)

-vオプションのリアルスレッドごとに使用するメモリサイズの上限値に指定する値=
    -vオプションのテーブルスキャンバッファに使用するメモリサイズの指定値÷
    (同時に実行するテーブルスキャンを含むSQL文の数
      ×サーバ定義adb_sql_exe_max_rthd_numオペランドの指定値)
-k セグメントを一括読み込みするためのテーブルスキャンバッファのバッファ面数

〜〈整数〉((1〜20,000,000))

重要

バージョン04-01以降のHADBサーバでは,このオプションは指定不要です。テーブルスキャンバッファを確保したい場合は,-vオプションを指定してください。

このオプションを指定した場合,-vオプションは指定できません。どちらも指定した場合,HADBサーバを開始できません(KFAA51223-Eメッセージが出力されます)。

このオプションと-vオプションの指定をどちらも省略した場合,テーブルスキャンバッファは確保されません。

また,このオプションの指定値が12以下の場合,テーブルスキャンバッファは確保されません(KFAA51204-Wメッセージが出力されます)。

テーブルスキャン実行時に,セグメントを一括読み込みするためのテーブルスキャンバッファのバッファ面数を指定します。テーブルスキャンバッファの1面のサイズは4メガバイトです。

テーブルスキャンバッファは,テーブルスキャンの処理速度を向上させるためのバッファです。テーブルスキャンバッファに,データベース上の複数のページをセグメント単位に一括読み込みすると,I/O回数を削減できます。これによって,処理速度が向上する可能性があります。

HADBサーバは,セグメント単位で読み込んだテーブルスキャンバッファ上のページに対して,グローバルバッファと同様にページ単位でアクセスします。

このオプションを指定すると,テーブルスキャンバッファを確保します。そのため,テーブルスキャン実行時にグローバルバッファではなく,テーブルスキャンバッファを使用します。テーブルスキャンバッファを使用すると,次のSQL文の実行速度が向上する可能性があります。

  • 単純なテーブルスキャンとなるSQL文

  • 最も外側の問合せ指定がテーブルスキャンとなるようなSQL文

このオプションを指定する場合,次に示す2つの計算式から求めた「最小バッファ面数」以上,「最大バッファ面数」以内の値を指定してください。

計算式(-kオプションの指定値)

[図データ]

また,このオプションを指定する場合,次に示す計算式を満たすようにサーバ定義を指定することを推奨します。左辺と右辺の値が,できるだけ同じ値に近づくよう調整してください。

計算式

[図データ]

なお,テーブルスキャン実行時に確保したテーブルスキャンバッファが不足した場合は,グローバルバッファが使用されます。テーブルスキャンバッファが十分に確保されているかどうかについては,adbstatコマンドで確認できます。詳細については,「13.2.5 テーブルスキャンを実行するSQL文の実行時間を短縮する方法」を参照してください。

また,テーブルスキャンについては,マニュアルHADB AP開発ガイドAPの性能向上に関する設計表の検索方式を参照してください。