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을 제출하면 이 스키마 및 테이블 스캔을 우회합니까?
아래 예에서는 Query Builder를 사용하여 열과 필터를 선택했습니다. 백만 행을 실행하는 데 147초가 걸렸습니다. 이제 Query Builder의 SQL 탭에서 SQL을 선택하거나 "Convert to custom SQL" 메뉴 항목을 사용하고 Custom SQL을 복사(또는 Custom SQL 창에서 쿼리 실행)하여 Custom에 대한 인수로 붙여넣습니다. SQL(), 백만 행에 대해 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 데이터베이스에 대한 두 번째 호출의 효과를 볼 수 있지만 여전히 두 JSL 기술 간의 크기 차이를 볼 수 있습니다. 이것을 테스트하려면 JMP14에서 로그아웃하기만 하면 됩니다. 느린 스키마에서 테스트를 실행하면 처음 Custom SQL()에 0.4초가 걸립니다. JMP의 현재 세션 내에서 Custom SQL() 스크립트를 반복 실행하면 0.06초로 줄어듭니다.그러나 이것은 표준 Query Builder 코드에는 도움이 되지 않으며, 무슨 일이 있어도 120초가 걸립니다. 느린 스키마에 대해 발생하는 경우 Oracle 데이터베이스에 대한 첫 번째 호출과 두 번째 호출 사이의 0.4에서 0.06 사이의 변경은 항상 약 120초 정도 반복 테스트의 소음에 있다고 생각합니다.
"빠른" 스키마도 테스트했습니다. 사용자 지정 SQL의 첫 번째 실행도 ~0.4초이고 활성 세션에서 후속 호출에 대해 0.06초로 줄어듭니다. 표준 Query Builder 코드의 경우 첫 번째 호출은 1.2초이고 활성 JMP 세션의 후속 호출은 0.8초로 줄어듭니다.
이러한 테스트에서 Custom SQL()의 스키마에 상관없이 마지막 쿼리를 회수하지만 쿼리 빌더 스크립트를 사용하는 "느린" 스키마에서는 볼 수 없기 때문에 Oracle 데이터베이스에 대한 반복 호출이 ~0.3초 감소하는 것을 확인했습니다. 스타일.
여기서는 Open Database/Close Database 방법이 마음에 들지 않습니다(데이터베이스를 열어 두는 것이 걱정됨). Query Builder 사용을 선호하지만 Custom SQL() 방법을 사용하고 Query Builder에서 SQL 코드를 캡처해야 합니다. 사용자 인터페이스.