SET PROCEDURES_CACHE
SET PROCEDURES_CACHE ステートメントは、データベースエンジンがストアド プロシージャのキャッシュとして予約する SQL セッションのメモリ量を指定します。
構文
SET PROCEDURES_CACHE = メモリ量(メガバイト)
備考
メモリ量(メガバイト)の値は、ゼロからおよそ 20 億までの整数です。データベース エンジンは、デフォルトで 5 MB に設定します。各セッションは、この SET ステートメントを発行することにより、そのセッションのキャッシュ メモリ量を変更できます。
SET PROCEDURES_CACHE の対となるステートメントは
SET CACHED_PROCEDURES です。
•これら両方の SET ステートメントをゼロに設定すると、データベース エンジンはストアド プロシージャをキャッシュしません。さらに、エンジンはストアド プロシージャに使用される既存のキャッシュを削除します。つまり、エンジンは、両方のステートメントをゼロに設定する前にキャッシュされたすべてのストアド プロシージャをキャッシュから消去します。
•一方のステートメントだけをゼロまたはゼロ以外の値に設定した場合、もう一方のステートメントは暗黙的にゼロに設定されます。暗黙的にゼロに設定されたステートメントは無視されます。たとえば、キャッシュ メモリとして 30 MB を使用することのみに関心があり、キャッシュされるプロシージャ数に関心がなければ、PROCEDURES_CACHE を 30 に設定します。データベース エンジンは暗黙的に CACHED_PROCEDURES をゼロに設定します。つまり、設定を無視します。
PROCEDURES_CACHE をゼロ以外の値に設定すると、以下の条件が適用されます。プロシージャの実行によって割り当てられたメモリが PROCEDURES_CACHE 値を超える場合、データベース エンジンは最近最も使用頻度の低いプロシージャをキャッシュから削除します。
メモリ キャッシュを使用している場合、プロシージャの実行後もコンパイルしたストアド プロシージャを保持しています。一般的に、キャッシングによって、キャッシュされたプロシージャへの以降の呼び出しのパフォーマンスが向上します。キャッシュの設定やアプリケーションで実行される SQL ステートメントによっては、過度のメモリ スワッピングやスラッシングが発生する可能性があるので注意してください。スラッシングはパフォーマンスを低下させる可能性があります。
レジストリ設定
キャッシュ用の予約メモリ量は、SET ステートメントのほかにレジストリ設定でも指定できます。レジストリ設定はすべてのセッションに適用され、初期値を設定する便利な方法です。各セッションは SET ステートメントを使用して、そのセッション固有の値を指定できます。この値はレジストリ設定より優先されます。
レジストリ設定は、Zen Enterprise Server または Cloud Server がサポートされるすべてのサーバー プラットフォームに適用されます。レジストリ設定は手作業で変更する必要があります。Windows では、オペレーティング システムで提供されているレジストリ エディターを使用します。Linux および macOS では、psregedit ユーティリティを使用することができます。
レジストリ設定が指定されていない場合、データベース エンジンはデフォルトを自動的に 5 MB とします。
►Windows のレジストリ設定でキャッシュ メモリ量を指定するには
1 以下のキーを見つけます。
HKEY_LOCAL_MACHINE\SOFTWARE\Actian\Zen\SQL Relational Engine
メモ:ほとんどの Windows システムで、このキーの場所は HKEY_LOCAL_MACHINE\SOFTWARE\Actian\Zen です。ただし、HKEY_LOCAL_MACHINE\SOFTWARE の下位以降の場所はオペレーティング システムによって異なる可能性があります。
2 このキーに、ProceduresCache という新しい文字列値を作成します。
3 ProceduresCache にキャッシュに使用したいメモリ量を設定します。
►Linux および macOS の Zen レジストリでキャッシュ メモリの量を設定するには
1 以下のキーを見つけます。
PS_HKEY_CONFIG\SOFTWARE\Actian\Zen\SQL Relational Engine
2 このキーに、ProceduresCache という新しい文字列値を作成します。
3 ProceduresCache にキャッシュに使用したいメモリ量を設定します。
キャッシングの除外
ストアド プロシージャは以下の条件に当てはまる場合、キャッシュ設定にかかわらず、キャッシュされません。
•ストアド プロシージャが、ローカルまたはグローバル テンポラリ テーブルを参照する。ローカル テンポラリ テーブルはポンド記号(#)で始まる名前を持ちます。グローバル テンポラリ テーブルは 2 つのポンド記号(##)で始まる名前を持ちます。
CREATE (テンポラリ) TABLE を参照してください。
•ストアド プロシージャにデータ定義言語(DDL)ステートメントが含まれている。
データ定義ステートメントを参照してください。
•ストアド プロシージャに、文字列または文字列を返す式を実行するための EXEC[UTE] ステートメントが含まれている。たとえば、次のような例です。
EXEC ('SELECT Student_ID FROM ' + :myinputvar)
例
次の例は、最大 20 のストアド プロシージャを格納する 2 MB のキャッシュ メモリを設定します。
SET CACHED_PROCEDURES = 20
SET PROCEDURES_CACHE = 2
============
次の例は、最大 500 のストアド プロシージャを格納する 1,000 MB のキャッシュ メモリを設定します。
SET CACHED_PROCEDURES = 500
SET PROCEDURES_CACHE = 1000
============
次の例は、ストアド プロシージャをキャッシュせず、既にキャッシュされているプロシージャを削除する指定をします。
SET CACHED_PROCEDURES = 0
SET PROCEDURES_CACHE = 0
============
次の例では、キャッシュ メモリを 80 MB に設定し、キャッシュされるプロシージャ数は設定しない指定をします。
SET PROCEDURES_CACHE = 80
データベース エンジンは暗黙的に CACHED_PROCEDURES をゼロに設定します。
関連項目