这个函数是java调用IRIS上的方法或者routine。

比如有一个routine的名字是NativeRoutine,routine中有一个方法的名字是fnString,方法调用的参数是"World"

那么从Java调用就可以:

String stringVal = irisjv.functionString("fnString",routineName,"World");

详细文档可以参考:https://docs.intersystems.com/irisforhealthlatest/csp/docbook/DocBook.UI.Page.cls?KEY=BJAVNAT_call

由以上信息不足以判断安装失败的原因。从我的经验看,最主要安装失败的原因是安装版本和操作系统不匹配造成。

请根据文档 https://docs.intersystems.com/irisforhealth20221/csp/docbook/DocBook.UI.... 确定安装包支持的操作系统。

并同时注意安装IRIS的服务器芯片组,比如是x86-64 或 ARM64等,需要对应不同的安装文件。

可参考文档:https://docs.intersystems.com/ens201817/csp/docbook/DocBook.UI.Page.cls?...

提供以下方法/工具分析sql性能:

SQL运行时统计:生成查询执行的性能统计。

索引分析器:显示当前命名空间中所有查询的各种索引分析器报告。这显示了Caché SQL要如何执行查询,让你对索引的使用情况有一个整体的了解。这个索引分析可能表明,你应该添加一个或多个索引来提高性能。

显示计划:显示SQL查询的最佳(默认)执行计划。

备选显示计划:显示一个SQL查询的可用备选执行计划,并附有统计数据。

索引优化选项:可用FROM子句来管理所有的条件,或者用%NOINDEX作为单个条件的前导。

并行查询处理 :可用%PARALLEL关键字的FROM子句选项,允许多处理器系统在各处理器之间划分查询执行。

请参考文档:https://docs.intersystems.com/irisforhealth20231/csp/docbook/Doc.View.cl... 提供更多ODBC 日志以供错误排查。

也可以在菜单中选择系统操作 -- 系统日志 -- xDBC错误日志查看。

还可以尝试使用其他三方ODBC工具,同样加载该odbc驱动,看是否报错。

可以将Java Gateway Service的日志打开,设置方法是在Production管理页面选中该组件上,在设置中设置日志文件(包括路径和文件名称)。如果问题再次出现,我们可以对日志文件进行分析,开启之后请注意该文件的大小增长。

另外,linux的Dynamic TCP port范围是32768~60999,可通过下面的命令进行查询,例如(在RedHat7.9下),

sysctl net.ipv4.ip_local_port_range

net.ipv4.ip_local_port_range = 32768 60999

在这个范围内的tcp端口号可能会被系统动态分配给其他进程使用,所以建议咱们更改一个不在此范围内的端口号。

这个具体要看代码Fetch2函数的第4行是什么,有可能是在query中使用了Unicode字符,可以尝试使用PrepareW替代Prepare函数,也有可能某些函数仅支持$CHAR(0) 到 $CHAR(255),比如Base64 encoding。

或者在安装的时候需要选择Unicode而不是8-bit的安装参数。

具体原因需要根据源代码分析。

建议在Unix上使用JDBCGateway,因为目前只有iODBC支持Unicode

下面是示例代码使用JDBCGateway

#dim %JDBCGateway As %Net.Remote.Java.JDBCGateway
 set conn = $system.SQLGateway.GetJDBCConnection("TestConn")
 if (conn = "") quit 0
 set cmd = "select c1,c2,c3 from wrc943403 where c1 = ?"
 set st = %JDBCGateway.prepareStatement(conn, cmd)
 do %JDBCGateway.setString(st,1,9) // assign c1 to 9
 set res = %JDBCGateway.execQuery(st)
 if (res) {
   set error = %JDBCGateway.getErrorText()
   write "error = ",error,!
   quit
 }
 while %JDBCGateway.next(st) {
   set c1 = %JDBCGateway.getString(st,1)
   set c2 = %JDBCGateway.getString(st,2)
   write "c1=",c1,!
   write "c2=",c2,!
 }
 write $system.SQLGateway.DropConnection("TestConn")
 quit

可以试试在Mirror配置里面选中使用传输的压缩模式,具体文档看这里

也就是从主机传输到备机、异步镜像成员的内容是压缩后的,这样可以大大较少网络占用。

还有建议将Mirror镜像成员之间传输数据使用的网络和使用数据的外部应用网络区分开,如果使用了ECP配置更加需要注意,如下图区分了1.给用户和其他系统接入使用的网络。2.为ECP通讯使用的私有网以及3.为Mirror通讯的私有网:

Mirror members are on one private LAN, app servers on another for the mirror and on a campus network for external connections

更多Mirror架构以及网络配置建议可以参考官方文档,这里