アプリケーション実行時に発生したトラブルの事例、およびその対処方法について説明します。
動作環境ファイルに動作環境パラメタを指定しても、指定したパラメタが有効にならない場合がある
例)システム用の動作環境ファイルに行ロックの指定“R_LOCK=(YES)”を指定したが、有効にならない。
Symfoware/RDBの動作環境を指定する要素には、以下の4種類があります。
環境変数
サーバ用の動作環境ファイル
クライアント用の動作環境ファイル
システム用の動作環境ファイル
これらのうち、動作環境ファイルは、その種類(サーバ用、クライアント用、システム用)により、作成方法が異なります。パラメタを指定している動作環境ファイルが正しく作成されているかどうかについて確認してください。
各動作環境ファイルの作成方法については“動作環境ファイルについて”を参照してください。
動作環境パラメタには、Symfoware/RDBの環境変数でも同等の内容を指定できるものがあります。環境変数と動作環境パラメタを両方指定した場合、環境変数の指定が優先されます。環境変数が指定されていないかどうかについて確認してください。
参照
Symfoware/RDBの環境変数については、“アプリケーション開発ガイド(埋込みSQL編)”を参照してください。
動作環境パラメタには、複数の動作環境ファイル(サーバ用、クライアント用、システム用)で指定できるものがあります。複数の動作環境ファイルで指定した場合、ほかの動作環境ファイルの指定が優先されてしまう場合があります。
複数の動作環境ファイルで指定した場合の優先順位は以下のとおりです。優先順位が高いほかの動作環境ファイルに、同じ動作環境パラメタが指定されていないかどうかを確認してください。
サーバ用の動作環境ファイル
クライアント用の動作環境ファイル
システム用の動作環境ファイル
参照
複数の動作環境ファイルで指定できる動作環境パラメタについては、“アプリケーション開発ガイド(共通編)”を参照してください。
ポイント
用途:
データベース環境に固有の動作環境を設定する場合に作成します。クライアント用の動作環境ファイル中で、コネクションに対応するサーバ用の動作環境ファイルを指定することによって、コネクション(データベース環境)ごとに動作環境を変更できます。
影響範囲:
現コネクションの間
作成方法:
任意の名前で作成し、クライアント用の動作環境ファイルのSERVER_ENV_FILEパラメタに絶対パスで指定します。
用途:
アプリケーションごとに動作環境を変更する場合に作成します。リモートアクセスを行うためのSERVER_SPECパラメタは、クライアント用の動作環境ファイルに指定するため、リモートアクセスを行う場合には必ず作成する必要があります。
影響範囲:
アプリケーションを実行している間
作成方法:
以下のどちらかの場所に作成します。
ファイル名は必ず以下のように指定します。
Solaris/Linuxの場合
fssqlenvc
Windowsの場合
SQLRT.ENV
ファイル名は任意です。ファイル名を絶対パスで指定します。
用途:
1つのSymfoware/RDBシステムで標準となる動作環境を設定する場合に作成します。
影響範囲:
Symfoware/RDBシステムの起動から停止までの間
作成方法:
/opt/FSUNrdb2b/etc/fssqlenvファイルを複写し、作成したテキストファイルに定義します。このファイル名を、対象のSymfoware/RDBシステムのRDB構成パラメタファイルのRDBSQLENVパラメタで指定します。
なお、RDBシステム名をつけない運用の場合は、/opt/FSUNrdb2b/etc/fssqlenvファイルに定義します。
/opt/FJSVrdb2b/etc/fssqlenvファイルを複写し、作成したテキストファイルに定義します。このファイル名を、対象のSymfoware/RDBシステムのRDB構成パラメタファイルのRDBSQLENVパラメタで指定します。
なお、RDBシステム名をつけない運用の場合は、/opt/FJSVrdb2b/etc/fssqlenvファイルに定義します。
RDBの制御ファイルがインストールされているディレクトリ\RDB\ETC\UXPSQLENV(C:\SFWETC\RDB\ETC\UXPSQLENV)ファイルを複写し、作成したテキストファイルに定義します。このファイル名を、対象のSymfoware/RDBシステムのRDB構成パラメタファイルのRDBSQLENVパラメタで指定します。
なお、RDBシステム名をつけない運用の場合は、RDBの制御ファイルがインストールされているディレクトリ\RDB\ETC\UXPSQLENV(C:\SFWETC\RDB\ETC\UXPSQLENV)ファイルに定義します。
次のエラーが出力された場合、対処としてRDB構成パラメタファイルのRDBEXTMEMで指定する値を大きくする必要があります。
qdg12216u: 共用メモリ不足が発生しました qdg03026u: XXXXコマンド処理中に共用メモリ不足が発生しました JYP5035E 共用メモリが不足しました. JYP5116E 共用メモリが不足しました.
Solarisの場合
同時にカーネル編集パラメタ“shmsys:shminfo_shmmax”をRDBEXTMEMの値に応じて再度見積もりし、必要に応じて設定しなおしてください。
Linuxの場合
同時にカーネル編集パラメタ“kernel.shmmax”をRDBEXTMEMの値に応じて再度見積もりし、必要に応じて設定しなおしてください。
参照
詳細は、“セットアップガイド”の“カーネル編集”を参照してください。
アプリケーション実行時に、以下のようなエラーメッセージが出力される場合があります。
JYP5017E データベースにアクセス中に共用バッファの枯渇が発生しました.
この現象は、多数のアプリケーションから、同時に異なるデータを参照したり更新したりしたために発生します。このような現象が発生する場合には、共用バッファプールのページ数を増やす、資源ごとに別のバッファプールを用意する、あるいは危険値を下げるなどの対応が必要です。
以下の手順で、枯渇した共用バッファのページ数を増やしてください。
rdbsarコマンドのbオプション、およびeオプションを実行して、枯渇した共用バッファのバッファプール名を確認してください。
なお、出力結果中の“DryUp”が、各バッファプールの枯渇回数になります。
枯渇したバッファプールがデフォルトバッファの場合は、以下のファイルを編集してページ数を増やしてください。なお、RDBSYSBUFパラメタを指定している場合は、RDBSYSBUFパラメタに指定しているディレクトリ配下のrdbbufファイルを編集してください。
/opt/FSUNrdb2b/etc配下のrdbbufファイル
枯渇したバッファプールがデフォルトバッファ以外の場合は、rdbdisbfコマンド、rdbcrbfコマンドおよびrdbconbfコマンドを実行してページ数を増やしてください。
参照
rdbbufファイルについての詳細は、“セットアップガイド”の“RDB構成パラメタファイルによる定義”を参照してください。
また、rdbdisbfコマンド、rdbcrbfコマンド、およびrdbconbfコマンドについての詳細は、“コマンドリファレンス”を参照してください。
アプリケーション実行時に、以下のようなエラーメッセージが出力される場合があります。
JYP5017E データベースにアクセス中に共用バッファの枯渇が発生しました.
この現象は、多数のアプリケーションから、同時に異なるデータを参照したり更新したりしたために発生します。このような現象が発生する場合には、共用バッファプールのページ数を増やす、資源ごとに別のバッファプールを用意する、あるいは危険値を下げるなどの対応が必要です。
以下の手順で、枯渇した共用バッファのページ数を増やしてください。
rdbsarコマンドのbオプション、およびeオプションを実行して、枯渇した共用バッファのバッファプール名を確認してください。
なお、出力結果中の“DryUp”が、各バッファプールの枯渇回数になります。
枯渇したバッファプールがデフォルトバッファの場合は、以下のファイルを編集してページ数を増やしてください。なお、RDBSYSBUFパラメタを指定している場合は、RDBSYSBUFパラメタに指定しているディレクトリ配下のrdbbufファイルを編集してください。
/opt/FJSVrdb2b/etc/配下のrdbbufファイル
枯渇したバッファプールがデフォルトバッファ以外の場合は、rdbdisbfコマンド、rdbcrbfコマンドおよびrdbconbfコマンドを実行してページ数を増やしてください。
参照
rdbbufファイルについての詳細は、“セットアップガイド”の“RDB構成パラメタファイルによる定義”を参照してください。
また、rdbdisbfコマンド、rdbcrbfコマンド、およびrdbconbfコマンドについての詳細は、“コマンドリファレンス”を参照してください。
アプリケーション実行時に、以下のようなエラーメッセージが出力される場合があります。
JYP5017E データベースにアクセス中に共用バッファの枯渇が発生しました.
この現象は、多数のアプリケーションから、同時に異なるデータを参照したり更新したりしたために発生します。このような現象が発生する場合には、共用バッファプールのページ数を増やす、資源ごとに別のバッファプールを用意する、あるいは危険値を下げるなどの対応が必要です。
以下の手順で、枯渇した共用バッファのページ数を増やしてください。
rdbsarコマンドのbオプション、およびeオプションを実行して、枯渇した共用バッファのバッファプール名を確認してください。
なお、出力結果中の“DryUp”が、各バッファプールの枯渇回数になります。
枯渇したバッファプールがデフォルトバッファの場合は、以下のファイルを編集してページ数を増やしてください。なお、RDBSYSBUFパラメタを指定している場合は、RDBSYSBUFパラメタに指定しているディレクトリ配下のrdbbufファイルを編集してください。
RDBの制御ファイルがインストールされているディレクトリ\RDB\ETC(C:\SFWETC\RDB\ETC)配下のRDBBUFファイル
枯渇したバッファプールがデフォルトバッファ以外の場合は、rdbdisbfコマンド、rdbcrbfコマンドおよびrdbconbfコマンドを実行してページ数を増やしてください。
参照
rdbbufファイルについての詳細は、“セットアップガイド”の“RDB構成パラメタファイルによる定義”を参照してください。
また、rdbdisbfコマンド、rdbcrbfコマンド、およびrdbconbfコマンドについての詳細は、“コマンドリファレンス”を参照してください。
次のエラーが出力された場合、以下の対処を行ってください。
JYP5007E RDBIIサーバ空間内のメモリ不足が発生しました. JYP5107E RDBIIサーバ空間内のメモリ不足が発生しました. qdg12102u: RDBII空間内ローカルメモリ不足が発生しました qdg12693u: RDBII空間内ローカルメモリ不足が発生しました
Solarisの場合
このエラーは、RDBIIサーバ空間内、データ・セグメント空間の拡張失敗時に発生します。
Linuxの場合
このエラーは、RDBIIサーバ空間内、データ・セグメント空間の拡張失敗時に発生します。
free(1)コマンドで、空きのスワップスペースが充分かどうか確認してください。
空きが不足している場合は、スワップスペースの追加が必要です。
Windowsの場合
テンポラリログファイルの空き領域が不足した
テンポラリログファイルの空き領域が不足すると、以下のようなエラーメッセージが出力されます。
JYP5004E テンポラリログ域の領域が不足しました. qdg12826u: テンポラリログファイルの領域が不足しました qdg14221w: テンポラリログファイルの’BI’ログ域が満杯となりました 使用状況をファイル’/var/core/Symfo_RDBSYS1_templogshort_002.txt’に出力しました
以下の手順でテンポラリログファイルの空き領域の不足を解消してください。
メッセージqdg14221wが示すファイルを参照し、予期しない処理が動作していないかを確認します。
予期しない処理が動作している場合は、それを終了させます。
予期しない処理が動作していない場合には、テンポラリログファイルの容量が不足しています。テンポラリログファイルの見積りを行い、テンポラリログファイルの容量を拡張してください。
参照
テンポラリログファイルの見積りについては、“セットアップガイド”の“テンポラリログファイルの見積り式”を参照してください。
テンポラリログファイルの容量拡張については、“RDB運用ガイド”の“テンポラリログファイルの変更”を参照してください。
必要な対処を終えたら、メッセージqdg14221wが示すファイルを削除してください。
テンポラリログファイルの使用状況を出力したファイルの例と、その内容を以下に示します。
BI log area of the temporary log file has become full at 2008/06/09 17:02:09. …(1) Log group name = loggrp1 … (2) The whole size is 1024.000 MB, the remaining space size is 0.000 MB. The following transaction(s) are using the head of the used log space. ... (3) You can produce free space by terminating them. ... (3) 4f12abcd:00000007 ... (3) 4f12abcd:0000001a ... (3) [Transactions] Transaction ID,Module Name,Process ID,Session ID,User,Client Info,Module Info,Action Info,Idle Time(sec),BI Log Bytes Used,AI Log Bytes Used,BI First LSN,BI Last LSN,RDB System Name 4f12abcd:00000007,"rdbexecsql/CONN1",12345,,"rdbadmin",””,"","",3605,456,788,00000001:00000003:00001a2d:00000648,00000001:00000003:00002b38:00000a24, 4f12abcd:0000001a,"192.168.1.2/SALES_DB",8765,,"appuser",””,"","",0,826,796,00000001:00000003:00001b3c:00000712,00000001:00000003:00002c46:00000b42,""
使用量がしきい値を超えた場合、(1)には以下のような内容が出力されます。
The used space of BI log area has exceeded 85%.
AIログ域については“BI log”の部分が“AI log”となります。
(2)は、事象が起きたロググループ名を示します。スケーラブルログ運用を行っている場合のみ出力されます。
(3)には、使用中BIログ域の先頭部分を使用しているトランザクションが3つまで出力されます。これらが不要なトランザクションであれば、終了させることで空き領域を増やすことができます。
(3)はBIログ域の場合のみ出力されます。
予期しない処理を特定するには、“[Transactions]”セクションを参照します。このセクションは、実行中の更新トランザクションをCSV形式で表示しています。スプレッドシートなどでこの一覧をソートすることにより、分析がしやすくなります。
以下に“[Transactions]”セクションの項目と意味を示します。
項目 | 意味 | 備考 |
---|---|---|
Transaction ID | トランザクション識別子 | この項目で昇順にソートすることにより、実行を開始した順にトランザクションを並べることができる。 |
Module Name | モジュール名 | アプリケーションのロードモジュール名やコネクション名、IPアドレスなど。rdbpsやrdbcninfが表示するものと同じ。ただし、すでにコネクションが切断されているトランザクションやSymfoware/RDBが内部で実効するトランザクションについては<Disconnected Session>となる。 |
Process ID | アプリケーションやコマンドのプロセスID |
|
Session ID | アプリケーションのセションID |
|
User | アプリケーションやコマンドの実行ユーザ名 |
|
Client Info | クライアント情報 | rdbpsが表示するものと同じ。 |
Module Info | モジュール情報 | rdbpsが表示するものと同じ。 |
Action Info | アクション情報 | rdbpsが表示するものと同じ。 |
Idle Time(sec) | アイドル時間(秒) | アプリケーションからの次のSQL文を待機している時間。ロードシェア運用の場合、他ノードのRDBシステムからのリモートアクセスでは常にゼロ。 |
BI Log Bytes Used | トランザクションでのBIログ域の使用量(バイト) |
|
AI Log Bytes Used | トランザクションでのAIログ域の使用量(バイト) |
|
BI First LSN | トランザクションの最初のBIログレコードの通番 | この項目でソートすることにより、更新処理を始めた順(BIログ域を使用し始めた順)にトランザクションを並べることができる。並べ替えた一覧の先頭に現れるトランザクションが、テンポラリログファイルの循環使用を直接止めている。ログをまだ収集していない場合、この列は空欄となる。 |
BI Last LSN | トランザクションの最後のBIログレコードの通番 | ログをまだ収集していない場合、この列は空欄となる。 |
RDB System Name | アプリケーションが接続したRDBシステム名 | ロードシェア運用において、リモートアクセス先で動作するトランザクションの場合のみ出力される。 |
以下のような観点でこのセクションを調査してください。
終了し忘れたトランザクションがないか
テンポラリログファイルは先頭から末尾に向かって順番に使われ、末尾に達すると循環して再び先頭から使われます。このため、たとえ動作しているトランザクションが1つだけであり、それが使用している領域がわずかだとしても、空き領域を利用できないことがあります。
このような事態を解消するには、ファイルの循環使用を妨げているトランザクションを終了させる必要があります。“Idle Time(sec)”の値が大きいトランザクションは、終了させるのを忘れたトランザクションである可能性があります。
その時間帯に実行されるはずのないアプリケーションが動作していないか
実行中の処理は“Module Name”や“Client Info”、“Module Info”、“Action Info”からわかります。
なお、空き領域が少なくなってきたときにも同様のレポートが生成されます。その場合、以下のメッセージが出力されるので、上記と同じ処置をすることで、空き領域が不足するのを事前に防ぐことができます。
qdg14220w:テンポラリログファイルの’BI’ログ域の使用量が85%に達しました 使用状況をファイル’/var/core/Symfo_RDBSYS1_templogshort_001.txt’に出力しました
参考
使用量がしきい値に達してから10分間は、再びしきい値に達しても使用状況をレポートしません。これは、使用量がしきい値を上下し続けたとき、レポート処理が性能とディスク領域を圧迫しないようにするためです。ただし、テンポラリログファイルが満杯であるときには常にレポートします。
テンポラリログファイルの空き領域不足を警告する契機は、RDB構成パラメタファイルのRDBTEMPLOGTHRESHOLDパラメタで設定できます。
通常、このパラメタを設定する必要はありません。ただし、既定の設定では十分な空き領域があるうちに警告が生じてしまうような場合、設定値を大きくすることで警告の発生頻度を下げることができます。
RDBTEMPLOGTHRESHOLDパラメタについての詳細は、“セットアップガイド”の“RDB構成パラメタファイルによる定義”を参照してください。