JMPユーザーの皆様、こんにちは。 JMP Query Builder を使用する場合、「ODBC Driver 11 for SQL Server」を使用する SQL サーバーでは高速な応答が得られますが、「Oracle in OraClient11g」を使用する一部の Oracle サーバーでは応答が遅く、2 ~ 3 分程度です。JMP Query Builder から生成されたスクリプトを使用する代わりに、スクリプトの New SQL Query() 関数で Custom SQL() 引数を使用すると、問題なく動作することを偶然発見しました。
Oracle ODBC からの応答が遅いのを見た人はいますか?
私が理解している問題の一部は、このOracleデータベースのログインアカウントでは、サーバー上の一部のスキーマの一部のテーブルを表示できないため、最初にロードしてバイパスするときにクエリビルダーに時間がかかることです。 データベース アクセスにすべてのスキーマとテーブルが含まれる場合、複製できない場合があります。 カスタム SQL を直接送信すると、このスキーマとテーブルのスキャンがバイパスされますか?
次の例では、クエリ ビルダーを使用して、列とフィルターを選択しています。 100 万行の実行に 147 秒かかりました。 クエリ ビルダの [SQL] タブから SQL を選択するか、[カスタム SQL に変換] メニュー項目を使用してカスタム SQL をコピー (または [カスタム SQL] ウィンドウからクエリを実行) し、それをカスタムの引数として貼り付けます。 SQL() を実行し、100 万行の処理に 7 ~ 8 秒しかかかりませんでした。
// this is the JSL script generated by JMP Query Builder and saved to the datatable
// takes ~ 147 seconds to run
t1 = Tick Seconds();
New SQL Query(
Version( 130 ),
Connection(mycon),
QueryName( "Test1_147s" ),
Select(
Column( "X1", "t1" ),
Column( "X2", "t1" ),
Column( "X3", "t1" ),
Column( "X4", "t1" ),
Column(
"LAST_UPDATE_DATE",
"t1",
Numeric Format( "m/d/y h:m:s", "0", "NO", "" )
)
),
From( Table( "MY_DATABASE_TABLE", Schema( "SCHEMA" ), Alias( "t1" ) ) ),
Where(EQ(Column( "X2", "t1" ),"AAAA",UI( Comparison( Base( "Categorical" ) ) )))
) << Run foreground;
t2 = Tick Seconds();
t2-t1; // 147 seconds
// Now just copy the SQL code and put into the CustomSQL argument
// takes ~ 8 seconds to run
t1 = Tick Seconds();
New SQL Query(
Connection(mycon),
QueryName( "Test2_8s" ),
CustomSQL(
"SELECT t1.X1, t1.X2, t1.X3, t1.X4,
t1.LAST_UPDATE_DATE
FROM SCHEMA.MY_DATABASE_TABLE t1
WHERE ( ( ( t1.X2 = 'AAAA' ) ) )"
)
) << Run foreground;
t2 = Tick Seconds();
t2-t1; // 8 seconds
JMP Query Builder のベスト プラクティスについては、Oracle データベースのカスタム SQL ウィンドウからクエリとデータテーブルを実行および保存する方法を示す必要があります。
実績データありがとうございます。 解決策があるようです。
JMP が共有すべき洞察や提案をいくつか持っているかどうかを確認するのは興味深いことです。
それらのヒントをありがとう! さらにいくつかのテストを行いました。
Oracle データベースへの 2 回目の呼び出しの効果は確認できますが、それでも 2 つの JSL 手法には桁違いの違いがあります。 これをテストするには、JMP14 からログアウトするだけです。 遅いスキーマでテストを実行すると、初回の Custom SQL() に 0.4 秒かかります。 JMP の現在のセッション内で Custom SQL() スクリプトを繰り返し実行すると、0.06 秒に短縮されます。しかし、これは標準の Query Builder コードでは役に立ちません。何があっても 120 秒かかります。 遅いスキーマで発生した場合、Oracle データベースへの 1 回目と 2 回目の呼び出しの間で 0.4 から 0.06 の変化は、常に約 120 秒前後の繰り返しテストのノイズの中にあると思います。
「高速」スキーマもテストしました。 カスタム SQL の最初の実行も約 0.4 秒で、アクティブ セッションでの後続の呼び出しでは 0.06 秒に短縮されます。 標準の Query Builder コードの場合、最初の呼び出しは 1.2 秒で、アクティブな JMP セッションでの後続の呼び出しは 0.8 秒に短縮されます。
これらのテストから、カスタム SQL() のスキーマに関係なく最後のクエリをリコールするため、Oracle データベースへの繰り返し呼び出しで約 0.3 秒の短縮が見られますが、クエリ ビルダー スクリプトを使用した「遅い」スキーマではそれが見られません。スタイル。
ここでは、データベースを開く/データベースを閉じる方法は好きではありません (データベースが開いたままになることを懸念しています)。クエリ ビルダを使用することを好みますが、カスタム SQL() メソッドを使用して、クエリ ビルダから SQL コードを取得する必要があります。ユーザーインターフェース。