スケーラブルデータベースサーバ HiRDB Version 8 システム導入・設計ガイド(UNIX(R)用)

[目次][索引][前へ][次へ]

付録C Q&A

HiRDBシステムの構築に関する事例をQ&A形式でまとめています。

次に示す項目について記載しています。

記載内容 参照箇所
HiRDB/Developer's Kitに関する質問 (1)
データベース定義ユティリティ(pddef)の実行に関する質問 (2)
データベースの最大容量に関する質問 (3)
OpenTP1とのXAインタフェースに関する質問 (4)
FIX表の性能に関する質問 (5)
重複キーインデクスに関する質問 (6)
インデクスの使用方法に関する質問 (7)
横分割表のインデクス定義に関する質問 (8)
pdsetup -dコマンドに対する応答に関する質問 (9)
シンクポイントダンプの運用に関する質問 (10)
ステータスファイルの運用に関する質問 (11)〜(14)
作業表用HiRDBファイルシステム領域の最大使用量に関する質問 (15)
pdstartコマンドでHiRDBが開始しない場合 (16)
pdstartコマンドで特定のユニットが開始しない場合 (17)
pdstartコマンドでHiRDBの開始が遅い場合 (18)
pdstartコマンドがエラーリターンする場合(reason code=SETUP) (19)
pdstartコマンドがエラーリターンする場合(reason code= TIMEOUT) (20)
pdstartコマンドでユニットが開始できない場合 (21)
データベース定義ユティリティ(pddef)がエラーになる場合 (22)
CREATE TABLE文のLOB列定義に関する質問 (23)
ウィルス対策ソフトに関する質問 (24)
<この節の構成>
(1) HiRDB/Developer's Kitに関する質問
(2) データベース定義ユティリティ(pddef)の実行に関する質問
(3) データベースの最大容量に関する質問
(4) OpenTP1とのXAインタフェースに関する質問
(5) FIX表の性能に関する質問
(6) 重複キーインデクスに関する質問
(7) インデクスの使用方法に関する質問
(8) 横分割表のインデクス定義に関する質問
(9) pdsetup -dコマンドに対する応答に関する質問
(10) シンクポイントダンプの運用に関する質問
(11) ステータスファイルの運用に関する質問(ステータスファイルの二重化)
(12) ステータスファイルの運用に関する質問(障害発生時)
(13) ステータスファイルの運用に関する質問(ステータスファイルの定義)
(14) ステータスファイルの運用に関する質問(ステータスファイルの配置)
(15) 作業表用HiRDBファイルシステム領域の最大使用量に関する質問
(16) pdstartコマンドでHiRDBが開始しない場合
(17) pdstartコマンドで特定のユニットが開始しない場合
(18) pdstartコマンドでHiRDBの開始が遅い場合
(19) pdstartコマンドがエラーリターンする場合(reason code=SETUP)
(20) pdstartコマンドがエラーリターンする場合(reason code= TIMEOUT)
(21) pdstartコマンドでユニットが開始できない場合
(22) データベース定義ユティリティ(pddef)がエラーになる場合
(23) CREATE TABLE文のLOB列定義に関する質問
(24) ウィルス対策ソフトに関する質問

(1) HiRDB/Developer's Kitに関する質問

質問
HiRDB/Developer's Kitはどのようなときに必要ですか?

お答えします
HiRDBサーバがあるマシンでUAPを作成する場合は,HiRDBサーバにHiRDB/Developer's Kitの機能が含まれているので必要ありません。HiRDBサーバがあるマシンとは別のマシンでUAPを開発する場合に必要です。
また,HiRDBサーバと異なるプラットフォームのUAPを作成する場合にも必要です。

(2) データベース定義ユティリティ(pddef)の実行に関する質問

質問
データベース定義ユティリティ(pddef)でCREATE TABLEを実行したのですが,何も実行されませんでした。なぜですか?

お答えします
pddefの制御文でセミコロン(;)の後ろに空白が入っていませんか?空白が入っていると,そのSQL文は実行されません(この例では,CREATE TABLE以降の指定は省略しています)。
(誤)CREATE TABLE ;△ △:空白
(正)CREATE TABLE ;

(3) データベースの最大容量に関する質問

質問
HiRDBのデータベースの最大容量はどのくらいですか?

