是什么启发了这个愿望清单请求?
我们的 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-customSQL 语句(下面列出的语句 JMP18-SQL1_DD 和 JMP18-SQL2_DD)。
遗憾的是,在我们的企业数据库(数据字典相当庞大)上,这两条额外的 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