Skip to main content

This documentation is for an older version of this product. See the latest version of this content.Opens in a new tab

FREEZE PLANS (SQL)

1 つ以上のクエリ・プランを凍結します。

Synopsis

FREEZE PLANS BY ID statement-hash  FREEZE PLANS BY TABLE table-name  FREEZE PLANS BY SCHEMA schema-name  FREEZE PLANS

引数

statement-hash 引用符で囲まれた、クエリ・プランの SQL 文の定義の内部ハッシュ表現。場合によっては、同じ SQL 文のように見えても、文のハッシュ・エントリが異なることがあります。SQL 文の異なるコード生成を必要とする設定/オプションの相違によって、異なる文ハッシュが生成されます。これは、異なる内部最適化をサポートする異なるクライアント・バージョンや異なるプラットフォームで発生することがあります。"SQL 文の詳細" を参照してください。
table-name 既存のテーブルまたはビューの名前。table-name は修飾 (schema.table)、未修飾 (table) のどちらでもかまいません。テーブル名が未修飾の場合は、既定のスキーマ名が使用されます。
schema-name 既存のスキーマの名前。このコマンドは、指定されたスキーマ内のすべてのテーブルのすべてのクエリ・プランを凍結します。

説明

FREEZE PLANS コマンドは、クエリ・プランを凍結します。凍結したクエリ・プランを凍結解除するには、UNFREEZE PLANS コマンドを使用します。

FREEZE PLANS は、プランの状態が凍結解除のクエリ・プランを凍結できます。プランの状態が未凍結/パラレルのクエリ・プランは凍結できません。

FREEZE PLANS には、クエリ・プランを凍結するための 4 つの構文形式が用意されています。

  • 指定されたクエリ・プラン : FREEZE PLANS BY ID statement-hashstatement-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 メソッドがあります。

"InterSystems SQL 最適化ガイド" の "凍結プラン" の章の "凍結プランのインタフェース" のセクションで説明されているように、管理ポータルを使用してクエリ・プランを凍結できます。

セキュリティおよび特権

FREEZE PLANS コマンドは、ユーザに %Development:USE 権限が必要な特権操作です。このような権限は管理ポータルを介して付与できます。この特権なしで FREEZE PLANS コマンドを実行すると、SQLCODE -99 エラーが発生し、コマンドは失敗します。これには、以下の 2 つの例外があります。

  • 埋め込み SQL を介してコマンドを実行する場合。この場合は特権が確認されません。

  • 特権を確認しないことをユーザが明示的に指定する場合。例えば、checkPriv 引数を 0 に設定して %Prepare() を呼び出すか、%SQL.StatementOpens in a new tab に対して %ExecDirectNoPriv() を呼び出します。

関連項目

FeedbackOpens in a new tab