お答えします
一つの表は最大512個のRDエリアに分割格納でき,一つのRDエリアは最大16個のHiRDBファイルで構成できます。
一つのHiRDBファイルは最大約2ギガバイトなので,次のようになります。
 512×16×2=約16テラバイトです。
また,RDエリアは最大1600万個使用できるため,データベース総容量は次のようになります。
 1600万×16×2=約512ペタバイト
なお,HiRDBではラージファイルをサポートしています。ラージファイルを使用すると,一つのHiRDBファイルの最大容量が64ギガバイトになるため,データベースの最大容量もより大きくなります。

(4) OpenTP1とのXAインタフェースに関する質問

質問
OpenTP1とHiRDBの連携時,参照するだけのSQLであれば,そのトランザクションのコミットはXAインタフェースを通らないように思えますが,どうでしょうか?

お答えします
参照するだけのSQLであっても,コミット時には必ずXAインタフェースを経由してHiRDBに処理が渡されます。ただし,更新SQLがあるときのコミットに比べると,走行するステップ数が少なくなります。

(5) FIX表の性能に関する質問

質問
FIX表とそうでない表(非FIX表)の性能差はどれくらいありますか?

お答えします
操作対象列数や操作対象行数によって性能差は変わるため一概には言えませんが,1列の大量更新でFIX指定をした場合の実行時間が,FIX指定をしなかった場合に比べ,約2/3になった事例があります。
FIX指定の方が性能劣化しないため,次に示す条件を満たす場合はFIX指定にしてください。
  • 可変長の列がない
  • NULL値を持つ列がない
  • 列を追加しない

(6) 重複キーインデクスに関する質問

質問
重複したキーに対してもインデクスを定義できますか?
定義できるなら,それによって何か困ることが生じるのでしょうか?

お答えします
インデクスは定義できます(非UNIQUE属性)。ただし,大量の重複キー(201件以上)があるインデクスは特殊な格納構造になってアクセスするインデクスページが増えるため,性能上好ましくありません。

(7) インデクスの使用方法に関する質問

質問
DBPARTNER2からHiRDBをアクセスする形態で,ある表にインデクスを定義したとき,そのことをDBPARTNER2側で意識する必要がありますか?

お答えします
ありません。DBPARTNER2であっても通常のクライアントUAPであってもHiRDBから見ると同じ扱いになります。

(8) 横分割表のインデクス定義に関する質問

質問
サーバマシン間に分割された表に対してインデクスを定義する場合,どのようにインデクスを配置すればよいですか?

お答えします
次のように分割表単位にインデクスも分割してください。
[図データ]

(9) pdsetup -dコマンドに対する応答に関する質問

質問
pdsetup -dコマンドを入力するとKFPS00036-Qメッセージが出力され,応答を要求してきましたがyとnのどちらを応答したらよいですか?

お答えします
yを応答した場合,HiRDBの実行に必要なファイル及びディレクトリを削除します。その場合,次回pdsetupコマンドを実行したときに,実行に必要なファイルをインストールディレクトリからコピーします。nを応答した場合は,ファイル及びディレクトリは削除しません。
次のような場合にyを応答してください。
  • 現在運用しているHiRDBをインストールしたHiRDBに入れ替える場合(HiRDBをバージョンアップする場合はpdstopコマンドで正常終了する必要があります)
  • HiRDB管理者用の認可識別子を変更する場合
  • HiRDB運用ディレクトリ下のファイル,ディレクトリの所有者,又はファイルモードを誤って変更したり,削除したりした場合

備考
yを応答すると,HiRDB運用ディレクトリとインストールディレクトリが異なる場合,HiRDB運用ディレクトリ下のロード一式を削除します。そして次回のpdsetupコマンド実行でロード一式をインストールディレクトリからコピーすることになります。このためコマンド実行に多少の時間が掛かります。

(10) シンクポイントダンプの運用に関する質問

質問
シンクポイントダンプファイルの有効保証世代数とはどのようなことですか?

お答えします
シンクポイントダンプファイルには,全面回復処理に備えてシステムログファイルをどの位置から読み始めればよいかなどの情報をシンクポイントごとに取得します。シンクポイントダンプファイルに格納されている位置情報が示すシステムログファイル以降のシステムログファイルは,全面回復処理で使用する可能性があるため,上書き禁止状態にして保護しています。
有効保証世代数とは,「シンクポイントダンプファイルの何世代分の位置からシステムログファイルを上書き禁止にして保護するか」ということです。つまり,有効保証世代数が1の場合は,最新のシンクポイントダンプファイルが示すシステムログファイル以降が上書き禁止状態になります。有効保証世代数が2の場合は,最新のシンクポイントダンプファイルの1世代前のシンクポイントダンプファイルが示すシステムログファイル以降が上書き禁止状態になります。

