2012-03-30 5 views
2

INLINE Pragmapinned objects in oracleの違いは誰にでも分かります。私の理解あたりpinning objects means Keeping database packages in the Oracle database'sシステム・グローバル領域(SGA)の共有pool`プラグマインライン対オブジェクトをオラクルで固定する

Inline Pragmaとして

は、サブプログラム・コールがある、またはありませんが、インライン化されることをspecifys。インライン化は、サブプログラム呼び出し(同じプログラム単位内のサブプログラム)を、呼び出されたサブプログラムのコピー(compile time)に置き換えます。

oracleはコンパイルされたコードもSGAに格納していますか?ユーザーがPinningと同様にInline Pragmaをデータベース内の同じオブジェクトに対して実行するとどうなりますか?

+0

これは私を取り返します。私はOracleでパッケージをピンする必要があるので、何年も前からそうです。 –

答えて

3

Oracleは、コードをSGAの共有プールにロードして実行する必要があります。一般に、オブジェクトは、最も最近使用されたアルゴリズムに基づいて共有プールから継承されるため、メモリ内にオブジェクトを固定する必要はありません。したがって、コードの一部が頻繁に呼び出されると、そのコードは共有プールに保持されます。頻繁に呼び出されないと、エージングが発生し、次回の呼び出し時にディスクから再読み込みする必要があります。しかし、これは一般的に正確に起こりたいことです。頻繁に起こることを最適化し、ディスクから頻繁にアクセスされないコードを読み取るときに、少数のディスクI/Oのコストを負担したいとします。

インライン展開では、一般にコンパイルされた製品を少し大きくするインライン・サブプログラムのコードをコピーするかどうかを決定するため、実行時にサブプログラムにジャンプする必要がないため、一般的に、インライン化は手動でPRAGMAで指定したいものではありません、それはPLSQL_OPTIMIZE_LEVEL = 3、PLでPL/SQL Language Reference

〜3 PLSQL_OPTIMIZE_LEVELを設定することで、コンパイラによって自動的に世話をされるだろう何か/ SQLコンパイラは、 をインライン・サブプログラムにチャンスします。インライン化するサブプログラムを指定する必要はありません。 ただし、INLINEプラグマ(前述の構文を使用)を使用して サブラインにインライン化の優先度を設定し、インライン化を望ましくないように考慮しない限り、コンパイラ をインライン化できます。

+0

私のデータベースで 'PLSQL_OPTIMIZE_LEVEL'が2に設定されている場合、本番データベースでその値を3に設定すると不都合がありますか? –

+0

@ GauravSoni - おそらくそうではありません。しかし、パラメータの変更と同様に、コンパイラの最適化によってパフォーマンスの問題が生じる可能性があるため、下位の環境でテストすることをお勧めします。まれですが、可能です。 –

+0

:ありがとうございました –

関連する問題