説明
この変数はV4.4.2バージョンから導入されました。
plsql_can_transform_sql_to_assignは、PL内のselect into from dualがassignステートメントに書き換え可能かどうかを制御します。
権限要件
クエリ変数
sysテナントとすべてのユーザーテナントはSHOW VARIABLESステートメント、またはSYS.TENANT_VIRTUAL_SESSION_VARIABLEビュー(Oracleモード)およびinformation_schema.SESSION_VARIABLESビュー(MySQLモード)を使用して、セッションシステム変数の値を確認できます。変数の変更
sysテナントとすべてのユーザーテナントは、自身のテナントのセッションシステム変数の値を直接変更できます。
プロパティの説明
プロパティ |
説明 |
|---|---|
| パラメータタイプ | Bool |
| デフォルト値 | OFF |
| 値の範囲 | ON/OFF |
| 変更は可能か | はい。SETステートメントを使用して変更できます。 |
| OBServerノードの再起動が必要か | 不要です。設定は即時に反映されます。 |
使用方法
この変数は、PL内のselect into from dualがassignステートメントに書き換え可能かどうかを制御します。デフォルトはOFFで、書き換えは行われません。変数がONの場合、カーネルは自動的に書き換えを試み、書き換えが成功すると実行パフォーマンスが向上することが期待されます。書き換えによりPLの文構成が変更されるため、最適化前後でコンパイル生成される生成物が一致しなくなり、この変数はPLキャッシュのマッチングに影響します。
使用例
以下のコマンドを実行して、plsql_can_transform_sql_to_assign変数を無効にします:
obclient> SET plsql_can_transform_sql_to_assign = OFF;
以下のコマンドを実行して、funcという名前のストアド機能を作成します:
obclient> create or replace function func(a int) return int is
x int;
begin
select a into x from dual;
return x;
end;
/
funcストアド機能を呼び出したところ、実行時間は9.147秒でした:
obclient> SELECT func(level) FROM dual connect by level < 10000;
cost : 9999 rows in set (9.147 sec)
以下のコマンドを実行して、plsql_can_transform_sql_to_assign変数を有効にします:
obclient> SET plsql_can_transform_sql_to_assign = ON;
再度funcストアド機能を呼び出したところ、実行時間は1.445秒でした:
obclient> select func(level) from dual connect by level < 10000;
cost : 9999 rows in set (1.445 sec)
最適化を有効にした後、パフォーマンスが大幅に向上しました。