(11) ステータスファイルの運用に関する質問(ステータスファイルの二重化)

質問
ステータスファイルの二重化のペアはどのように構成するのですか?
次のように論理ファイル1のA系と論理ファイル2のB系が障害の場合,論理ファイル2のA系と論理ファイル1のB系でペアを組むことはありますか?
[図データ]

お答えします
異なる論理ファイル間でペアを組むことはありません。A系,B系が両方とも正常な論理ファイルにスワップします。A系,B系の両方とも正常な論理ファイルが一つもない場合は,pd_sts_singleoperationオペランドの指定に従ってユニットを異常終了するか,又は片系運転で処理を続行します。

(12) ステータスファイルの運用に関する質問(障害発生時)

質問
A系,B系の両方とも正常な論理ファイルが一つもない(A系,B系のどちらかが障害)場合の処理方式を決める次に示すオペランドがあります。
  • pd_syssts_singleoperation = stop | continue(ユニット用ステータスファイルの場合)
  • pd_sts_singleoperation = stop | continue(サーバ用ステータスファイルの場合)
stopとcontinue,どちらを指定すればよいですか?

お答えします
stopを指定すると,HiRDB(HiRDB/パラレルサーバの場合はユニット)が異常終了します。continueを指定すると,ステータスファイルを片系運転します。
ステータスファイルは,全面回復処理のための情報を記録している重要なファイルです。continueを指定して片系運転中にステータスファイルが障害になると,両系障害でユニットが異常終了します。そして,現用ファイルが両系ともアクセスできないため,全面回復処理ができなくなります。したがって,次のような考え方で判断してください。
  • HiRDBの異常終了よりも,全面回復処理の保証を重視する場合はstopを指定します。
  • とにかくHiRDBを途中で停止したくない(最悪の場合,全面回復処理はあきらめ,データベースをバックアップ時点まで戻したりデータロードし直す)場合はcontinueを指定します。

(13) ステータスファイルの運用に関する質問(ステータスファイルの定義)

質問
論理ステータスファイルは1〜7個定義できますが,ディスクに余裕がありません。どの程度用意するのが現実的ですか?

お答えします
ディスクを障害回復して再使用可能になるまでの安全性を考えると,論理ステータスファイルは三つ(二重化×3=6ファイル)以上用意することをお勧めします。
ディスクに余裕がなければ,論理ステータスファイルは二つ(二重化×2=4物理ファイル)が妥当です。この場合,障害発生時には速やかにステータスファイルを回復してください。
論理ステータスファイルを一つしか用意しないと,ステータスファイルの障害発生時にデータベースをバックアップから回復する必要があります。

(14) ステータスファイルの運用に関する質問(ステータスファイルの配置)

質問
ステータスファイルはどのようにディスクに配置すればよいですか?

お答えします
基本は,複数の物理ステータスファイルを同じディスクに配置しないことです。同じディスクに配置すると,二重化や論理ファイルの複数化の意味がなくなります。つまり,論理ファイルを二つ定義している場合は四つのディスクに分散配置し,論理ファイルを三つ定義している場合は六つのディスクに分散配置します。
なお,次のように,物理ステータスファイルをリング状に配置すると,少ないディスク数で信頼性を確保できます。

論理ファイル数6の場合の配置例
[図データ]
このように配置すると,1ボリュームに障害が発生しても,2世代の両系ファイルが無事のままです。

(15) 作業表用HiRDBファイルシステム領域の最大使用量に関する質問

質問
作業表用ファイルを作成するHiRDBファイルシステム領域(バックエンドサーバ定義のpdworkオペランド)の最大使用量,最大使用ファイル数,最大使用増分回数を知りたいのですが,手段がありますか?

