0) { obj.className = "imgborder_on"; } } } function hideImage(obj) { if (obj.className.substr(0, 10) == "imgborder_") { obj.src = eyeglass.src; obj.className = "imgborder_off"; } } function showAllImages() { imgs = document.images; for (i=0; i < imgs.length; i++) { showImage(imgs[i]); } } function hideAllImages() { imgs = document.images; for (i=0; i < imgs.length; i++) { hideImage(imgs[i]); } } //-->
リザルト・キャッシュによるアプリケーション・パフォーマンスの向上
目的
このチュートリアルでは、リザルト・キャッシュによるOracle Database 11gの問合せ実行時間およびアプリケーション・パフォーマンスの向上について説明します。
所要時間
約40分
トピック
このチュートリアルでは、以下のトピックについて説明します。
スクリーンショットの表示
このアイコンの上にカーソルを置くと、すべてのスクリーンショットがロードし、表示されます。
(警告:すべてのスクリーンショットが同時にロードされるため、ご使用のインターネット接続によってはレスポンス・タイムが遅くなる場合があります。)
注:各手順に関連したスクリーンショットのみを表示する場合は、それぞれの手順にあるアイコンの上にカーソルを置いてください。 スクリーンショットをクリックすると、非表示になります。
概要
リザルト・キャッシュについて
リザルト・キャッシュを使用すると、メモリーに保存されるSQL問合せとPL/SQLファンクションの結果をキャッシュできます。 同じ問合せまたはファンクションを後で実行する場合に、キャッシュから直接使用できるので応答時間が向上します。 この技術は、頻繁に実行されるSQL問合せおよびPL/SQLファンクションに特に効果的です。
デフォルトのサーバー側のリザルト・キャッシュは、非常に少量の共有プール用に構成されます。
RESULT_CACHE_MAX_SIZE
初期化パラメータを使用して、リザルト・キャッシュのメモリー・サイズを手動で設定できます。
RESULT_CACHE_MAX_SIZEを0に設定すると、サーバー側のリザルト・キャッシュが無効になります。
トピック・リストに戻る
前提条件
このチュートリアルを始める前に、次の手順を完了してください。
| 1.
|
Oracle Database 11gのインストール
|
| 2.
|
作業ディレクトリ(wkdir)への
res_cache.zipファイルのダウンロードおよび解凍と作業ディレクトリへの移動
|
| 3.
|
HRユーザーのロック解除の確認。 SYSユーザーとしてSQL*Plusセッションを開いて、以下のコマンドを実行します。
alter user HR identified by HR account unlock;
|
トピック・リストに戻る
SQL問合せリザルト・キャッシュの実装
新しいSQL問合せリザルト・キャッシュを使用すると、リザルト・キャッシュ・メモリーと呼ばれる共有プールの領域に問合せと問合せの断片を明示的にキャッシュできます。 問合せが実行されると、リザルト・キャッシュが構築され、結果が返されます。 データベースは、後続の問合せ実行用にキャッシュされた結果を使用できます。このため、応答時間が向上します。 問合せでアクセスされるデータベース・オブジェクトのデータが変更されると、キャッシュされた問合せ結果は無効になります。
データベースの初期化パラメータ・ファイルの
RESULT_CACHE_MODE初期化パラメータを使用して、データベース・レベルで問合せリザルト・キャッシュを使用できます。 このパラメータは、
ALTER SESSIONコマンドを使用して、セッション・レベルでも使用できます。
RESULT_CACHE_MODEには、以下の値を設定できます。
SQL問合せリザルト・キャッシュの使用によって、問合せ実行計画のResultCacheオペレータが導入されます。
以下の手順を実行して、問合せリザルト・キャッシュの使用方法を理解します。
| 1.
|
端末ウィンドウを開いて、SQL*Plusにログオンします。
SYSとしてデータベースに接続します。
sqlplus /
as sysdba
|
| 2.
|
flush.sql
スクリプトを実行して、共有プールとリザルト・キャッシュをクリアします。
@
flush
|
| 3.
|
baseline.sql
スクリプトを実行して、メモリー・キャッシュを調査します。 何もキャッシュされていないので、キャッシュ・メモリーは0バイトです。
@baseline
|
| 4.
|
plan_query1.sql
スクリプトを実行して、実行計画を調査します。 問合せには、
RESULT_CACHEオプティマイザ・ヒントが使用されます。
@plan_
query1
|
| 5.
|
plan_query2.sql
スクリプトを実行して、実行計画を調査します。 この問合せにも、
RESULT_CACHEオプティマイザ・ヒントが使用されます。
@
plan_query2
|
| 6.
|
query3.sql
スクリプトを実行して、両方の問合せを実行します。
@
query3
|
| 7.
|
V$RESULT_CACHE_STATISTICSの問合せを実行して、メモリーの割当てと利用統計を参照します。
v_stat.sql
スクリプトを実行します。
CREATE COUNT SUCCESS
列の値は2です。これは、正しく作成されたキャッシュ結果の数です(問合せ文ごとに1つ)。
@v_stat
|
| 8.
|
query3.sql
スクリプトをもう一度実行して、含まれる両方の問合せを再実行します。
@
query3
|
| 9.
|
V$RESULT_CACHE_STATISTICSの問合せを再実行して、メモリーの割当てと利用統計を参照します。
v_stat.sql
スクリプトを実行します。
FIND COUNT
列
の値は2です。これは、正しく検出されたキャッシュ結果の数です(問合せ文ごとに1つ)。
@v_stat
|
トピック・リストに戻る
PL/SQLファンクション・キャッシュの使用
Oracle Database 11gは、結果のキャッシュを示すPL/SQLファンクションをマークする機能を提供します。 これによって、次にファンクションが同じパラメータ値で呼び出される場合に再計算しなくても参照できます。 キャッシュは、システム全体に適用されます。このため、ファンクションを呼び出すすべてのセッションで、キャッシュされた戻り値を利用できます。
ファンクション宣言で
RESULT_CACHEオプションを使用して、PL/SQLファンクション・キャッシュをアクティブ化できます。 また、
RELIES_ON句を使用した従属表のDML操作が行われる場合にキャッシュを消去できます。
以下の手順を実行して、PL/SQLファンクション・キャッシュの使用方法を理解します。
トピック・リストに戻る
| 1.
|
flush.sql
スクリプトを実行して、共有プールとリザルト・キャッシュをクリアします。
@
flush
|
| 2.
|
cre_func.sql
スクリプトを実行して、PL/SQLファンクションを作成します。 ファンクションは、結果のキャッシュを示す
RESULT_CACHE句を使用します。 また、ファンクション結果の依存する表またはビューを指定する
RELIES_ON句も使用します。
@
cre_func
|
| 3.
|
call_func.sql
スクリプトを実行して、問合せ内のPL/SQLファンクションを呼び出します。
@
call_func
|
| 4.
|
baseline.sql
スクリプトを実行して、メモリーの割当てを検証します。 リザルト・キャッシュがPL/SQLブロック用に構築されます。
@
baseline
|
| 5.
|
V$RESULT_CACHE_STATISTICSの問合せを実行して、メモリーの割当てと利用統計を参照します。
v_stat.sql
スクリプトを実行します。
CREATE COUNT SUCCESS列の値は1です。これは、正しく作成されたキャッシュ結果の数です。
@
v_stat
|
| 6.
|
call_func.sql
スクリプトを実行して、PL/SQLファンクションを再度呼び出します。
@
call_func
|
| 7.
|
V$RESULT_CACHE_STATISTICSの問合せを実行して、メモリーの割当てと利用統計を参照します。
v_stat.sql
スクリプトを実行します。
FIND COUNT SUCCESS列の値は1です。これは、正しく検出されたキャッシュ結果の数です。
@
v_stat
|
| 8.
|
V$RESULT_CACHE_OBJECTSの問合せを実行して、メモリーの割当てと利用統計を参照します。
v_obj.sql
スクリプトを実行します。
SCAN_COUNT列の値は1です。これは、キャッシュ結果が使用されていることを意味します。
@
v_obj
|
トピック・リストに戻る
まとめ
このチュートリアルで学習した内容は、次のとおりです。
|
SQL問合せリザルト・キャッシュの使用 |
|
PL/SQLファンクションリザルト・キャッシュの使用 |
トピック・リストに戻る
このアイコンの上にカーソルを置くと、すべてのスクリーンショットが非表示になります。
|