Was hat Sie zu dieser Wunschliste inspiriert?
Unsere JMP-Skripte, die in JMP 17 schnell ausgeführt werden, sind jetzt in JMP 18 viel langsamer, da OpenDatabase() zusätzliche und unnötige Datenwörterbuchabfragen durchführt.
Welche Verbesserung würden Sie gerne sehen?
Bitte erlauben Sie Benutzern, die Datenwörterbuchabfragen zu deaktivieren.
DETAILS -
In JMP 17 führte JMP beim Aufruf von OpenDatabase() mit benutzerdefiniertem SQL über eine ODBC-Verbindung (Oracle) zunächst zwei zusätzliche SQL-Abfragen aus, bevor die benutzerdefinierte SQL-Anweisung des Benutzers ausgeführt wurde:
WÄHLEN SIE DEN WERT AUS SYS.NLS_DATABASE_PARAMETERS, WO PARAMETER = 'NLS_CHARACTERSET'
WÄHLEN SIE DEN WERT AUS SYS.NLS_DATABASE_PARAMETERS, WO PARAMETER = 'NLS_NCHAR_CHARACTERSET'
Diese beiden Abfragen gaben keine Daten zurück, wurden jedoch sehr schnell auf dem Datenbankserver ausgeführt und verursachten daher für den JMP-Benutzer eine vernachlässigbare Verzögerung (0,5–1,0 Sekunden).
Wenn in JMP 18 der exakt gleiche OpenDatabase()-Aufruf mit benutzerdefiniertem SQL für dieselbe ODBC-Verbindung (Oracle, derselbe Server) ausgeführt wird, führt JMP dieselben 2 Pre-CustomSQL-Anweisungen sowie 2 zusätzliche Pre-CustomSQL-Anweisungen aus (die unten aufgeführten Anweisungen JMP18-SQL1_DD und JMP18-SQL2_DD).
Leider kann die Ausführung/Rückgabe dieser beiden zusätzlichen SQL-Anweisungen (DD = Data Dictionary) in unseren Unternehmensdatenbanken (mit einem recht umfangreichen Datenwörterbuch) zwischen 30 und 45 Sekunden dauern, was zu einer erheblichen Verzögerung bei der Ausführung des benutzerdefinierten SQL des JMP-Benutzers führt. Da der JMP-Benutzer lediglich die Ergebnisse seines benutzerdefinierten SQL benötigt und die DD-SQL-Ergebnisse nicht benötigt (er kann nicht einmal darauf zugreifen oder sie in irgendeiner Weise verwenden, um JMP zu beeinflussen, wodurch die Datenbankverbindung sofort geschlossen wird), ist diese zusätzliche Verzögerung sinnlos.
Aus diesem Grund beantrage ich die Erstellung einer neuen JMP 18-Version mit einer booleschen Einstellung (Einstellungen -> Tabellen -> ODBC-Datenwörterbuch prüfen), die standardmäßig auf „Ein“ eingestellt ist und auf „Aus“ gesetzt werden kann, um die Ausführung dieser beiden zusätzlichen SQL-Anweisungen zu deaktivieren.
Weitere technische Einzelheiten finden Sie in den beigefügten Zeitangaben von JMP 17 und 18 sowie in den Pre-CustomSQL-Anweisungen, die bei Verwendung von OpenDatabase() ausgeführt werden.
Fred Zellinger.
JMP 17 OpenDatabase() Transaktionen mit Datenbank:
(0,00–0,41 Sek.) – Verbindungszeichenfolge, Authentifizierung, Client-/Datenbankdetails austauschen
( @0,41 Sek.) - WÄHLEN SIE WERT AUS SYS.NLS_DATABASE_PARAMETERS, WO PARAMETER = 'NLS_CHARACTERSET' = ORA-01403: Keine Daten gefunden
( @0,51 Sek.) - WÄHLEN SIE WERT AUS SYS.NLS_DATABASE_PARAMETERS, WO PARAMETER = 'NLS_NCHAR_CHARACTERSET' = ORA-01403: Keine Daten gefunden
( @0,68 Sek.) – ...benutzerdefiniertes SQL ausführen
( @0,65 Sek.) – ...Datenrückgabe beginnen
JMP 18 OpenDatabase() Transaktionen mit Datenbank:
(0,00–0,74 Sek.) – Verbindung beginnen, Verbindungszeichenfolge, Authentifizierung, Client-/Datenbankdetails austauschen
( @ 0,74 Sek.) - WÄHLEN SIE WERT AUS SYS.NLS_DATABASE_PARAMETERS, WO PARAMETER = 'NLS_CHARACTERSET' = ORA-01403: Keine Daten gefunden
( @ 0,84 Sek.) - WÄHLEN SIE WERT AUS SYS.NLS_DATABASE_PARAMETERS, WO PARAMETER = 'NLS_CHARACTERSET' = ORA-01403: Keine Daten gefunden
(0,92–26,90 Sek.) – Führen Sie JMP18-SQL1_DD aus und geben Sie Daten zurück
(26,90–43,32 Sek.) – Führen Sie JMP18-SQL2_DD aus und geben Sie Daten zurück
( @43.33sec) - ...benutzerdefiniertes SQL ausführen
( @43.34sec) - ...beginnen Sie mit der Datenrückgabe
JMP18-SQL1_DD:
wählen Sie * aus (
wählen
null Tabellenqualifikator, o1.Eigentümer Tabellenbesitzer, o1.Objektname Tabellenname
, dekodieren(o1.Eigentümer,'SYS', dekodieren(o1.Objekttyp,'TABELLE','SYSTEMTABELLE','ANSICHT', 'SYSTEMANSICHT', o1.Objekttyp), 'SYSTEM'
, dekodieren(o1.Objekttyp,'TABELLE','SYSTEMTABELLE','ANSICHT', 'SYSTEMANSICHT', o1.Objekttyp), o1.Objekttyp
) Tabellentyp
, Nullbemerkungen
von allen_Objekten o1
wobei o1.object_type in ('TABLE', 'VIEW')
Union
wählen
null Tabellenqualifikator, s.Eigentümer Tabellenbesitzer, s.Synonymname Tabellenname
, 'SYNONYM' Tabellentyp
, Nullbemerkungen
von allen Objekten o3, allen Synonymen s
wobei o3.object_type in ('TABLE','VIEW')
und s.table_owner = o3.owner und s.table_name = o3.object_name
Union
wählen
null Tabellenqualifikator, s1.Eigentümer Tabellenbesitzer, s1.Synonymname Tabellenname
, 'SYNONYM' Tabellentyp
, Nullbemerkungen
von all_synonyms s1
wobei s1.db_link nicht null ist
) Tabellen
WO 1=1 UND (Tabellentyp = 'TABELLE')
ORDER BY 4,2,3
JMP18-SQL2_DD:
wählen Sie * aus (
wählen
null Tabellenqualifikator, o1.Eigentümer Tabellenbesitzer, o1.Objektname Tabellenname
, dekodieren(o1.owner,'SYS'
, dekodieren(o1.Objekttyp,'TABELLE','SYSTEMTABELLE','ANSICHT', 'SYSTEMANSICHT', o1.Objekttyp), 'SYSTEM'
, dekodieren(o1.Objekttyp,'TABELLE','SYSTEMTABELLE','ANSICHT', 'SYSTEMANSICHT', o1.Objekttyp)
, o1.Objekttyp) Tabellentyp
, Nullbemerkungen
von allen_Objekten o1
wobei o1.object_type in ('TABLE', 'VIEW')
Union
wählen
null Tabellenqualifikator, s.Eigentümer Tabelleneigentümer, s.Synonymname Tabellenname, 'SYNONYM' Tabellentyp, null Bemerkungen
von allen Objekten o3, allen Synonymen s
wobei o3.object_type in ('TABLE','VIEW')
und s.table_owner = o3.owner und s.table_name = o3.object_name
Union
wählen
null Tabellenqualifikator, s1.Eigentümer Tabelleneigentümer, s1.Synonymname Tabellenname, „SYNONYM“ Tabellentyp, null Bemerkungen
von all_synonyms s1
wobei s1.db_link nicht null ist) Tabellen
WO 1=1 UND (Tabellentyp = 'TABELLE')
ORDER BY 4,2,3
Warum ist diese Idee wichtig?