お答えします
pdfstatfsコマンドで取得できます。
pdfstatfs -d 作業表用HiRDBファイルシステム領域名
「-d」は,HiRDBファイルシステム領域に割り当てた領域の最大使用量,最大使用ファイル数,最大使用増分回数を表示するオプションです。出力の「peak capacity」が最大使用量,「peak file count」が最大使用ファイル数,「peak expand count」が最大使用増分回数です。
なお,上記の最大使用量は,pdfstatfsコマンドでクリアできます。
pdfstatfs -c 作業表用HiRDBファイルシステム領域名
「-c」は,HiRDBファイルシステム領域に割り当てた領域の最大使用量,最大使用ファイル数,最大使用増分回数を0にするオプションです。

注意事項
pdfstatfsコマンドの「-c」オプションは,HiRDBファイルシステム領域の使用目的が「WORK」又は「UTL」の場合に有効です。
なお,HiRDBファイルシステム領域の使用目的は,pdfmkfsコマンドの-kオプションで指定します。

(16) pdstartコマンドでHiRDBが開始しない場合

質問
pdstartコマンドでHiRDBが開始しないで,Psp4017で-prcがアボートしてしまうのはなぜですか?

お答えします
次に示す原因が考えられます。
  • HiRDBが正しくセットアップされていない
  • /dev/HiRDB/pthディレクトリにアクセス権限がないか又は存在しない
HiRDBを正しくセットアップし直してください。セットアップした後,/dev/HiRDB/pthのアクセス権限を再確認してください。

(17) pdstartコマンドで特定のユニットが開始しない場合

質問
pdstartコマンドを実行しましたが,システムマネジャ以外のユニットが開始しないのはなぜですか?
システムマネジャ以外のユニットでOSのpsコマンドを実行すると,pdprcdしかありません(HiRDBのほかのプロセスが起動されていません)。

お答えします
開始できなかったユニットのシステム共通定義を確認してください。pdunit又はpdstartオペランドの指定値が,システムマネジャがあるユニットのシステム共通定義と一致していない可能性があります。
開始できなかったユニットのシステム共通定義を修正した後に,pdstart -uコマンドでユニットを再開始してください。

(18) pdstartコマンドでHiRDBの開始が遅い場合

質問
pdstartコマンドを入力して,コマンドがKFPS05078-I Unable to recognize HiRDB initialization Completionで終了しましたが,すべてのユニットの開始に時間が掛かるのはなぜですか?
1時間〜2時間ぐらいで開始しました。

お答えします
  1. KFPS00608-W(-314)メッセージが複数出力されている場合は,すべてのユニットのシステム共通定義を確認してください。pdunit及びpdstartオペランドで指定したホスト名がすべて一致しているか,正しいホスト(存在するホスト)名が指定されているかを確認してください。
  2. HiRDBで指定したホスト,ネットワークがすべて開始完了(稼働中)になっているかを確認してください。

(19) pdstartコマンドがエラーリターンする場合reason code=SETUP

質問
pdstartコマンドがKFPS01801-Eメッセージ(reason code=SETUP)を出力してエラーリターンしてしまいます。なぜですか?

お答えします
次に示す原因が考えられます。
  1. 環境変数PDDIRに設定したHiRDB運用ディレクトリをpdsetupコマンドでOSに登録していない
  2. 前提になる製品がインストールされていない
  3. カーネルのセマフォ不足によってプロセスサーバプロセスが起動できない
次に示す対策をしてください。
  1. HiRDB運用ディレクトリをpdsetupコマンドでOSに登録してください。
  2. 前提製品をインストールしてください。
  3. システムで定義するセマフォの使用数を大きくしてください。この場合,リブートしないとその値は有効にならないので注意してください。

(20) pdstartコマンドがエラーリターンする場合reason code= TIMEOUT

質問
pdstartコマンドがKFPS01861-Eメッセージ(reason code=TIMEOUT)を出力してエラーリターンしてしまいます。なぜですか?

お答えします
次に示す原因が考えられます。
  1. ユニット開始に予想以上に時間が掛かってしまった
  2. サーバ共通定義又は各サーバ定義の指定に誤りがある
次に示す対策をしてください。
  1. pd_start_time_outオペランドの指定値を大きくしてから,pdstartコマンドを再入力してください。
  2. syslogfileに出力されているHiRDBのメッセージを参照して,誤っている定義を修正してください。その後,pdsetup -dコマンドでKFPS00036-Q応答メッセージにyを応答し,HiRDBをOSから削除し,再度pdsetupコマンドを実行してください。

(21) pdstartコマンドでユニットが開始できない場合

