FREEZE PLANS (SQL)
構文
FREEZE PLANS BY ID statement-hash
FREEZE PLANS BY TABLE table-name
FREEZE PLANS BY SCHEMA schema-name
FREEZE PLANS
説明
FREEZE PLANS コマンドは、クエリ・プランを凍結します。凍結したクエリ・プランを凍結解除するには、UNFREEZE PLANS コマンドを使用します。
FREEZE PLANS は、プランの状態が凍結解除のクエリ・プランを凍結できます。プランの状態が未凍結/パラレルのクエリ・プランは凍結できません。
FREEZE PLANS には、クエリ・プランを凍結するための 4 つの構文形式が用意されています。
-
指定されたクエリ・プラン : FREEZE PLANS BY ID statement-hash。statement-hash 値は、二重引用符で区切る必要があります。
-
テーブルのすべてのクエリ・プラン : FREEZE PLANS BY TABLE table-name。テーブル名またはビュー名を指定できます。クエリ・プランが複数のテーブルまたはビューを参照する場合、これらのテーブルまたはビューのいずれかを指定すると、クエリ・プランは凍結されます。
-
スキーマ内のすべてのテーブルのすべてのクエリ・プラン : FREEZE PLANS BY SCHEMA schema-name。
-
現在のネームスペースのすべてのテーブルのすべてのクエリ・プラン : FREEZE PLANS。
このコマンドは、1 つ以上のクエリ・プランが凍結される場合は SQLCODE 0 を発行し、クエリ・プランが凍結されない場合は SQLCODE 100 を発行します。影響を受けた行 (%ROWCOUNT) は、凍結されたクエリ・プランの数を示します。
その他のインタフェース
次の $SYSTEM.SQL.Statement メソッドを使用して 1 つのクエリ・プランまたは複数のクエリ・プランを凍結できます : 1 つのプランの場合は FreezeStatement()Opens in a new tab、関係のすべてのプラン (クエリ・プランで参照されるテーブルまたはビュー) の場合は FreezeRelation()Opens in a new tab、スキーマのすべてのプランの場合は FreezeSchema()Opens in a new tab、現在のネームスペースのすべてのプランの場合は FreezeAll()Opens in a new tab。対応する Unfreeze メソッドがあります。
管理ポータルを使用して、クエリ・プランを凍結できます。詳細は、"凍結プランのインタフェース" を参照してください。
引数
statement-hash
引用符で囲まれた、クエリ・プランの SQL 文の定義の内部ハッシュ表現。場合によっては、同じ SQL 文のように見えても、文のハッシュ・エントリが異なることがあります。SQL 文の異なるコード生成を必要とする設定/オプションの相違によって、異なる文ハッシュが生成されます。これは、異なる内部最適化をサポートする異なるクライアント・バージョンや異なるプラットフォームで発生することがあります。"SQL 文の詳細" を参照してください。
table-name
既存のテーブルまたはビューの名前。table-name は修飾 (schema.table)、未修飾 (table) のどちらでもかまいません。テーブル名が未修飾の場合は、既定のスキーマ名が使用されます。
schema-name
既存のスキーマの名前。このコマンドは、指定されたスキーマ内のすべてのテーブルのすべてのクエリ・プランを凍結します。
セキュリティおよび特権
FREEZE PLANS コマンドは、ユーザに %Development:USE 権限が必要な特権操作です。このような権限は管理ポータルを介して付与できます。この特権なしで FREEZE PLANS コマンドを実行すると、SQLCODE -99 エラーが発生し、コマンドは失敗します。これには、以下の 2 つの例外があります。
-
埋め込み SQL を介してコマンドを実行する場合。この場合は特権が確認されません。
-
特権を確認しないことをユーザが明示的に指定する場合。例えば、checkPriv 引数を 0 に設定して %Prepare() を呼び出すか、%SQL.StatementOpens in a new tab に対して %ExecDirectNoPriv() を呼び出します。