このウィッシュリストのリクエストのきっかけは何ですか?
JMP 17 では高速に実行される JMP スクリプトは、OpenDatabase() が追加の不要なデータ ディクショナリ クエリを実行するため、JMP 18 では大幅に遅くなります。
どのような改善を望みますか?
ユーザーがデータ辞書クエリを無効にできるようにしてください。
詳細 -
JMP 17 では、ODBC 接続 (Oracle) に対してカスタム SQL を使用して OpenDatabase() を呼び出すと、JMP はユーザーのカスタム SQL ステートメントを実行する前に、最初に 2 つの追加 SQL クエリを実行します。
SYS.NLS_DATABASE_PARAMETERS から値を選択します。パラメータは 'NLS_CHARACTERSET' です。
SYS.NLS_DATABASE_PARAMETERS から値を選択します。パラメータは 'NLS_NCHAR_CHARACTERSET' です。
これら 2 つのクエリはデータを返しませんでしたが、データベース サーバー上で非常に高速に実行されたため、JMP ユーザーにはわずかな遅延 (0.5 ~ 1.0 秒) が発生しました。
JMP 18 では、同じ ODBC 接続 (Oracle、同じサーバー) に対してカスタム SQL を使用してまったく同じ OpenDatabase() 呼び出しを実行すると、JMP は同じ 2 つのカスタム SQL 前のステートメントと、追加の 2 つのカスタム SQL 前のステートメント (以下にリストされているステートメント JMP18-SQL1_DD と JMP18-SQL2_DD) を実行します。
残念ながら、当社のエンタープライズデータベース(かなり大規模なデータディクショナリを保有)では、これらの2つの追加SQL(DD=データディクショナリ)文の実行/戻りに30~45秒かかる場合があり、JMPユーザーのカスタムSQLの実行に大きな遅延が生じます。また、JMPユーザーはカスタムSQLの結果のみを必要としており、DD SQLの結果は必要ないため(DD SQLの結果にアクセスしたり、JMPに影響を与えるためにDD SQLの結果を使用したりすることはできず、JMPはデータベース接続を即座に切断します)、この追加の遅延は意味がありません。
したがって、ブール設定([環境設定] -> [テーブル] -> [ODBC データ ディクショナリの検査])をデフォルトで「オン」に設定して新しい JMP 18 リリースを作成することを要求します。この設定を「オフ」に設定して、これらの 2 つの追加 SQL ステートメントの実行を無効にすることができます。
技術的な詳細については、添付の JMP 17 および 18 のタイミングと、OpenDatabase() を使用するときに実行されるカスタム前の SQL ステートメントを参照してください。
フレッド・ゼリンジャー。
JMP 17 OpenDatabase() データベースとのトランザクション:
(0.00~0.41秒) - 接続文字列、認証、クライアント/データベースの詳細を交換
( @0.41秒) - SYS.NLS_DATABASE_PARAMETERSから値を選択 WHERE PARAMETER = 'NLS_CHARACTERSET' = ORA-01403: データが見つかりません
( @0.51秒) - SYS.NLS_DATABASE_PARAMETERSから値を選択 WHERE PARAMETER = 'NLS_NCHAR_CHARACTERSET' = ORA-01403: データが見つかりません
( @0.68 秒) - ...ユーザーカスタム SQL を実行する
( @0.65秒) - ...データの返却開始
JMP 18 OpenDatabase() データベースとのトランザクション:
( 0.00~ 0.74秒) - 接続開始、接続文字列の交換、認証、クライアント/データベースの詳細
( @ 0.74秒) - SYS.NLS_DATABASE_PARAMETERSから値を選択 WHERE PARAMETER = 'NLS_CHARACTERSET' = ORA-01403: データが見つかりません
( @ 0.84秒) - SYS.NLS_DATABASE_PARAMETERSから値を選択 WHERE PARAMETER = 'NLS_CHARACTERSET' = ORA-01403: データが見つかりません
( 0.92~26.90秒) - JMP18-SQL1_DDを実行してデータを返す
(26.90~43.32秒) - JMP18-SQL2_DDを実行してデータを返す
( @43.33 秒) - ...ユーザーカスタム SQL を実行する
( @43.34秒) - ...データの返却開始
JMP18-SQL1_DD:
(から*を選択
選択
null テーブル修飾子、o1.owner テーブル所有者、o1.object_name テーブル名
, decode(o1.owner,'SYS', decode(o1.object_type,'TABLE','SYSTEM TABLE','VIEW', 'SYSTEM VIEW', o1.object_type), 'SYSTEM'
、デコード(o1.object_type、'TABLE'、'SYSTEM TABLE'、'VIEW'、'SYSTEM VIEW'、o1.object_type)、o1.object_type
) テーブルタイプ
、コメントなし
all_objects o1から
o1.object_type が ('TABLE', 'VIEW') の場合
連合
選択
null テーブル修飾子、s.owner テーブル所有者、s.synonym_name テーブル名
, 'SYNONYM' テーブルタイプ
、コメントなし
all_objects o3、all_synonyms sから
o3.object_type が ('TABLE','VIEW') の場合
s.table_owner = o3.owner かつ s.table_name = o3.object_name
連合
選択
null テーブル修飾子、s1.owner テーブル所有者、s1.synonym_name テーブル名
, 'SYNONYM' テーブルタイプ
、コメントなし
all_synonyms s1から
s1.db_linkがnullではない場合
)テーブル
WHERE 1=1 AND ( table_type = 'TABLE' )
4,2,3で注文
JMP18-SQL2_DD:
(から*を選択
選択
null テーブル修飾子、o1.owner テーブル所有者、o1.object_name テーブル名
、デコード(o1.owner、'SYS'
、デコード(o1.object_type、'TABLE'、'SYSTEM TABLE'、'VIEW'、'SYSTEM VIEW'、o1.object_type)、'SYSTEM'
、デコード(o1.object_type、'TABLE'、'SYSTEM TABLE'、'VIEW'、'SYSTEM VIEW'、o1.object_type)
、o1.object_type) テーブルタイプ
、コメントなし
all_objects o1から
o1.object_type が ('TABLE', 'VIEW') の場合
連合
選択
null テーブル修飾子、s.owner テーブル所有者、s.synonym_name テーブル名、'SYNONYM' テーブルタイプ、null 注釈
all_objects o3、all_synonyms sから
o3.object_type が ('TABLE','VIEW') の場合
s.table_owner = o3.owner かつ s.table_name = o3.object_name
連合
選択
null テーブル修飾子、s1.owner テーブル所有者、s1.synonym_name テーブル名、'SYNONYM' テーブルタイプ、null 注釈
all_synonyms s1から
s1.db_linkがnullでないテーブル
WHERE 1=1 AND ( table_type = 'TABLE' )
4,2,3で注文
このアイデアはなぜ重要なのでしょうか?