質問
pdstartを実行したところ,セマフォ操作(semop,semctl)に失敗したことを示すメッセージKFPS01815-E(errno=11,13,22)が出力されてユニットが開始できません。なぜですか?

お答えします
次に示す原因が考えられます。
  1. HiRDBをそのマシンにインストールしていない
  2. pdsetupコマンドでHiRDBをOSに登録していない
  3. インストールディレクトリを共有ディスク上に配置している
次に示す対策をしてください。
  1. そのマシンを再起動した後にpdsetup -dコマンドでHIRDBをOSから削除してください。その後,pdsetupコマンドを再実行してください。
  2. HiRDBをそのマシンにインストールしている場合は,pdsetupコマンドを実行してください。
  3. インストールディレクトリは自ノードのローカルディスクに置いてください。

備考
HiRDBをインストールしないで,ほかの環境のロードをコピーして使用できません。

(22) データベース定義ユティリティ(pddef)がエラーになる場合

質問
データベース初期設定ユティリティ(pdinit)は実行できましたが,データベース定義ユティリティ(pddef)がエラーになって実行できません。どんな原因が考えられますか?

お答えします
次に示す原因が考えられます。
  • 応答なしや接続エラーになる場合は,環境変数の設定漏れが考えられます。
    PDHOST,PDNAMEPORTの設定値を確認してください。
PDHOST:
HiRDBサーバがあるホスト名を指定します。システム共通定義のpdstartオペランドに指定したホスト名を指定します。
PDNAMEPORT:
システム共通定義のpd_name_portオペランドに指定したポート番号を指定します。
  • コネクトエラーとなる場合,環境変数PDUSERの設定値の不正が考えられます。
    pdinitの実行直後は,DBA権限を持つ認可識別子が一つだけ存在します。認可識別子及びパスワードを次のように環境変数PDUSERに指定してください。
Bourneシェルの場合:
PDUSER='"認可識別子"/"パスワード"'
export PDUSER
Cシェルの場合:
setenv PDUSER '"認可識別子"/"パスワード"'

注意事項
  1. pdinit実行直後の認可識別子とパスワードについては,マニュアル「HiRDB Version 8 コマンドリファレンス」の「データベース初期設定ユティリティ(pdinit)」の「オプション」を参照してください。
  2. 環境変数PDUSERを設定するときは,認可識別子とパスワードを引用符で囲み,その外側をアポストロフィで囲んでください。これは,ほかのHiRDBのユティリティを実行する場合や,UAPを実行する場合も同じです。

(23) CREATE TABLE文のLOB列定義に関する質問

質問
CREATE TABLE文の列定義で,LOB列の最大長を指定した場合(例:300メガバイト)と指定しなかった場合(省略値2ギガバイト)では,HiRDBサーバとHiRDBクライアントのメモリ所要量やデータ転送量にどのような違いがありますか?

お答えします
LOB列の最大長を指定しても指定しなくても,メモリ所要量やデータ転送量は同じです。LOB列の検索又は更新時に使用するメモリ所要量やデータ転送量は,列定義の最大長ではなく,検索又は更新時の実長と埋込み変数の定義長に依存します。なお,格納するバイナリデータサイズを制限したい場合は,LOB列の最大長で制限できます。

(24) ウィルス対策ソフトに関する質問

質問
ウィルス対策ソフトをインストールしたところ,UAPがHiRDBに接続できなくなりました。ウィルス対策ソフトのファイアウォールが原因のようです。ファイアウォールの除外リストに,どのポート番号を除外指定すればよいでしょうか?

お答えします
25.5.1 HiRDBで指定するポート番号の一覧」にHiRDBで使用するポート番号の一覧があります。この一覧の中で,次に示すポート番号を除外指定してください。
なお,ファイアウォールを設置した場所によって,除外指定するポート番号が異なります。
●HiRDBサーバ側にファイアウォールを設置した場合
システム共通定義及びユニット制御情報定義で指定する次に示すポート番号を除外指定してください。
  • HiRDBのポート番号
  • スケジューラプロセスのポート番号
これらのポート番号を指定するオペランドを指定していない場合は,オペランドを指定して,除外指定してください。
●クライアント側にファイアウォールを設置した場合
クライアント環境定義で指定する次に示すポート番号を除外指定してください。
  • クライアントの受信ポート番号
このポート番号を指定するクライアント環境定義を指定していない場合は,クライアント環境定義を指定して,除外指定してください。