Hitachi

ノンストップデータベース HiRDB Version 9 システム導入・設計ガイド(Windows(R)用)


14.7.1 一時表用RDエリアの概要

一時表用RDエリアは,一時表や一時インデクスを格納するユーザ用RDエリアです。

〈この項の構成〉

(1) 適用基準

一時表を使用する場合に必要です。

(2) 一時表用RDエリアの属性

一時表用RDエリアには,次の二つがあります。

(3) 作成方法

一時表用RDエリアの作成方法を次に示します。

  1. pd_max_temporary_object_noオペランドに,ある一時点で使用する一時表と一時インデクスの最大数を指定します。0904互換モードを適用している場合,pd_max_temporary_object_noオペランドの指定に加えて,pd_max_tmp_table_rdarea_noオペランドに一時表用RDエリアの最大数を指定します。

  2. pdfmkfsコマンドの-kオプション(使用目的)にDBを指定し,HiRDBファイルシステム領域を作成します。

  3. データベース初期設定ユティリティ(pdinit),又はデータベース構成変更ユティリティ(pdmod)のcreate rdarea文に次の二つのオペランドを指定して,ユーザ用RDエリアを作成します。

    • for user used by PUBLICを指定します。

      一時表用RDエリアとして使用するには,公用RDエリアである必要があります。

    • temporary table useを指定します。

      SQLセッション間共有属性の場合はtemporary table use sharedを,特定SQLセッション占有属性の場合はtemporary table use occupiedを指定します。

作成時の注意
  • 0904互換モードを適用している場合,pd_max_tmp_table_rdarea_noオペランドの指定値は,pd_max_rdarea_noオペランドの指定値より小さい値にしてください。一時表用RDエリアを追加する場合は,追加する一時表用RDエリアも含めて,pd_max_rdarea_noオペランドで指定するRDエリアの最大数を超えないようにしてください。超える場合,pd_max_rdarea_noオペランドの指定値を変更してください。

  • 使用できる一時表用RDエリアが複数ある場合,使用する一時表用RDエリアはHiRDBが自動的に決定します。そのため,一つのUAPが使用できる一時表用RDエリアは,RDエリアの容量,セグメントサイズ,及びページサイズを同じにすることをお勧めします。

    RDエリアの容量,セグメントサイズ,及びページサイズを統一していないと,次の現象が発生します。

    ・一時表への,初回のINSERT文の実行によって実体化するごとに,ページサイズが異なるRDエリアを格納先として決定する可能性があります。この場合,同じ挿入データであっても,挿入データの行長と格納先RDエリアのページサイズの大小関係によって,初回のINSERT文の実行可否が変わります。

    ・格納先RDエリアは空きセグメント数が多いRDエリアを優先的に選択しますが,格納先RDエリアの候補となるRDエリアのページサイズやセグメントサイズが異なると,空き容量の小さいRDエリアを格納先RDエリアとして選択することがあります。

  • 一時表用RDエリアはHiRDB開始時,又は一時表への最初のINSERT文実行時に初期化されるため,容量が大き過ぎると初期化のオーバヘッドが大きくなります。一時表用RDエリアの初期化については,「一時表用RDエリアの初期化」を参照してください。

作成例

HiRDB/パラレルサーバのBES1に,SQLセッション間共有属性の一時表用RDエリア(RDTMP01)を作成する場合のデータベース構成変更ユティリティ(pdmod)の制御文の例を次に示します。

create rdarea RDTMP01   …一時表用RDエリア名を指定
  globalbuffer tmpbuf01
  for user used by PUBLIC   …公用RDエリアの指定
  server name BES1
  open attribute INITIAL
  page 4096 characters
  storage control segment 100 pages
  temporary table use shared   …SQLセッション間共有属性を指定
  file name "\hirdb\db\rdtmp01_f01"
    initial 500 segments ;

(4) 一時表用RDエリアの初期化

HiRDB開始時に,開始モードに関係なく,HiRDBは前回稼働時に使用した一時表用RDエリアを初期化します。そのため,初期化する一時表用RDエリアの容量が多いと,HiRDBの開始に時間が掛かります。高速系切り替え機能やスタンバイレス型系切り替え機能を使用していて,系切り替え時間を短縮する必要がある場合,pd_tmp_table_initialize_timingオペランドにACCESSを指定することで,HiRDB開始時に一時表用RDエリアの初期化をしないようにできます。ただし,ACCESSを指定すると,一時表に最初にINSERT文が実行された時点で一時表用RDエリアを初期化するため,初期化する容量が多いと,INSERT実行のオーバヘッドが大きくなります。オーバヘッドを小さくするには,一時表用RDエリアの容量を小さくしてください。

pd_tmp_table_initialize_timingオペランド,及び一時表用RDエリアの初期化によるオーバヘッド量の見積もりについては,マニュアル「HiRDB Version 9 システム定義」を参照してください。

(5) 一時表用RDエリアのバックアップ

一時表のデータは,トランザクション又はSQLセッションの期間中だけ保持するデータのため,一時表用RDエリアのバックアップは取得不要です。一時表用RDエリアに障害が発生した場合は,データベース構成変更ユティリティ(pdmod)のinitialize rdarea文でRDエリアを再初期化してください。

(6) 一時表用RDエリア使用上の留意事項

(a) 制限事項

一時表用RDエリアに対して,次に示す運用コマンド又はユティリティを実行する場合,一部制限があります。詳細は,マニュアル「HiRDB Version 9 コマンドリファレンス」を参照してください。

  • pdholdコマンド

  • pdrdreflsコマンド

  • データベース複写ユティリティ(pdcopy)

  • データベース状態解析ユティリティ(pddbst)

  • データベース構成変更ユティリティ(pdmod)

    RDエリアの移動はできません。

  • データベース回復ユティリティ(pdrstr)

(b) 特定SQLセッション占有属性の一時表用RDエリアを使用する場合

特定SQLセッション占有属性の一時表用RDエリアを使用するSQLセッションは,クライアント環境定義PDTMPTBLRDAREAに該当する一時表用RDエリアを指定しているSQLセッションだけです。該当する一時表用RDエリアを,さらに占有する(ほかのSQLセッションで使用できないようにする)には,ローカルバッファを割り当ててください。これによって,該当する一時表用RDエリアに排他モード(EX)の排他が掛かります。

(c) 非FIXの一時表を作成する場合

非FIXの一時表を作成する場合,一時表用RDエリアは次のどちらかの条件を満たしている必要があります。条件を満たしていない場合,データを格納するときにKFPA11809-Iメッセージが出力されることがあります。

  • クライアント環境定義のPDTMPTBLRDAREAを指定している場合

    PDTMPTBLRDAREAに指定しているすべての一時表用RDエリアの定義に,同じページ長を定義している。

  • クライアント環境変数のPDTMPTBLRDAREAを指定していない場合

    すべてのSQLセッション間共有属性の一時表用RDエリアの定義に,同じページ長を定義している。

    注※

    ページ長は,基本行長より大きい値となります。基本行長については,マニュアル「HiRDB Version 9 SQLリファレンス」の「既定義型データ長一覧」のデータ長の計算式を基に算出してください。KFPA11809-Iメッセージが出力された場合は,KFPA11809-Iメッセージの「格納しようとした行長」より大きい値を指定してください。

(d) HiRDB Datareplicatorと連携する場合

一時表に対する更新は抽出対象外になります。そのため,HiRDB Datareplicatorを使用する場合,一時表について考慮する点は特にありません。