是什麼啟發了這個願望清單請求?
我們的 JMP 腳本在 JMP 17 中運行速度很快,但在 JMP 18 中卻慢得多,因為 OpenDatabase() 正在執行額外的、不必要的資料字典查詢。
您希望看到什麼改進?
請允許使用者停用資料字典查詢。
細節 -
在 JMP 17 中,當使用自訂 SQL 針對 ODBC 連線(Oracle)呼叫 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 個 pre-customSQL 語句,以及 2 個額外的 pre-customSQLSQL 語句(下方列出的語句 JSQL18-11_DD 我們)。
不幸的是,在我們的企業資料庫(具有相當大的資料字典)上,這 2 個額外的 SQL(DD = 資料字典)語句可能需要 30 到 45 秒才能執行/返回,從而導致 JMP 用戶自訂 SQL 的運行出現顯著延遲。並且,考慮到 JMP 使用者僅僅想要他們自訂 SQL 的結果而不需要 DD sql 結果(甚至無法存取它們或以任何方式使用它們來影響 JMP,因為 JMP 會立即關閉資料庫連接),這種額外的延遲沒有任何意義。
因此,我請求建立一個新的 JMP 18 版本,其布林首選項(首選項->表格->ODBC 檢查資料字典)預設為“開”,可以設定為“關”,從而停用這兩個額外的 SQL 語句運行。
如需更多技術細節,請參閱附加的 JMP 17 和 18 的時間以及使用 OpenDatabase() 時執行的預先自訂 SQL 語句。
弗雷德·澤林格。
JMP 17 OpenDatabase() 與資料庫的交易:
(0.00~0.41秒)- 交換連接字串、身份驗證、客戶端/資料庫詳細信息
(@0.41 秒)- 從 SYS.NLS_DATABASE_PARAMETERS 中選擇值,其中參數 = 'NLS_CHARACTERSET' = ORA-01403:未找到數據
(@0.51 秒)- 從 SYS.NLS_DATABASE_PARAMETERS 中選擇值,其中參數 = 'NLS_NCHAR_CHARACTERSET' = ORA-01403:未找到數據
(@0.68 秒)-...執行使用者自訂 SQL
(@0.65秒) - ...開始返回數據
JMP 18 OpenDatabase() 與資料庫的交易:
(0.00~0.74秒)- 開始連接,交換連接字串,授權,客戶端/資料庫詳細信息
(@ 0.74 秒)- 從 SYS.NLS_DATABASE_PARAMETERS 中選擇值,其中參數 = 'NLS_CHARACTERSET' = ORA-01403:未找到數據
(@ 0.84 秒)- 從 SYS.NLS_DATABASE_PARAMETERS 中選擇值,其中參數 = '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.owner 表所有者,o1.object_name 表名稱
,解碼(o1.owner,'SYS',解碼(o1.object_type,'TABLE','系統表','VIEW','系統視圖',o1.object_type),'SYSTEM'
,解碼(o1.object_type,'表','系統表','視圖','系統視圖',o1.object_type),o1.object_type
) 表類型
,空備註
來自 all_objects o1
其中 o1.object_type 位於('TABLE','VIEW')
聯盟
選擇
null table_qualifier,s.owner table_owner,s.synonym_name table_name
, '同義詞' 表類型
,空備註
來自 all_objects o3、all_synonyms s
其中 o3.object_type 位於('TABLE','VIEW')
並且 s.table_owner= o3.owner 和 s.table_name = o3.object_name
聯盟
選擇
null 表限定符,s1.owner 表所有者,s1.synonym_name 表名稱
, '同義詞' 表類型
,空備註
來自 all_synonyms s1
其中 s1.db_link 不為空
) 表
其中 1=1 且(table_type = 'TABLE')
依 4,2,3 排序
JMP18-SQL2_DD:
從 ( 中選擇 *
選擇
null 表限定符,o1.owner 表所有者,o1.object_name 表名稱
,解碼(o1.owner,'SYS'
,解碼(o1.object_type,'TABLE','SYSTEM TABLE','VIEW','SYSTEM VIEW',o1.object_type),'SYSTEM'
,解碼(o1.object_type,'表','系統表','視圖','系統視圖',o1.object_type)
,o1.物件類型)表類型
,空備註
來自 all_objects o1
其中 o1.object_type 位於('TABLE','VIEW')
聯盟
選擇
null table_qualifier、s.owner table_owner、s.synonym_name table_name、'SYNONYM' table_type、null 備註
來自 all_objects o3、all_synonyms 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 不為空 ) 表
其中 1=1 且(table_type = 'TABLE')
依 4,2,3 排序
為什麼這個想法很重要?
據醫生說,

驅動程式設定中的此複選框控制正在進行的 NLS 查詢。 JMP 不會對
SYS.NLS_DATABASE_PARAMETERS