Hitachi

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


13.6.2 SQL文実行時またはコマンド実行時にメモリが不足した場合の対処方法

SQL文実行時またはコマンド実行時に次のメッセージが出力された場合の対処方法を示します。

出力されたメッセージ
  • KFAA30930-E

  • KFAA40007-E

対処方法は,サーバ定義adb_sys_memory_limitオペランドの指定の有無によって異なります。

〈この項の構成〉

(1) サーバ定義adb_sys_memory_limitオペランドを指定している場合

サーバ定義adb_sys_memory_limitオペランドのHADBサーバが使用するメモリの最大サイズに,次に示す計算式で求めた値以上の値を指定してください。

計算式(単位:メガバイト)

[図データ]

変数の説明

get_size:KFAA30930-EメッセージおよびKFAA40007-Eメッセージの変数bb....bbの値(単位:バイト)

(2) サーバ定義adb_sys_memory_limitオペランドを指定していない場合

KFAA30930-EメッセージおよびKFAA40007-Eメッセージに出力された,不足しているメモリの種類を示す変数aa....aaを確認してください。aa....aaによって対策が異なります。

(a) aa....aaがPROCESSの場合

次に示す対処を行ってください。

  1. HADBサーバが使用したメモリ容量の最大値を確認する

    adbls -d memコマンドを実行してください。出力結果から,出力項目「THREAD-NO」が0の行に表示されている「MAX」の値を確認してください。

    adbls -d memコマンドについては,マニュアル「HADB コマンドリファレンス」の「adbls -d mem(メモリの使用状況の表示)」を参照してください。

  2. 確保できるプロセス共通メモリの最大サイズを求める

    サーバ定義adb_sys_proc_area_maxオペランドの確保できるプロセス共通メモリの最大サイズに,次に示す計算式で求めた値以上の値を指定してください。

    計算式(単位:メガバイト)

    [図データ]

    変数の説明

    max_size:手順1.で確認した「MAX」の値(単位:バイト)

    get_size:出力されたメッセージの変数bb....bbの値(単位:バイト)

  3. SQL文またはコマンドを実行する

    adbstartコマンドを実行して,HADBサーバを開始してください。そのあとで,SQL文またはコマンドを再実行してください。

(b) aa....aaがTHREADの場合

次に示す対処を行ってください。

  1. HADBサーバが使用したメモリ容量の最大値を確認する

    adbls -d memコマンドを実行してください。出力結果から,出力項目「THREAD-NO」が1以上の行に表示されている「MAX」のうち,最も大きな値を確認してください。

    adbls -d memコマンドについては,マニュアル「HADB コマンドリファレンス」の「adbls -d mem(メモリの使用状況の表示)」を参照してください。

  2. 確保できるリアルスレッド固有メモリの最大サイズを求める

    サーバ定義adb_sys_rthd_area_maxオペランドの確保できるリアルスレッド固有メモリの最大サイズに,次に示す計算式で求めた値以上の値を指定してください。

    計算式(単位:メガバイト)

    [図データ]

    変数の説明

    max_size:手順1.で確認した最も大きな「MAX」の値(単位:バイト)

    get_size:出力されたメッセージの変数bb....bbの値(単位:バイト)

  3. SQL文またはコマンドを実行する

    adbstartコマンドを実行して,HADBサーバを開始してください。そのあとで,SQL文またはコマンドを再実行してください。

(c) aa....aaがHEAPの場合

  1. 不要なプロセスがないかどうかを確認してください。不要なプロセスがある場合は,そのプロセスを終了または削除してください。

  2. 手順1.を実施してもメモリが不足し,かつHADBサーバが稼働している場合,HADBサーバを一度停止させてから,再度開始してください。

  3. 手順2.を実施してもメモリが不足する場合,OSを再起動してください。そのあとで,adbstartコマンドを実行してHADBサーバを開始してください。クライアントで発生した場合はクライアントのOSを再起動してください。

  4. 手順3.を実施してもメモリが不足する場合,カーネルパラメタの設定を変更し,プロセスで使用できるメモリの上限を大きくしてください。OSを再起動したあとで,adbstartコマンドを実行してHADBサーバを開始してください。クライアントで発生した場合はクライアントのカーネルパラメタの設定を変更し,プロセスで使用できるメモリの上限を大きくしてください。そのあとで,クライアントのOSを再起動してください。

(d) aa....aaがSHAREの場合

  1. 不要なプロセス,および不要な共有メモリがないかどうかを確認してください。不要なプロセスがある場合は終了してください。不要な共有メモリがある場合は削除してください。そのあとで,adbstartコマンドを実行して,HADBサーバを開始してください。

  2. 手順1.を実施しても共有メモリが不足し,かつHADBサーバが稼働している場合,HADBサーバを一度停止させてから,再度開始してください。

  3. 手順2.を実施しても共有メモリが不足する場合,OSを再起動してください。そのあとで,adbstartコマンドを実行して,HADBサーバを開始してください。クライアントで発生した場合はクライアントのOSを再起動してください。

  4. 手順3.を実施しても共有メモリが不足する場合,カーネルパラメタの設定を変更し,共有メモリの上限を大きくしてください。OSを再起動したあとで,adbstartコマンドを実行して,HADBサーバを開始してください。

    なお,HADBサーバの共有メモリにHugePagesを適用している場合,カーネルパラメタがHugePagesを使用できる設定になっていることを確認してください。詳細については,「6.2 カーネルパラメタの見積もり」を参照してください。クライアントで発生した場合はクライアントの共有メモリの上限を大きくしてください。そのあとで,クライアントのOSを再起動してください。