Qu'est-ce qui a inspiré cette demande de liste de souhaits ?
Nos scripts JMP qui s'exécutent rapidement dans JMP 17 sont désormais beaucoup plus lents dans JMP 18 car OpenDatabase() exécute des requêtes de dictionnaire de données supplémentaires et inutiles.
Quelle est l’amélioration que vous aimeriez voir ?
Veuillez autoriser les utilisateurs à désactiver les requêtes du dictionnaire de données.
DÉTAILS -
Dans JMP 17, lors de l'appel d'OpenDatabase() avec SQL personnalisé sur une connexion ODBC (Oracle), JMP exécutait initialement deux requêtes SQL supplémentaires avant d'exécuter l'instruction SQL personnalisée de l'utilisateur :
SÉLECTIONNEZ LA VALEUR DANS SYS.NLS_DATABASE_PARAMETERS OÙ PARAMETER = 'NLS_CHARACTERSET'
SÉLECTIONNEZ LA VALEUR DANS SYS.NLS_DATABASE_PARAMETERS OÙ PARAMETER = 'NLS_NCHAR_CHARACTERSET'
Ces deux requêtes n'ont renvoyé aucune donnée mais ont été exécutées très rapidement sur le serveur de base de données, provoquant ainsi un retard négligeable (0,5 à 1,0 s) pour l'utilisateur JMP.
Dans JMP 18, lors de l'exécution du même appel OpenDatabase() avec SQL personnalisé sur la même connexion ODBC (Oracle, même serveur), JMP exécute les 2 mêmes instructions pré-customSQL, ainsi que 2 instructions pré-customSQL supplémentaires (instructions JMP18-SQL1_DD et JMP18-SQL2_DD répertoriées ci-dessous).
Malheureusement, sur nos bases de données d'entreprise (qui disposent d'un dictionnaire de données assez volumineux), ces deux instructions SQL supplémentaires (DD = Data Dictionary) peuvent prendre entre 30 et 45 secondes pour s'exécuter et renvoyer, ce qui entraîne un retard important dans l'exécution du SQL personnalisé de l'utilisateur JMP. De plus, étant donné que l'utilisateur JMP souhaite uniquement obtenir les résultats de son SQL personnalisé et n'a pas besoin des résultats du SQL DD (il ne peut même pas y accéder ni les utiliser pour affecter JMP, ce qui ferme immédiatement la connexion à la base de données), ce délai supplémentaire est inutile.
Par conséquent, je demande qu'une nouvelle version de JMP 18 soit créée avec une préférence booléenne (Préférences->Tables->ODBC Inspect Data Dictionary) par défaut sur « on », qui peut être définie sur « off », désactivant ainsi l'exécution de ces deux instructions SQL supplémentaires.
Pour plus de détails techniques, veuillez consulter les timings ci-joints de JMP 17 et 18 et les instructions pré-customSQL exécutées lors de l'utilisation d'OpenDatabase().
Fred Zellinger.
JMP 17 OpenDatabase() Transactions avec la base de données :
(0,00~0,41 sec) – chaîne de connexion d'échange, authentification, détails du client/de la base de données
( @0,41 sec) - SÉLECTIONNER LA VALEUR DANS SYS.NLS_DATABASE_PARAMETERS OÙ PARAMETER = 'NLS_CHARACTERSET' = ORA-01403 : aucune donnée trouvée
( @0,51 s) - SÉLECTIONNER LA VALEUR DANS SYS.NLS_DATABASE_PARAMETERS OÙ PARAMETER = 'NLS_NCHAR_CHARACTERSET' = ORA-01403 : aucune donnée trouvée
( @0,68 s) - ...exécuter le SQL personnalisé de l'utilisateur
( @0,65 s) - ...début du retour des données
JMP 18 OpenDatabase() Transactions avec la base de données :
( 0,00~ 0,74 s) - début de la connexion, échange de chaîne de connexion, authentification, détails du client/de la base de données
(@ 0,74 sec) - SÉLECTIONNER LA VALEUR DANS SYS.NLS_DATABASE_PARAMETERS OÙ PARAMETER = 'NLS_CHARACTERSET' = ORA-01403 : aucune donnée trouvée
(@ 0,84 sec) - SÉLECTIONNER LA VALEUR DANS SYS.NLS_DATABASE_PARAMETERS OÙ PARAMETER = 'NLS_CHARACTERSET' = ORA-01403 : aucune donnée trouvée
(0,92~26,90 s) - Exécutez JMP18-SQL1_DD et renvoyez les données
(26,90~43,32 sec) - Exécuter JMP18-SQL2_DD et renvoyer les données
( @43.33sec) - ...exécuter le SQL personnalisé de l'utilisateur
( @43.34sec) - ...commencer le retour des données
JMP18-SQL1_DD :
sélectionnez * parmi (
sélectionner
null table_qualifier, o1.owner table_owner, o1.object_name table_name
, décoder(o1.owner,'SYS', décoder(o1.object_type,'TABLE','TABLEAU SYSTÈME','VUE', 'VUE SYSTÈME', o1.object_type), 'SYSTÈME'
, décoder(o1.object_type,'TABLE','TABLEAU SYSTÈME','VUE', 'VUE SYSTÈME', o1.object_type), o1.object_type
) type_de_table
, remarques nulles
de tous les objets o1
où o1.object_type dans ('TABLE', 'VIEW')
union
sélectionner
null qualificateur_de_table, s.owner propriétaire_de_table, s.nom_synonyme nom_de_table
, type_table 'SYNONYME'
, remarques nulles
de tous les objets o3, tous les synonymes s
où o3.object_type dans ('TABLE','VIEW')
et s.table_owner = o3.owner et s.table_name = o3.object_name
union
sélectionner
null table_qualifier, s1.owner table_owner, s1.synonym_name table_name
, type_table 'SYNONYME'
, remarques nulles
de tous les synonymes s1
où s1.db_link n'est pas nul
) tables
OÙ 1=1 ET (table_type = 'TABLE' )
COMMANDER PAR 4,2,3
JMP18-SQL2_DD :
sélectionnez * parmi (
sélectionner
null table_qualifier, o1.owner table_owner, o1.object_name table_name
, décoder(o1.owner,'SYS'
, decode(o1.object_type,'TABLE','TABLEAU SYSTÈME','VUE', 'VUE SYSTÈME', o1.object_type), 'SYSTÈME'
, décoder(o1.object_type,'TABLE','TABLEAU SYSTÈME','VUE', 'VUE SYSTÈME', o1.object_type)
, o1.object_type) type_table
, remarques nulles
de tous les objets o1
où o1.object_type dans ('TABLE', 'VIEW')
union
sélectionner
null table_qualifier, s.owner table_owner, s.synonym_name table_name, 'SYNONYM' table_type, null remarks
de tous les objets o3, tous les synonymes s
où o3.object_type dans ('TABLE','VIEW')
et s.table_owner = o3.owner et s.table_name = o3.object_name
union
sélectionner
null table_qualifier, s1.owner table_owner, s1.synonym_name table_name, 'SYNONYM' table_type, null remarks
de tous les synonymes s1
où s1.db_link n'est pas nul ) tables
OÙ 1=1 ET (table_type = 'TABLE' )
COMMANDER PAR 4,2,3
Pourquoi cette idée est-elle importante ?