¿Qué inspiró esta solicitud de lista de deseos?
Nuestros scripts JMP que se ejecutan rápidamente en JMP 17 ahora son mucho más lentos en JMP 18 porque OpenDatabase() realiza consultas de diccionario de datos adicionales e innecesarias.
¿Cuál es la mejora que le gustaría ver?
Permita que los usuarios desactiven las consultas del diccionario de datos.
DETALLES -
En JMP 17, al llamar a OpenDatabase() con SQL personalizado contra una conexión ODBC (Oracle), JMP ejecutaría inicialmente dos consultas SQL adicionales antes de ejecutar la declaración SQL personalizada del usuario:
SELECCIONAR VALOR DE SYS.NLS_DATABASE_PARAMETERS DONDE PARÁMETRO = 'NLS_CHARACTERSET'
SELECCIONAR VALOR DE SYS.NLS_DATABASE_PARAMETERS DONDE PARÁMETRO = 'NLS_NCHAR_CHARACTERSET'
Estas dos consultas no devolvieron datos, pero se ejecutaron muy rápidamente en el servidor de base de datos y, por lo tanto, provocaron un retraso insignificante (0,5~1,0 segundos) para el usuario de JMP.
En JMP 18, al realizar exactamente la misma llamada OpenDatabase() con SQL personalizado contra la misma conexión ODBC (Oracle, mismo servidor), JMP ejecuta las mismas 2 declaraciones SQL personalizadas previas, así como 2 declaraciones SQL personalizadas previas adicionales (declaraciones JMP18-SQL1_DD y JMP18-SQL2_DD enumeradas a continuación).
Desafortunadamente, en nuestras bases de datos empresariales (que cuentan con un diccionario de datos bastante grande), estas dos sentencias SQL adicionales (DD=Diccionario de Datos) pueden tardar entre 30 y 45 segundos en ejecutarse/devolverse, lo que provoca un retraso significativo en la ejecución del SQL personalizado del usuario de JMP. Dado que el usuario de JMP solo desea los resultados de su SQL personalizado y no necesita los resultados de DD (ni siquiera puede acceder a ellos ni usarlos de ninguna manera para afectar a JMP, que cierra la conexión a la base de datos inmediatamente), este retraso adicional no tiene sentido.
Por lo tanto, solicito que se cree una nueva versión de JMP 18 con una preferencia booleana (Preferencias->Tablas->Diccionario de datos de inspección ODBC) con el valor predeterminado "activado", que se puede configurar como "desactivado", deshabilitando así la ejecución de estas dos declaraciones SQL adicionales.
Para obtener más detalles técnicos, consulte los tiempos adjuntos de JMP 17 y 18 y las declaraciones SQL previas a la personalización que se ejecutan cuando se utiliza OpenDatabase().
Fred Zellinger.
JMP 17 OpenDatabase() Transacciones con base de datos:
(0,00~0,41 segundos): intercambio de cadena de conexión, autenticación, detalles del cliente/base de datos
( @0.41sec) - SELECCIONAR VALOR DE SYS.NLS_DATABASE_PARAMETERS DONDE PARÁMETRO = 'NLS_CHARACTERSET' = ORA-01403: no se encontraron datos
( @0.51sec) - SELECCIONAR VALOR DE SYS.NLS_DATABASE_PARAMETERS DONDE PARÁMETRO = 'NLS_NCHAR_CHARACTERSET' = ORA-01403: no se encontraron datos
( @0,68 segundos) - ...ejecutar SQL personalizado del usuario
( @0.65sec) - ...comienza el retorno de datos
JMP 18 OpenDatabase() Transacciones con base de datos:
(0,00 ~ 0,74 segundos): iniciar conexión, intercambiar cadena de conexión, autenticación, detalles del cliente/base de datos
( @ 0,74 segundos) - SELECCIONAR VALOR DE SYS.NLS_DATABASE_PARAMETERS DONDE PARÁMETRO = 'NLS_CHARACTERSET' = ORA-01403: no se encontraron datos
( @ 0,84 segundos) - SELECCIONAR VALOR DE SYS.NLS_DATABASE_PARAMETERS DONDE PARÁMETRO = 'NLS_CHARACTERSET' = ORA-01403: no se encontraron datos
(0,92~26,90 segundos) - Ejecutar JMP18-SQL1_DD y devolver datos
(26,90~43,32 s) - Ejecutar JMP18-SQL2_DD y devolver datos
( @43.33sec) - ...ejecutar SQL personalizado del usuario
( @43.34sec) - ...comienza el retorno de datos
JMP18-SQL1_DD:
seleccionar * de (
seleccionar
calificador_de_tabla nulo, o1.propietario propietario_de_tabla, o1.nombre_de_objeto nombre_de_tabla
, decodificar(o1.propietario,'SYS', decodificar(o1.tipo_de_objeto,'TABLA','TABLA DEL SISTEMA','VISTA', 'VISTA DEL SISTEMA', o1.tipo_de_objeto), 'SISTEMA'
, decodificar(o1.tipo_de_objeto,'TABLA','TABLA DEL SISTEMA','VISTA', 'VISTA DEL SISTEMA', o1.tipo_de_objeto), o1.tipo_de_objeto
) tipo_de_tabla
, observaciones nulas
de todos los objetos o1
donde o1.object_type en ('TABLA', 'VISTA')
unión
seleccionar
calificador_de_tabla nulo, s.propietario propietario_de_tabla, s.nombre_de_sinónimo nombre_de_tabla
, tipo de tabla 'SINÓNIMO'
, observaciones nulas
de todos los objetos o3, todos los sinónimos s
donde o3.object_type en ('TABLA','VISTA')
y s.table_owner = o3.owner y s.table_name = o3.object_name
unión
seleccionar
calificador_de_tabla nulo, s1.propietario propietario_de_tabla, s1.nombre_de_sinónimo nombre_de_tabla
, tipo de tabla 'SINÓNIMO'
, observaciones nulas
de todos los sinónimos s1
donde s1.db_link no es nulo
) tablas
DONDE 1=1 Y ( tipo_tabla = 'TABLA' )
ORDENAR POR 4,2,3
JMP18-SQL2_DD:
seleccionar * de (
seleccionar
calificador_de_tabla nulo, o1.propietario propietario_de_tabla, o1.nombre_de_objeto nombre_de_tabla
, decodificar(o1.propietario,'SYS'
, decodificar(o1.tipo_de_objeto,'TABLA','TABLA DEL SISTEMA','VISTA', 'VISTA DEL SISTEMA', o1.tipo_de_objeto), 'SISTEMA'
, decodificar(o1.tipo_de_objeto,'TABLA','TABLA DEL SISTEMA','VISTA', 'VISTA DEL SISTEMA', o1.tipo_de_objeto)
, o1.tipo_de_objeto) tipo_de_tabla
, observaciones nulas
de todos los objetos o1
donde o1.object_type en ('TABLA', 'VISTA')
unión
seleccionar
calificador de tabla nulo, s.propietario propietario de tabla, s.sinónimo nombre de tabla, 'SINÓNIMO' tipo de tabla, nulo observaciones
de todos los objetos o3, todos los sinónimos s
donde o3.object_type en ('TABLA','VISTA')
y s.table_owner = o3.owner y s.table_name = o3.object_name
unión
seleccionar
calificador de tabla nulo, s1.propietario propietario de tabla, s1.sinónimo nombre de tabla, 'SINÓNIMO' tipo de tabla, nulo observaciones
de todos los sinónimos s1
donde s1.db_link no es nulo) tablas
DONDE 1=1 Y ( tipo_tabla = 'TABLA' )
ORDENAR POR 4,2,3
¿Por qué es importante esta idea?