이러한 위시리스트 요청은 무엇에서 비롯된 것일까요?
JMP 17에서는 빠르게 실행되던 JMP 스크립트가 이제 JMP 18에서는 훨씬 느려졌습니다. 그 이유는 OpenDatabase()가 추가적이고 불필요한 데이터 사전 쿼리를 수행하기 때문입니다.
어떤 개선을 원하시나요?
사용자가 데이터 사전 쿼리를 비활성화할 수 있도록 허용해 주세요.
세부 정보 -
JMP 17에서 ODBC 연결(Oracle)에 대해 사용자 정의 SQL을 사용하여 OpenDatabase()를 호출할 때 JMP는 사용자의 사용자 정의 SQL 문을 실행하기 전에 먼저 두 개의 추가 SQL 쿼리를 실행합니다.
SYS.NLS_DATABASE_PARAMETERS에서 매개변수 = 'NLS_CHARACTERSET'인 값을 선택하세요.
SYS.NLS_DATABASE_PARAMETERS에서 매개변수 = 'NLS_NCHAR_CHARACTERSET'인 값을 선택하세요.
이 두 쿼리는 데이터를 반환하지 않았지만 데이터베이스 서버에서 매우 빠르게 실행되어 JMP 사용자에게 무시할 수 있는 지연(0.5~1.0초)을 발생시켰습니다.
JMP 18에서 동일한 ODBC 연결(Oracle, 동일한 서버)에 대해 사용자 정의 SQL을 사용하여 정확히 동일한 OpenDatabase() 호출을 수행할 때 JMP는 동일한 2개의 사전 사용자 정의 SQL 명령문과 2개의 추가 사전 사용자 정의 SQL 명령문(아래에 나열된 명령문 JMP18-SQL1_DD 및 JMP18-SQL2_DD)을 실행합니다.
안타깝게도, 상당히 큰 데이터 사전을 사용하는 저희 엔터프라이즈 데이터베이스에서는 이 두 가지 추가 SQL(DD=Data Dictionary) 명령문이 실행/반환되는 데 30초에서 45초까지 소요될 수 있으며, 이로 인해 JMP 사용자의 사용자 지정 SQL 실행에 상당한 지연이 발생합니다. JMP 사용자는 사용자 지정 SQL 결과만 원할 뿐 DD SQL 결과는 필요하지 않습니다(데이터 사전 결과에 접근하거나 사용할 수 없어 JMP에 영향을 미쳐 데이터베이스 연결이 즉시 종료됩니다). 따라서 이러한 추가 지연은 아무런 의미가 없습니다.
따라서 저는 '켜짐'으로 기본 설정된 부울 기본 설정(기본 설정->테이블->ODBC 데이터 사전 검사)을 갖는 새로운 JMP 18 릴리스를 생성해 달라고 요청하고 있습니다. 이 기본 설정은 '꺼짐'으로 설정할 수 있으며, 이를 통해 두 개의 추가 SQL 문이 실행되지 않도록 할 수 있습니다.
더 자세한 기술적인 내용은 JMP 17 및 18의 첨부된 타이밍과 OpenDatabase()를 사용할 때 실행되는 사전 사용자 지정 SQL 문을 참조하세요.
프레드 젤린저.
JMP 17 OpenDatabase() 데이터베이스와의 트랜잭션:
(0.00~0.41초) - 연결 문자열, 인증, 클라이언트/데이터베이스 세부 정보 교환
(@0.41초) - SELECT VALUE FROM SYS.NLS_DATABASE_PARAMETERS WHERE PARAMETER = 'NLS_CHARACTERSET' = ORA-01403: 데이터를 찾을 수 없습니다.
(@0.51초) - SELECT VALUE FROM 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초) - SELECT VALUE FROM SYS.NLS_DATABASE_PARAMETERS WHERE PARAMETER = 'NLS_CHARACTERSET' = ORA-01403: 데이터를 찾을 수 없습니다.
(0.84초) - SELECT VALUE FROM 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.소유자 테이블_소유자, o1.객체_이름 테이블_이름
, decode(o1.owner,'SYS', decode(o1.object_type,'TABLE','SYSTEM TABLE','VIEW', 'SYSTEM VIEW', o1.object_type), 'SYSTEM'
, decode(o1.object_type,'TABLE','SYSTEM TABLE','VIEW', 'SYSTEM VIEW', o1.object_type), o1.object_type
) 테이블_유형
, null 설명
모든 객체 o1에서
여기서 o1.object_type은 ('TABLE', 'VIEW')입니다.
노동 조합
선택하다
null table_qualifier, s.owner table_owner, s.synonym_name table_name
, '동의어' 테이블 유형
, null 설명
모든 객체 o3, 모든 동의어 s
여기서 o3.object_type은 ('TABLE','VIEW')입니다.
그리고 s.table_owner = o3.owner 및 s.table_name = o3.object_name
노동 조합
선택하다
null 테이블 한정자, s1. 소유자 테이블 소유자, s1. 동의어 이름 테이블 이름
, '동의어' 테이블 유형
, null 설명
all_synonyms s1에서
여기서 s1.db_link는 null이 아닙니다.
) 테이블
WHERE 1=1 AND ( table_type = 'TABLE' )
4,2,3으로 주문하세요
JMP18-SQL2_DD:
(에서 *를 선택하세요
선택하다
null 테이블_수식자, o1.소유자 테이블_소유자, o1.객체_이름 테이블_이름
, decode(o1.owner,'SYS'
, decode(o1.object_type,'TABLE','SYSTEM TABLE','VIEW', 'SYSTEM VIEW', o1.object_type), 'SYSTEM'
, decode(o1.object_type,'TABLE','SYSTEM TABLE','VIEW', 'SYSTEM VIEW', o1.object_type)
, o1.object_type) 테이블_유형
, null 설명
모든 객체 o1에서
여기서 o1.object_type은 ('TABLE', 'VIEW')입니다.
노동 조합
선택하다
null table_qualifier, s.owner table_owner, s.synonym_name table_name, 'SYNONYM' table_type, null 설명
모든 객체 o3, 모든 동의어 s
여기서 o3.object_type은 ('TABLE','VIEW')입니다.
그리고 s.table_owner = o3.owner 및 s.table_name = o3.object_name
노동 조합
선택하다
null table_qualifier, s1.owner table_owner, s1.synonym_name table_name, 'SYNONYM' table_type, null 설명
all_synonyms s1에서
s1.db_link가 null이 아닌 경우) 테이블
WHERE 1=1 AND ( table_type = 'TABLE' )
4,2,3으로 주문하세요
이 아이디어가 왜 중요한가요?