更新时间:2024-11-12 GMT+08:00
分享

不同场景下配置连接参数

以下示例场景中node代表“host:port”,host为数据库服务器名称或IP地址,port为数据库服务器端口。

容灾场景

某客户有两套数据库实例,其中A数据库实例为生产数据库实例,B数据库实例为容灾数据库实例。当客户执行容灾切换时,A数据库实例将降为容灾数据库实例,B数据库实例将升为生产数据库实例。此时为了避免修改配置文件导致的应用重启或重新发版,客户可在初始配置文件时,即将A、B数据库实例写入连接串中。此时在主数据库实例不可连接时,驱动将尝试对容灾数据库实例建连。例如A数据库实例为{node1,node2,node3}。B数据库实例为{node4,node5,node6}。

url可参考如下命令进行配置:
jdbc:gaussdb://node1,node2,node3,node4,node5,node6/database?priorityServers=3
如果想要能连接主数据库实例的同时,可以连接到主数据库实例内的主机,需要同时配置targetServerType=master,url可以参考如下命令进行配置:
jdbc:gaussdb://node1,node2,node3,node4,node5,node6/database?priorityServers=3&targetServerType=master

负载均衡场景

某客户存在一套集中式数据库实例,包含1主2备三个节点{node1,node2,node3},其中node1为主节点,node2、node3为备节点。

客户希望同一应用程序上建立的连接,较为均匀的分布在三个节点上,则url可参考如下命令进行配置:

jdbc:gaussdb://node1,node2,node3/database?loadBalanceHosts=true

使用loadBalanceHosts时,若连接建立在备DN上,将无法执行写操作。如果业务需要执行写操作,请勿配置该参数。

自动寻主场景

某客户存在一套集中式数据库实例,包含1主2备三个节点{node1,node2,node3},其中node1为主节点,node2、node3为备节点。

客户希望应用连接能建立在主DN上,并在发生主备切换时,自动选择新的主节点建连,则url可参考如下命令进行配置:

jdbc:gaussdb://node1,node2,node3/database?targetServerType=master

日志诊断场景

某客户在使用中出现数据导入慢或出现一些难以分析的异常报错时,可通过开启trace日志进行诊断,url可参考如下命令进行配置:

jdbc:gaussdb://node1/database?loggerLevel=trace

高性能场景

某客户对于相同sql可能多次执行,仅是传参不同的情况,为了提升执行效率,可开启prepareThreshold参数,避免重复生成执行计划,url可参考如下命令进行配置:

jdbc:gaussdb://node1/database?prepareThreshold=5

某客户一次查询1000万数据,为避免同时返回造成内存溢出,可使用defaultRowFetchSize,url可参考如下命令进行配置:

jdbc:gaussdb://node1/database?defaultRowFetchSize=50000

某客户需要批量插入1000万数据,为提升效率,可使用batchMode,url可参考如下命令进行配置:

jdbc:gaussdb://node1/database?batchMode=on

大小写转换场景

在GaussDB中元数据默认存储为小写,如果从元数据默认存储为大写的数据库迁移至GaussDB时,大写的元数据会变为小写。如果原业务中涉及到大写元数据的处理,可以开启uppercaseAttributeName参数,但是不建议通过这种方式来解决问题,建议通过修改业务代码来解决。如果一定要使用,请务必确认当前数据库中的元数据是否全为小写,以避免出现问题。

jdbc:gaussdb://node1/database?uppercaseAttributeName=true

对于DatabaseMetaData中涉及的接口,按照入参直接调用即可,对于ResultSetMetaData中涉及的接口调用方法如下所示:

Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("select * from test_supper");
ResultSetMetaData rsmd = rs.getMetaData();
for (int i = 1; i <= rsmd.getColumnCount(); i++) {
    System.out.println(rsmd.getColumnLabel(i) + "   " + rsmd.getColumnName(i));
}

应用无损透明场景

  • 计划内ALT

    在数据库实例进行计划内维护(重启数据库实例、主备切换、节点重启、DN重启等操作)时,JDBC和DN的连接会断开。可以开启计划内ALT特性,实现连接保持功能,url中可参考如下命令进行配置。gns不支持浮动IP方式配置,不支持配置为127.0.0.1。

    只开启状态通知功能。

    jdbc:gaussdb://node1/database?enableALT=true&gns=ip1:port1,ip2:port2,ip3:port3

    开启加速连接以及快速断连功能。

    jdbc:gaussdb://node1/database?enableALT=true&altLevel=C&gns=ip1:port1,ip2:port2,ip3:port3

    开启加速连接、快速断连以及计划内维护功能。

    jdbc:gaussdb://node1/database?enableALT=true&altLevel=P&gns=ip1:port1,ip2:port2,ip3:port3
  • 计划外ALT

    开启计划外ALT时,应该指定连接主DN。gns服务可选。

    开启计划外ALT,不启用gns服务。

    jdbc:gaussdb://node1/database?targetServerType=master&enableALT=true&altLevel=U

    开启计划外ALT,启用gns服务,同时支持计划内ALT功能。

    jdbc:gaussdb://node1/database?targetServerType=master&enableALT=true&altLevel=U&gns=ip1:port1,ip2:port2,ip3:port3

相关文档