1

Progress バージョン 11.0 srt* (srt) ソート/一時ファイルは、RHEL Linux 6.0 で非常に大きくなります。Web アプリケーションの webspeed で使用される特定のデータベースに分離されます。-T スイッチ パラメータを使用して、ファイルの場所を定義します。-t を使用しないため、ファイルが切断され、ファイル システムに表示されません。

シェルで lsof を実行すると、ファイルが GB サイズになり、さらに増加することが示されます。3 番目の列はバイト単位のサイズです。

_mprosrv 29968 3862790144 /usr/temp/srtJrjsxX (削除済み)

_mprosrv 31588 15290187776 /usr/temp/srtVEi9Lp (削除済み)

_mprosrv 32644 1533157376 /usr/temp/srtTozP1W (削除済み)

_mprosrv 32667 3890683904 /usr/temp/srte5qI1U (削除済み)

これらの一時ファイルのサイズを制限したり、大きくならないようにする方法はありますか?

4

2 に答える 2

1

いいえ、それらを制限するパラメーターはありません。成長を引き起こすために何をしているのかを理解することが重要です。通常、これらは適切なインデックスがないクエリの結果であるため、クライアントがレコードを選択して並べ替える必要があります。

私は...するだろう:

  • SRT ファイルの増大をリアルタイムで監視できるように、クライアントで -t を有効にします。
  • クライアント ステートメント キャッシングを有効にして、拡張が発生したときにどのソース モジュールのどのコード行のどのクエリが原因であるかを判断できるようにします。
  • XREF および DEBUG を使用してコンパイルし、テーブル スキャン (XREF の "インデックス全体" 参照) のコードを確認し、ステートメント キャッシュ情報からソース行を検索 (デバッグ) できるようにします。
  • http://dbappraise.com/protop.htmlから ProTop 3 をダウンロードして、リアルタイムでクエリ アクティビティを監視できるようにします。
  • -noautoresultlist パラメータをクライアントのスタートアップに追加します (これは万能薬ではありませんが、場合によっては役立つかもしれません)。
  • クライアント ステートメント キャッシュを有効にせずに「実行中」のクライアントを見つけた場合は、「kill -USR1」を送信してから、protrace で 4gl スタック トレースを見つけて調べます。(おそらくクライアントの起動ディレクトリにあります)
于 2014-03-06T16:14:46.700 に答える
1

11.0 を使用している場合は、11.2 以降へのアップグレードを検討してください。

バグ (11.2 で修正された障害 OE00227173 と呼ばれる) があり、一部の大きなクエリによって _mprosrv プロセスがファイル空間を再利用するのではなく、.srt ファイルを継続的に拡大します。

リリースノートから:

問題番号: OE00227173 クエリが実行されるたびに一時ソート ファイルが大きくなる

単語インデックスにワイルドカードを含む検索を実行すると、検索によって db サーバーに srt ファイルが作成されます。クエリが多数の行 (100,000 を超える) を返す場合、並べ替えファイル内のスペースが完全には再利用されず、.srt が非常に大きくなる可能性があります。

問題のサーバー PID からユーザー セッションを切断し、サーバー プロセスを終了することで、一時的な問題を解決できます (promon R&D を使用するのが最適です,4,7,7)。

サーバー PID でユーザーをフェッチするコード:

def var v-pid as int format ">>>>>>>>>9" label "Server PID" no-undo.

do while true:
    update v-pid with frame f1 side-labels.

    find _server where _server._server-pid eq v-pid
        no-lock no-error.
    disp _server with frame f2.

    for each _connect where
        _connect._Connect-Server eq _server._server-num  /** NOT _server-id **/
        no-lock:

        find _userio where _connect._connect-id eq _userio._userio-id
        no-lock no-error.

        disp _connect._Connect-Usr /** NOT _Connect-Id **/
             _connect._Connect-Name
             _connect._Connect-Device
             _connect._Connect-Time
             _connect._Connect-Pid
             _userio._userio-dbaccess
             _userio._userio-dbread
             _userio._userio-dbwrite.

    end.
end.
于 2014-03-26T22:50:17.043 に答える