以下はオラクル社からの情報です。
[問題]
PSR 8.1.7.1 からプリコンパイラ・アプリケーションの実行時のパフォーマンス改善をする重要な修正(bug1410679)が含まれています。この影響により、8.1.7.1
より前のバージョンでプリコンパイルされ作成されたアプリケーションを 8.1.7.1 以降のパッチセット適用後の環境で実行すると、極めて稀にメモリの過剰な使用や
アプリケーションの異常終了が発生することがあります(bug1818530)。
[発生条件]
埋め込みSQL "EXEC SQL FETCH"に対してスカラーのホスト変数を使用しており、8.1.7.1より前のPrecompilerでプリコンパイルされているアプリケーションを
8.1.7.1以降のランタイムライブラリを使用して実行した場合に問題が発生する可能性があります。
[原因]
パフォーマンス改善の修正 (bug1410679) の一部として、プリコンパイラが埋め込み SQL文"EXEC SQL FETCH"
を実コード(C言語)として展開するときに sqlstm 構造体のメンバーである変数 selerr (unsigned short) に対して、
8.1.7.0までは初期値を設定していませんでしたが、8.1.7.1以降は初期値を 設定するようになりました。そして8.1.7.1以降のプリコンパイラ・ランタイム
ライブラリは selerr が初期化されていることを前提とし、動作するように なっています。具体的にはこの値と選択リストに指定されたカラム数に応じて
buffer領域のメモリ確保を行うことがあります。 そのため、8.1.7.1より前のバージョンでプリコンパイルされたアプリケーションを8.1.7.1用プリコンパイラ・ランタイムライブラリを使って実行すると、初期化
されていないselerrの値を使用してしまう場合があり、使用してしまった時に その値と選択リストに指定されたカラム数が非常に大きいと、大量のメモリ確保
を行うことがあります。このメモリ確保に要する処理でレスポンスの悪化が発生し、最悪の場合はアプリケーションの異常終了を引き起こすこともあります。
[対処]
1. プリコンパイラ・アプリケーションの再作成をプリコンパイルから実行してください。8.1.7.1 から含まれているパフォーマンス改善の修正(bug1410679)
は有効となります。
2. bug1818530 に対する個別パッチが存在するプラットフォームの場合は、プリ コンパイルからのアプリケーション再作成をせずに個別パッチを適用することに
よっても 問題を回避することが可能です。ただし、この個別Patchを適用した 場合には、bug1410679の修正であるパフォーマンスの向上を失うことになります。
個別パッチ適用後、bug1410679 の修正のパフォーマンス向上を有効とするためには、個別パッチの解除後、プリコンパイルを含むアプリケーションの再作成
をする必要があります。
現在、プリコンパイラ・アプリケーションのパフォーマンス問題(bug1410679) および本現象(bug#1818530)双方の問題をPSR
8.1.7.3 で修正することを予定しております。PSR 8.1.7.3適用後にはプリコンパイルの必要なしに、双方の修正が有効となる予定です。
|