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ファンクションの結果をキャッシュできます。 同じ問合せまたはファンクションを後で実行する場合に、キャッシュから直接使用できるので応答時間が向上します。 この技術は、頻繁に実行される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には、以下の値を設定できます。

  • MANUAL(デフォルト) 結果をキャッシュしてキャッシュから使用できるように、RESULT_CACHEヒントを問合せに追加する必要があります。 RESULT_CACHEヒントは、副問合せおよびインライン・ビューにも追加できます。

  • FORCE 可能な限り、結果がリザルト・キャッシュ・メモリーに常時保存されます。

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ファンクションリザルト・キャッシュの使用

トピック・リストに戻る

 このアイコンの上にカーソルを置くと、すべてのスクリーンショットが非表示になります。

 

 

 


Copyright (c) Oracle Corporation 2007 All Rights Reserved
Oracle Corporation発行の「Improving Application Performance with Result Cache」の翻訳版です。

この文書はあくまで参考資料であり、 掲載されている情報は予告なしに変更されることがあります。 万一、誤植などにお気づきの場合は、オラクル社までお知らせください。 オラクル社は本書の内容に関していかなる保証もしません。 また、本書の内容に関連したいかなる損害についても責任を負いかねます。

Oracleはオラクル社の登録商標です。
その他の会社名および製品名は、 あくまでその製品および会社を識別する目的にのみ使用されており、 それぞれの所有者の商標または登録商標です。